先日といっても1ヶ月前か、、、WSLでubuntuをインストしてみました.
→これ
その後、このWSL-ubuntuからlibusbでUSB deviceを動かそうとしていますが一筋縄ではいかないなと.
以下、重箱の隅つつきなので読んでも全然楽しくないです.
ーーーー
まずWSL-ubuntuにlinusbをインストしなくちゃいけないのは当然そんなもんでしょう.
apt install libusb-1.0-00dev
とかなんとか.
Cのtest code(自作)のコンパイルもつつがなく通ります.
けど実行すると「USB device無いです」系のmessageを吐いてerror stop.
USB deviceをチェックするため、
lsusb
してみるが、
lsusbが無いです.インストします.
apt install usbutils
あらためてlsusbするがUSB deviceが何も表示されない....
原因は、USBのhardware resourceをwindowsが握っているので、そのwin握りを緩めてもらってWSLにも許可してもらう必要があるのです.
netにはそれなりに情報が散在しているのですが、コマンドのoptionが異なるとかいろいろと地雷があるようです.
手始めにやることは、windows側で使うusbipdというコマンドをインスト.
powershellにて、
winget install --interactive --exact dorssel.usbipd-win
powershellにて、
usbipd
と打つと次のような表示が出ます.ああそうですかという感じです.
usbipd-win 5.3.0
Description:
Shares locally connected USB devices to other machines
Commands:
attach Attach a USB device to a client
bind Bind device
それでもって、usbipd attachとかusbipd bindをやって対WSL側に許可を与え、WSL側でlsusbに表示されるようにするわけですが、、、なんだかうまくいかないの.
powershellにて、
usbipd list
と打ってUSB deviceをチェックしてみるなり.1-2が目的のUSB device(自作)です.windows側は認識しています.こいつをWSLから使いたい.
BUSID VID:PID DEVICE
1-2 ffff:0001 TARGET-DEV
1-5 0bda:b85b Realtek Bluetooth Adapter
1-6 0573:1573 USB Audio and HID, USB
1-13 152d:0583 USB SCSI (UAS) マスストレージデバイス
2-1 04d9:1603 USB 入力デバイス
2-4 046d:c534 USB 入力デバイス
次へ行きます.WSL側から.
apt install linux-tools-5.4.0-77-generic hwdata
「そんなの知らないerror」で停まります.
apt install linux-tools-virtual hwdata
こちらは通った.
再びpowershellへ戻り、USBの許可を与えます.
usbpid wsl attach --busid 1-2
エラーでぜんぜん動かない.wslなんかもう受け付けないよと言われます.
usbpidが新しくなっています.(rev5)
MSの
こちらのページに従ってみます.
管理者powershellである必要あり.
usbipd bind --busid 1-2
usbipd attach --wsl --busid 1-2
エラーが出ます.
usbipd: error: There is no WSL 2 distribution running; keep a command prompt to a WSL 2 distribution open to leave it running.
別窓でWSLを起動しておかないとエラーになりますので、別窓でWSLを起動してattachすると通ります.
ところがWSL側でlsusbをやりますと、あらどうしたことでしょう? 関係ないdeviceが表示されます.目的deviceが表示されません.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
ならば、VID/PIDでやってみる.
usbipd unbind --busid 1-2
usbipd bind --hardware-id ffff:0001
usbipd attach --wsl --hardware-id ffff:0001
結果は変わらず.
↓USB device tree viewer(win)によると、USB root hubの先に目的のdeviceが接続されています.でもWSL側では目的のdeviceが認識されません.WSLが意図的に無視しているのか?
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
↓試しに目的のdeviceを外して、カメラを接続してbind/attachしてみたところ、問題ありません.認識されます.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 046d:0807 Logitech, Inc. Webcam B500
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
ということは、、、目的のdevice(自作)が悪いのは確定です.
1)VID:FFFFが悪いのか?
2)デバドラの接続でabortしているのか?
3)WSLがabortしているのか?
4)ubuntuがabortしているのか?
手続き3で2が起きている感触があります.
理由1:bindでstatus:shareまで行くが、attachでstatus:attachedまで行かない
理由2:attachで「usbipd: info: Loading vhci_hcd module.」というメッセージが出る
理由3:目的のdeviceは自作物なので既存moduleとは整合しない →abort?
WSLではない”linuxマシン”ならば「理由123」には抵触せずに動くんですがね.
これは困った、詰みです.
WSLから一旦撤退します.WSL便利なんだけどな.
#linuxのやり方は失念したけど、VID/PIDやUSB classにデバドラを紐づけるudev界隈の作法がなにか在りましたよねぇ、それでしょうねぇ....
あでゅ~