起動時に接続されているとバスパワーを使い過ぎて起動しないUSBデバイスを無効化して起動する
タイトル長すぎる
なんで
Raspberry pi 2 Model B?にDigiBestの地デジチューナー(KTV-FSUSB2/V3)を接続して使用しているが、これが刺さっていると起動時に黙り込んでしまう。家に余っているHDMIのディスプレーがなく原因はよくわからないものの、まあおそらくバスパワーが足りていないのではと当たりをつけた。
ちなみに黙った場合はチューナーを引っこ抜いて元電源をオフオンすれば起動する。起動した後に再度挿すと動く。
どうする
ここら辺を読んだところ、どうやらバスパワーの有効無効を物理的な抜き差しなしに行えて、かつ/etc/rc.localはパスパワー供給開始前に走るようなので、ブート時にバスを無効化し、Mirakurunが動くDockerサービスが走る少し前に再度有効化してみたい。
まずrootになっておく。sudo su -
code:stdout
root@raspberrypi:~# lsusb
Bus 001 Device 004: ID 0511:0046 N'Able (DataBook) Technologies, Inc.
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
root@raspberrypi:~# lsusb -t -s 1:4 # Bus 001 Device 004 なので 1:4
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/5p, 480M
|__ Port 1: Dev 3, If 0, Class=Vendor Specific Class, Driver=smsc95xx, 480M
|__ Port 4: Dev 4, If 0, Class=Vendor Specific Class, Driver=, 480M
今回の対象のN'Able (DataBook) Technologies, Inc.のポート番号は4であることがわかったので、これを起動時に無効化する。
/etc/rc.localのexit 0の前に以下を書き込む。1-1.4の4がポート番号。
code:sh
echo -n "1-1.4" > /sys/bus/usb/drivers/usb/unbind
余裕があればここらへんでrebootしてみる。とりあえず起き上がってきたら成功。
手動で使用可能にする。再度rootになり
code:bash
echo -n "1-1.4" > /sys/bus/usb/drivers/usb/bind
手動で実行するのは面倒なのでsystemdでDocker.service起動前に自動で使用可能にする。
code:/etc/bin/usb_bind_4.sh
echo -n "1-1.4" > /sys/bus/usb/drivers/usb/bind
code:/etc/systemd/system/usb-bind.service
Description=Enable USB After Boot
Before=docker.service
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/usb_bind_4.sh
WantedBy=multiuser.target