旬のトピック、最新ニュースのマピオンニュース。地図の確認も。

Windows Subsystem for Linuxガイド 第30回 USBデバイスをWSLで使う - その4

2024年01月08日14時40分 / 提供:マイナビニュース

前回は、カーネルの再コンパイルを行った。今回は、WSLのカーネルを差し替えUSB大容量ストレージデバイスとなる開発ボードを接続してみる。なお、前々回に解説したusbipd-winはバージョンアップが行われている。このあたりも合わせて解説したい。原稿執筆時点のWindows 11は、Ver.23H2、OSビルド22631.2861、WSLはVer.2.0.14.0である。
カーネルのコピー

前回作成したカーネルをWin32側(ここではC:\WSL-Kernelと仮定)にコピーする。このとき、ファイル名をvmlinuxから変更しておくと、区別がしやすくなる(同vmlshioda)。

また、WSLを停止し、ユーザーのホームディレクトリにある「.wslconfig」ファイルを編集し、リスト01のようにカーネルファイルのパスを設定する。その後WSLを再起動すれば、カーネルが変更されているはずである。WSLから「uname -a」コマンドでバージョンが更新されていることを確認できる(写真01)。

■リスト01

[wsl2]
kernel=C:\\WSL-Kernel\\vmlshioda

usbipd-winのアップデート

12月6日にusbipd-win ver.4.0.0が公開された。最新のWSLと組み合わせるには、アップデートしておく必要がある。

なお、Ver.4.0.0からコマンドライン文法が変更になった。具体的には、

usbipd サブコマンド [オプション]

という書式となった。

旧バージョンでは、wslコマンドに続けてサブコマンドを入力し、usbipd本来のコマンドとWSL接続用のコマンドが分離されていた(詳細は前々回の記事参照)。

新バージョン(表01)では、wslコマンドは廃止され、attachサブコマンドでのみ“--wsl”オプションにより接続先がWSLであることを示すようになった。また表02に主なサブコマンドのオプションを示す。

今回のコマンドラインの変更は、従来のUSB/IPコマンドとの整合性を図ったもの。このため、USBデバイスは、attachする前にbindコマンドで共有を開始しておく必要がある。bindサブコマンドとそれを解除するunbindサブコマンドの実行には管理者権限が必要だが、bindサブコマンドを一回実行するとunbindコマンドで解除するまで共有状態が続く。PowerShellからは、「Start usbipd "bind -b 1-3" -Verb runas」とする(Startは、Start-Processのエイリアス)。attachサブコマンドなどは、通常権限で実行できる。

具体的な手順としては、

Start usbipd "bind -b " -Verb runas
WSLを起動
usbipd attach --wsl -b
USBデバイスをWSL側で利用
usbipd detach -b

となる。bindサブコマンドで“--force”オプションを使わなかった場合、attachするまでは、指定したUSBデバイスはWin32側で利用できる。ただしattachサブコマンドを実行するときには、WSLディストリビューションが起動中でなければならない。なお、WSL側での設定は不要になった。

USB大容量ストレージデバイスの場合、ストレージデバイスのパスを探し、これを使ってマウントを行う必要がある。デバイスパスを探すには、ボリュームラベルを使う方法が最も簡単だ。

USBデバイスを接続したあと、エクスプローラーの表示をみるか、コマンドラインから「Get-Volume [<ドライブ文字>]」で調べる。

WSL側では、「ls -l /dev/disk/by-label」でラベルとデバイスパスの対応を知ることができる(写真02)。

ボリュームラベルが使えない場合には、「ls -l /dev/disk/by-id」の出力から“usb-”を先頭に持つリンクを探しデバイスをみつける。判断ができない場合には、デバイスを着脱して変化のあるデバイスを探す。
Raspberry Pi Picoのファームウェア変更

ここでは、USB大容量ストレージデバイスとなる開発ボード(Raspberry Pi Pico)を使い、開発環境としてthonnyを使いファームウェアを書き換えてみる。

Raspberry Pi Picoは、基板上のボタン(BOOTSEL)を押しながらUSBコネクタを接続すると、ファームウェアの書き換えモード(BOOTSELモード)になる。このとき、Raspberry Pi Picoは、USB大容量ストレージデバイスとなる。なお、ボタンを押さずにUSBコネクタを接続した場合は、USBシリアルデバイスになる。

手順としては、

Raspberry Pi PicoをBOOTSELモードで接続
usbipdで接続(BUSIDは1-2であると仮定) usbipd bind -b 1-2 usbipd attach -w -b 1-2
WSL側のコンソールに移動
Thonnyをインストール sudo apt install thonny
マウント先(/mnt/rpico)を作成 sudo mkdir /mnt/rpico
接続の確認とデバイスファイルパスの確認 lsusb lsblk -f ls -l /dev/disk/by-label (ここでデバイスは/dev/sde1だったとする)
マウント sudo mount /dev/sde1 /mnt/rpico -o umask=000
Thonnyを起動 thonny &

という手順で行う。その後、thonny内でファーウェアの書き換えを行う(写真03)。ファームウェアの書き換え方法は、thonnyのWebページなどを参照してほしい。

usbipd-winによるUSBデバイスの接続に関して、4回にわたって解説してきたが、ここで一区切りとしたい。

> Windows Subsystem for Linuxガイド 連載バックナンバー
https://news.mynavi.jp/tag/winsubsystem/

続きを読む ]

このエントリーをはてなブックマークに追加

関連記事

ネタ・コラムカテゴリのその他の記事

地図を探す

今すぐ地図を見る

地図サービス

コンテンツ

電話帳

マピオンニュース ページ上部へ戻る