Ubuntu on WSL2にSegger Enbedded Studioをインストールする。その3(諦めモード)

 まだびみょ~に諦めてません。びみょ~だけど。

さて、世界中の人が気づいているかもしれませんが、WSL2 から Windows ホストの USB デバイスへのアクセスには制限があります。というか、一部を除いてできません。USB Audio やキーボードやマウスなどの USB HID デバイスは使えますが、それ以外の USB UART や 今回使おうとしているデバッガ/プログラマなどは使えません。Ubuntu から lsusb しても表示されません。

nRF52840 DK には同じ Nordic のチップ nRF5340 を使用した J-Link デバッガが載っていますので、ドライバをインストールする必要があります。…この時点で、WSL2 の上で全部やろうという計画は崩壊している気もしますが。

幸いというか、WSL の中の人がブログでやり方を示してくれています。Connecting USB devices to WSL。この記事は2021年11月のものなので、バージョンや機能など変わっているかもしれません。当時の usbipd-win のバージョンは 1.1.1 で、現在は 5.0.0 です。

大まかな流れは以下のような感じです。

  1. Windows 側に usbipd-win をインストールします。
  2. WSL の Linux 上にユーザスペースの USB/IP ツールと USB ハードウェア ID のデータベースをインストールします。
    sudo apt install linux-tools-5.4.0-77-generic hwdata
    sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/5.4.0-77-generic/usbip 20
  3. コマンドプロンプトを管理者モードで開き、usbipd list を実行します。上記のページでは usbipd wsl list となっていますが、wsl は不要(というか削除された?)ようです。
    # usbipd list
    Connected:
    BUSID VID:PID DEVICE STATE
    1-10 1b1c:0c21 USB 入力デバイス Not shared
    1-13 26ce:01a2 USB 入力デバイス Not shared
    1-14 8087:0033 インテル(R) ワイヤレス Bluetooth(R) Not shared
    6-2 001f:0b21 USB Audio, USB 入力デバイス Not shared
    8-1 0853:0104 USB 入力デバイス Not shared
    8-2 046d:c548 Logitech USB Input Device, USB 入力デバイス Not shared
    8-3 1a86:e010 USB 入力デバイス Not shared
    9-4 08bb:27c4 USB AUDIO DAC, USB 入力デバイス Not shared

    Persisted:
    GUID DEVICE


  4. usbipd で busid を指定して USB デバイスを WSL にアタッチします。
    usbipd detach --busid <busid>
  5. 作業が終わったら、同様にデタッチします。
    usbipd wsl detach --busid <busid>

ところで usbipd-win には、bind/unbind というコマンドや、server というコマンドがあるようです。bind/unbind は持続的な接続を行う場合に使用するようです。また、usbip は、bind したデバイスに USB/IP を使用してネットワーク越しのアクセスもできるようです。

sudo usbip attach --remote=<HOST> --busid=<BUSID>

上記の3で J-Link が表示されていないのは、まだドライバをインストールしてないから、だと思います。ドライバのインストールはどうしようか迷い中。というのもドライバをインストールしたくないから、WSL2でサンドボックス作ってそこでやりたい、というのがそもそもなので。でも結局インストールしちゃうんだろうなぁ…。

Windows側に J-Link ドライバをインストールしたら、そもそもWSL環境でやる意味も少なくなってくるので、この記事も単なる実験記録になりそうです。

それはさておき。
なぜアクティベートできないのかという件ですが、もう少し突っ込んでみます。あまり突っ込んで回避方法とかやっちゃうとメーカーさんに目をつけられるのも怖いので程々に。

Segger のサイトに、ライセンスタイプに関する記述がありました。

  • J-Link-locked license
    アクティベーションは J-Link に保管され、持ち運びできるUSBドングルのように使える。
  • PC-locked license
    アクティベーションは PC に保管され、固定される。
  • Multi-user license
    マルチユーザライセンスはロックされる、どのコンピュータでもアクティベートできる。

MACアドレスで怒られるということは、今回のライセンスは PC-locked タイプだと思うのですが、試してみるには J-Link ドライバをインストールして、どうなるか見てみる必要があります。うーん、にわたま。でも、すでに usbipd-win はインストールしちゃいましたから、やってしまいましょう。

と、その前に、昨日 STM32 の評価ボード Nucleo-L476RG を買ってきましたので、それを繋いでみます。

ドライバが入っていないため⚠がついてますが、表示されます。なぜ J-Link はでないのでしょうか。もうこうなったら仕方ないのでドライバをインストールしてみます。ダウンロードページから使用条件許諾してダウンロードします。

ちなみに Segger のダウンロードページには、ST-Link を J-Link にするファームウェアがあります。ここを見ると、今回購入した Nucleo-L476RG は対象になっているようですね。SEGGER RTT Viewer とか結構ありがたいので、書き換えちゃおうかしら。

さて J-Link Software and Documentation Pack をインストールしてみます。


Install legacy USB Driver for J-Link という項目がありますが、これは Segger のナレッジベースによれば、すでにサポートされなくなった古いプローブを使用する場合にはインストールするというもので、最近のプローブは WinUSB ドライバを使用するのでインストールする必要はないようです。


このなかの BULK interface が Nordic のボードを繋いだときに出る表示です。なぜかCOMポートがたくさんありますが。

ここからは SES へ、となっていくわけですが、STmicro も Nordic も VSCode を利用した開発環境の構築ができるようです。

実はここだけの話、SES も Keil μVision も IDE が使いづらいんですよね。どちらかというと、重たいけれど Eclipse ベースの STM32CubeIDE のほうがこなれてるというか。特に μVision5 はシンボルの一括リネームができないとか、ソースのインデントを好みにするとか、いろいろと不満があります。それなら VSCode でやっちゃうのもありかな、という感じ。

MACアドレスの件ですが、WSL2ネットワークを新機能でブリッジモードに変更する(IPv6も利用可)[ただし暫定]という記事を見つけました。Windows 11 Pro 以上であることが必要なようですが、これでブリッジすればいいのかもしれません。が、そろそろ VSCode でいいかな、と思い始めてしまったので、とりあえず一旦はここまでとします。

0 件のコメント:

コメントを投稿

Linux 6.6キタワァ。

6.6.87キタワァ。 本日、wsl --update したら wsl.2.5.7.0が来てました。 やっと6.6になったね。