WSL2からWindows11のUSB機器を見る
WSL2からはWindows11側のUSBには普通はアクセスできないのだが、usbipd-winをインストールするとなんとかなる。
Bootsel modeでPicoをWindows11に接続してusbipdを実行した場合、例えば以下のようになる。
PowerShell(管理者)
PS > usbipd list Connected: BUSID VID:PID DEVICE STATE 2-3 2e8a:0003 USB 大容量記憶装置, RP2 Boot Not shared 2-5 8086:0b63 Intel(R) Usb Bridge Device Not shared 2-10 8087:0033 インテル(R) ワイヤレス Bluetooth(R) Not shared Persisted: GUID DEVICE XXXX-XXXX-XXXX-XXXX CMSIS-DAP v2 Interface, USB シリアル デバイス (COM5) XXXX-XXXX-XXXX-XXXX CMSIS-DAP v2 Interface, USB シリアル デバイス (COM7) XXXX-XXXX-XXXX-XXXX USB 大容量記憶装置
こうなっている場合にBUSIDが「2-3」がPicoなので、これをWSLでもアクセス可能にすると、Statusが「Attached」になる。
PowerShell(管理者)
PS > usbipd bind -b 2-3 PS > usbipd attach --wsl -b 2-3 usbipd: info: Using WSL distribution 'Ubuntu-24.04' to attach; the device will be available in all WSL 2 distributions. usbipd: info: Using IP address XXX.XX.XX.X to reach the host. PS > usbipd list Connected: BUSID VID:PID DEVICE STATE 2-3 2e8a:0003 USB 大容量記憶装置, RP2 Boot Attached 2-5 8086:0b63 Intel(R) Usb Bridge Device Not shared 2-10 8087:0033 インテル(R) ワイヤレス Bluetooth(R) Not shared
WSL側で見る(lsusb)と確かにPicoが見えるようになった。
Ubuntu(Attach前)
$ lsusb 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
Ubuntu(Attach後)
$ lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 2e8a:0003 Raspberry Pi RP2 Boot Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
BusIDはWindowsとWSLで関係ないみたいだ。問題なのはもう一回Bootsel ModeでWindowsに接続すると、WindowsではAttachedなのに、WSLでは接続されていない状態になる。つまり、Bootselする度にWindowsでunbind、bind、attachし直さないとWSLから見えなくなってしまう。結局、コンパイルを繰り返すたびにこの作業が必要になる。なんじゃそりゃ。
udevでsudo回避
WSLの方でBootsel ModeのPicoに接続できるようになったが、実際には管理者権限が無いとアクセスできない。つまりsudoが要るわけだ。この時にちゃんとルールを設定しておけば、sudoなしでPicoにアクセス可能になる。
これを/etc/udev/rules.dに(sudoで)コピーすることでsudoなしでもDebugprobeやpicoにアクセス可能になる。これがわかるまで苦労したよ。ちなみに、これを反映させるために再起動した方が良さそう。コピーしただけでは状況は変わらなかった。
Runボタンでいけるのか
WSL2のUbuntuでlsusbしてPicoがアクセスできることを確認したうえで、VS Codeの右下の「Run」ボタンを押すと、ターミナルに以下のような表示が出て、blink(elchika!)が実行される。
VS
* 実行するタスク: /home/XXX/.pico-sdk/picotool/2.0.0/picotool/picotool load /home/XXX/blink/build/blink.elf -fx Loading into Flash: [==============================] 100% The device was rebooted to start the application. * ターミナルはタスクで再利用されます、閉じるには任意のキーを押してください。
ようやくここまで来たが、例えばLED_DELAY_MSを250から100に変えて、コンパイルして、Bootsel ModeでPicoつなぎなおして、PowerShellからusbipdでunbind, bind, attachしてから「Run」ボタンを押すと、ようやくチカチカが速くなる。
実際、だめじゃね。(つづく)
投稿者の人気記事
-
akira.kei
さんが
前の金曜日の18:59
に
編集
をしました。
(メッセージ: 初版)
-
akira.kei
さんが
前の金曜日の19:01
に
編集
をしました。
-
akira.kei
さんが
前の金曜日の19:03
に
編集
をしました。
-
akira.kei
さんが
前の金曜日の19:23
に
編集
をしました。
-
akira.kei
さんが
前の金曜日の19:27
に
編集
をしました。
-
akira.kei
さんが
昨日の10:22
に
編集
をしました。
ログインしてコメントを投稿する