2026年1月15日木曜日

WSL Ubuntu その後 libusbが動かん~(自作詰み)

先日といっても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界隈の作法がなにか在りましたよねぇ、それでしょうねぇ....

あでゅ~

15 件のコメント:

  1. ネットワークやファイルならVM同士をつなげる仕組みが最初から用意されていますが、そういえばUSBみたいなのはどうなのかとGeminiに聞いてみたところ、usbipd-winというツールをWindows側で動かし、ubuntu側でもなにやら設定が必要なようですね。できなくはなさそうですが・・。

    返信削除
    返信
    1. デバドラ界隈はよくわかんないの

      削除
    2. スミマセン、自分もです・・。
      無限に時間を吸い取られそうで近づけません。(>.< )

      削除
    3. 全然関係ないのですが、最近(たぶん)生まれて初めて半田を最後まで使い切りました。
      おそらく次が生涯最後の半田となると思うのでGeminiに聞いて選びました。GeminiからはHAKKOのFS402-02という60%スズΦ0.8mmのやつをすごい勢いで推されたのでAmazonで買いました。たしかにすごくいいですねこれ。自分は重度のフラックス信者なのですが、この半田を使うとフラックス要りません。60%なので溶けるのも早いし。おススメです。

      削除
    4. ハンダを鬼のように消費するものリスト:
       ピンヘッダ  ←40pin2列とか
       BNCコネクタ ←熱が逃げる
       スイッチ   ←大き目のACのやつ

      削除
    5. タブ系はたっぷりとハンダをのせないといけませんね。
      死ぬまでにもう一巻きくらい使い切りたいので、たくさんはんだ付けします〜

      削除
    6. ハンダの特盛り
      ハンダのチー牛
      ハンダの大食いチャレンジ

      削除
  2. >読んでも全然楽しくないです
    「読んでて楽しい(笑)」私(わたくし)が通りますよ~。

    以前、
    ・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アドレス・ポート割り当て」とかあるハズなんだが、デフォルトで行けちゃうのかな?あと、ポートによっては「管理者権限」とか要るハズ(なので、デーモンを「管理者で実行」なのかも知れない)

    返信削除
    返信
    1. なんか「usbipd」界隈は、頻繁にアップデートがあるので、
      ・ネットの情報は当てにならない
      可能性もあります。
      ※私の時は、「WSL」「WSL2」で、扱いが違って「ハマった」記憶がある。今はまず「WSL2」しか無いんで、大丈夫だと思いますが。
      「WSL」は、「独自ビルドのlinux」で、「仮想マシン」では無いです。まったくと言っていいほど別物です。

      削除
    2. あ、だからIPがポコポコと出てくるんですね
      USBはIP関係無いじゃんと思ってたんですがね

      手足を動かすのは苦手っぽいWSLでした~

      というわけでいま、
      ふつーのLINUXマシンで動かしつつあるとこ

      虚無じゃ虚無

      削除
    3. 参考になるか分かりませんが、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)」は、「オミット」してるカモです。

      イロイロ疑い出したら、キリ無いな・・・

      削除
    4. 「usbipd」は、単に「USB/IP 変換」してるだけなので、多分、
      ・ふつーの linux
      でも、IPアドレス・ポート(と、権限)を設定すれば使えるはずです。
      >VID:FFFFが悪いのか?
      は、「ソレで動くか?」で、確認できますね。
      やってみる価値はあるカモです。

      削除
    5. なるほど、いまは、
      USB3 portにUSB2 deviceを挿しています
      これは怪しいかも

      FFFFも気になるとこ

      削除
    6. >USB3 portにUSB2 deviceを挿しています
      今のマシンって、
      ・USB2ポート
      無いのが多いんだよな・・・
      ※何故か、間に「USBハブ」入れたら動いたのがあったな。

      削除
    7. ハブにそんな効用があったとは

      まぁ焼酎に漬けると滋養強壮の薬になるとも聞きますし(沖縄)

      削除