先日といっても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界隈の作法がなにか在りましたよねぇ、それでしょうねぇ....
あでゅ~
ネットワークやファイルならVM同士をつなげる仕組みが最初から用意されていますが、そういえばUSBみたいなのはどうなのかとGeminiに聞いてみたところ、usbipd-winというツールをWindows側で動かし、ubuntu側でもなにやら設定が必要なようですね。できなくはなさそうですが・・。
返信削除デバドラ界隈はよくわかんないの
削除スミマセン、自分もです・・。
削除無限に時間を吸い取られそうで近づけません。(>.< )
全然関係ないのですが、最近(たぶん)生まれて初めて半田を最後まで使い切りました。
削除おそらく次が生涯最後の半田となると思うのでGeminiに聞いて選びました。GeminiからはHAKKOのFS402-02という60%スズΦ0.8mmのやつをすごい勢いで推されたのでAmazonで買いました。たしかにすごくいいですねこれ。自分は重度のフラックス信者なのですが、この半田を使うとフラックス要りません。60%なので溶けるのも早いし。おススメです。
ハンダを鬼のように消費するものリスト:
削除ピンヘッダ ←40pin2列とか
BNCコネクタ ←熱が逃げる
スイッチ ←大き目のACのやつ
タブ系はたっぷりとハンダをのせないといけませんね。
削除死ぬまでにもう一巻きくらい使い切りたいので、たくさんはんだ付けします〜
>読んでも全然楽しくないです
返信削除「読んでて楽しい(笑)」私(わたくし)が通りますよ~。
以前、
・WSL2 で、「録画サーバ」を構築
しようとして(チューナーは、USB接続の奴。ドライバ自体は、Windows / Linux 両方ある)
同じような目にあって、結局「ふつーの linux マシン」で、構築しました(笑)
「WSL2」は、実際は「仮想マシン」(Hyper-V と基本的には同じ技術を使っているらしいが、何故かHyper-V マネージャーには出て来ない)なので、基本的に、
・手足は無い(実デバイスは接続されていない)
です。一応「仮想デバイス」として、
・ディスプレイ/キーボード/マウス/ネットワーク
はありますが、「USB」自体はありません。
※VMware とかだと「仮想USBデバイス」と言うのが、始めから存在している。ホストマシンの「USBデバイス」を、割り当てて使うことが出来る。
じゃぁ、これはどーやって実現してるの?と言うと、
・USB/IP
(USB を、「IPネットワーク越しで」使う技術。そう言えば昔、これをハードウエア化した「USBデバイスサーバ」(サイレックス社とかのが有名。昔使ってたことがある。)と言うのがありました。コレを使うと、USB接続プリンタ、等を「ネットワーク共有」出来た。)
を利用しています。
「usbipd」と言うのが、ソレですね。
なので、コレは実際は、
linux[WSL2 ⇔ usbipd] ⇔ (IP Network) ⇔ [usbipd ⇔ USBデバイス]Windows
のような「しちめんどくさいこと」をやってます。
※ホントは「IPアドレス・ポート割り当て」とかあるハズなんだが、デフォルトで行けちゃうのかな?あと、ポートによっては「管理者権限」とか要るハズ(なので、デーモンを「管理者で実行」なのかも知れない)
なんか「usbipd」界隈は、頻繁にアップデートがあるので、
削除・ネットの情報は当てにならない
可能性もあります。
※私の時は、「WSL」「WSL2」で、扱いが違って「ハマった」記憶がある。今はまず「WSL2」しか無いんで、大丈夫だと思いますが。
「WSL」は、「独自ビルドのlinux」で、「仮想マシン」では無いです。まったくと言っていいほど別物です。
あ、だからIPがポコポコと出てくるんですね
削除USBはIP関係無いじゃんと思ってたんですがね
手足を動かすのは苦手っぽいWSLでした~
というわけでいま、
ふつーのLINUXマシンで動かしつつあるとこ
虚無じゃ虚無
参考になるか分かりませんが、VMware で、USBデバイスを使おうとしたときに、
削除・USB3ポートに刺した、「USB2」デバイス
や
・USB2ポートに刺した、「USB3」デバイス
が、動かなかったことがあります。
※ふつーに使っている分には「どこかで、勝手にプロトコル変換」されるので使えるのだが、こう言うのは「そんな便利な仕組みが無い」ので、「変なデバイスが繋がってるので無視」されたりしました。
一応、
>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
と、両方見えてるので「大丈夫」とは思いますが・・・
あと、linux側に、
・USB3 サポート(ドライバ)
が無いと、動かない?かも知れません。
※ディスクリプタが「3.0」だと、動きそうなもんですが。。。この辺は、私もあんまり詳しくないです。
>VID:FFFFが悪いのか?
も、「怪しいと言えば怪しい」ですね。
↑ の、「プロトコル変換」中で、「変なディスクリプタID(0000 とか FFFF)」は、「オミット」してるカモです。
イロイロ疑い出したら、キリ無いな・・・
「usbipd」は、単に「USB/IP 変換」してるだけなので、多分、
削除・ふつーの linux
でも、IPアドレス・ポート(と、権限)を設定すれば使えるはずです。
>VID:FFFFが悪いのか?
は、「ソレで動くか?」で、確認できますね。
やってみる価値はあるカモです。
なるほど、いまは、
削除USB3 portにUSB2 deviceを挿しています
これは怪しいかも
FFFFも気になるとこ
>USB3 portにUSB2 deviceを挿しています
削除今のマシンって、
・USB2ポート
無いのが多いんだよな・・・
※何故か、間に「USBハブ」入れたら動いたのがあったな。
ハブにそんな効用があったとは
削除まぁ焼酎に漬けると滋養強壮の薬になるとも聞きますし(沖縄)