編集履歴一覧に戻る
akira.keiのアイコン画像

akira.kei が 2024年11月23日10時22分12秒 に編集

コメント無し

本文の変更

+

< [前の記事](https://elchika.com/article/a6724fef-c459-4a86-95fa-a34815309d9c/) | [次の記事](https://elchika.com/article/81fc52a0-43d7-40af-8824-0afd2cf25deb/) >

## WSL2からWindows11のUSB機器を見る WSL2からはWindows11側のUSBには普通はアクセスできないのだが、usbipd-winをインストールするとなんとかなる。 - [USB デバイスを接続する](https://learn.microsoft.com/ja-jp/windows/wsl/connect-usb) - [WSL2へUSBデバイス共有、usbipd-win 4](https://qiita.com/motoJinC25/items/e332d731111c2a29ca25) 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にアクセス可能になる。 - [99-picotool.rules](https://github.com/raspberrypi/picotool/blob/master/udev/99-picotool.rules) これを/etc/udev/rules.dに(sudoで)コピーすることでsudoなしでもDebugprobeやpicoにアクセス可能になる。これがわかるまで苦労したよ。ちなみに、これを反映させるために再起動した方が良さそう。コピーしただけでは状況は変わらなかった。 ## Runボタンでいけるのか WSL2のUbuntuでlsusbしてPicoがアクセスできることを確認したうえで、VS Codeの右下の「Run」ボタンを押すと、ターミナルに以下のような表示が出て、blink(elchika!)が実行される。 ```:VS Code * 実行するタスク: /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」ボタンを押すと、ようやくチカチカが速くなる。 実際、だめじゃね。(つづく)