akira.keiのアイコン画像
akira.kei 2024年11月22日作成 (2024年11月24日更新) © GPL-3.0+
セットアップや使用方法 セットアップや使用方法 Lチカ Lチカ 閲覧数 98
akira.kei 2024年11月22日作成 (2024年11月24日更新) © GPL-3.0+ セットアップや使用方法 セットアップや使用方法 Lチカ Lチカ 閲覧数 98

Raspberry Pi Picoのデバッグ環境をWindows11+WSL2で(2/3)

< 前の記事 | 次の記事 >

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のアイコン画像
機械系エンジニアだが電子工作を趣味としている。週末はひとりバーベキュー。
ログインしてコメントを投稿する