Linux 6.6キタワァ。

6.6.87キタワァ。

本日、wsl --update したら wsl.2.5.7.0が来てました。

やっと6.6になったね。

NordicのnRF5-SDKのメモ。

 Nordic の Bluetooth Low Energy の開発キット PCA10056nRF52840)を先日よりいじってるのですが、SDK がけっこういろいろあるようなので自分用に整理してみたメモ。

  • nRF Connect SDK - ちょっと乱暴な分類ですが、Zephyr RTOS ベースでのアプリケーション SDK。VSCode の 拡張機能から使用する nRF Connect for VS Code はこれをベースにしています。
  • nRF Connect for VS Code - VSCode 上で nRF デバイスの開発を行う拡張機能。toolchain の管理やデバッグのための機能を提供すします。DeviceTree Visual Editor も含まれていて、nRF デバイスのピンアサインやペリフェラルの設定もできる(らしいです。うちではちゃんと動かせてないので詳細不明。たぶん、STM32CubeMX みたいな感じ)。
  • nRF Connect for Desktop - クロスプラットフォームの開発サポートツールで、BLE の通信テストや Programmer、RSSI Viewer、Serial Terminal などを含んでいます。Programmer はフラッシュを全消去したりイメージを書き込んだりするときに使うので、インストールしておきたいツールです。
  • nRF5-SDK - nRF51、nRF52 シリーズの SDK です。現在は nRF Connect SDK に引き継がれていて、こちらはメンテナンスモードになっているようです。詳細は nRF Connect SDK and nRF5 SDK statement にありますが、nRF5 SDK がターゲットにしていた BLE、ANT  などに加えて、Thread、Zigbee、Bluetooth mesh などの技術への対応が必要になってきたこと、ハードウェアメーカからの設計時間の短縮やプロジェクト間でのリソースの再利用できるような要望が増えてきたこと、複数のプロトコルを組み合わせることが容易にできるようにすること、などに対応するのが nRF Connect SDK だそうです。statement ページの下の方に SDK の機能比較がありますので、参考になるかも。一方で、nRF5 SDK が廃止されるかというとそうではなくて、当面の間メンテナンスされますが、新チップや BLE5 よりあとの機能はサポートされないとのことです。実際 nRF53 や nRF91 シリーズは nRF5 SDK のサポート対象外です。
  • nrf と nrfx と nrfy - どれもペリフェラルドライバですが、それぞれにちょっと違いがああります。nRF5-SDK でダウンロードしたパッケージには nrfy は含まれていませんが、Github リポジトリには簡単な説明があります。nrf はオーソドックスな HAL ドライバで、nrfx は nrf でカバーしきれないハードウェアを直接叩く機能も含めたドライバ、nrfy(HALY) は HAL の拡張で、HALの代わりに使用できるような、基本的なハードウェアのユースケースを単一の関数にまとめたようなもので、キャッシュとバリア管理の機能を追加したもの、だそうです。ncs-3.0.0 で登場し、随時機能が追加されているようです。

VSCodeでbare metal(小ネタ)。

 Windows Terminal、いいですねぇ。タブ式ターミナルで使いやすいです。PowerShell も ArchLinux もコマンドプロンプトも MSYS2 の zsh も、全部これで使ってます。

一方で、UNIX 系(昔は AT&T のコピーライトの関係で U*NX なんて書いてましたね、最近見ないですが)のホストに接続するときは ssh やら telnet やら、あるいはシリアルコンソールやらを使います。こちらは WezTerm とか TeraTerm とか WindTerm とか Alacaritty とかいろいろありますが、そこでメインの作業をするというほどでもないので、RLogin を使用しています。COM ポートでのシリアルコンソールも使えるし、xterm 256色も使えるし。

ただ一方、VSCode で開発とかやるなら、VSCode 内でできればうれしい。特にデバッグ時のステップ実行のときに、F10 とか F11 とかのファンクションキーを押しながらシリアルコンソールを起動したターミナルを前面に出す、とかすごく面倒。VSCode の中から使える シリアルコンソールがないかな、と思ったら、Market Place にありました。

Serial Monitor。このツールに Serial Monitor というのがあり、これが使えるようです。

また、VSCode 内でペリフェラルレジスタやメモリダンプを確認できる Embedded development with C++ | Create and debug embedded applications というのもあります。

このページの GET STARTED にある、Download and install the Embedded tooling で、ちょっとわかりづらいけれど、Visual Studio Code のタブがあります。

ただ、なんかまだいろいろこなれてないのか、コンパイルはできるのに #include でファイル名に波線がついて「ファイルが見つかりません」的なことを言ってみたり、関数やマクロが未定義とか言われたり、エクスプローラビューでファイル名がグレーになってたりします。そのへんがちゃんと動けば完璧なんだけどなぁ。

VSCodeでbare metal(STM32L476RG編)。

 Ubuntu WSL2 で Segger Embedded Studio を動かすことを諦めて、VSCodeでやることにしました。STM32 VS Code Extension

あと、ピンアサインやペリフェラルの初期設定、HALドライバというかライブラリの自動ダウンロードと、初期化コードとmain()テンプレートの作成をしてくれる STM32CubeMX

それに ARM のクロスコンパイルをしてくれる arm-none-eabi-gcc か clang。ArchLinux では arm-none-eabi-gcc パッケージですが、Ubuntu だと gcc-arm-none-eabi パッケージになっているみたいです。

今気づいたけど、Windows上でクロスコンパイルをするなら mingw-w64 の GCC を使うことになるだろうから、やっぱり Ubuntu WSL2 上でやったほうがいいんだろうか。Linux 用の VSCode もあるわけだし。そういえば Visual Studio は 2017 あたりから Clang をサポートしているはずだけれど、こちらでクロスコンパイルはできるんだろうか。一応、WSL 用のバイナリは生成できるらしいけれど、アーキテクチャが違うとどうなんだろう。生粋の Clang なら、--target <triple> オプションで arm-v8-unknown-none-eabi などと指定すればよさそうだけれど。…と思ったら、ARM GCC Cross Compilation in Visual Studioなんていう記事がありました。これは GCC だけれど、たぶん Clang でもできるんだろうな。


と、それはさておき。

bare metal です、bare metal。ちなみにベアメタルは加工前のむき出しの金属みたいな意味。OS の皮を被っていませんので。

STmicro のサイトに VSCode 拡張機能の特設ページがあります。上でもちょっと触れましたが、STM32CubeMX と、binutils 的な STM32CubeCLT、それに STM32 VS Code Extension で構成すればいいようです。Extension のページの prerequisites には、CubeCLT は必須、CubeMX はあったほうがいいよ、的な感じ。ST-MCU-FINDER は MCU を比較選択するのに便利くらいな感じでしょうか。自分的には CubeMX は最高だと思います。ピンとペリフェラル、クロック設定をちょいちょいと選択して設定していくだけで、プロジェクトのスタートポイントが作成できるのは、bare metal 開発ではかなり楽ちんです。

まずは CubeCLT からインストールします。

ダウンロードして zip を展開し、インストーラを実行すると ST-Link のドライバをインストールするか聞いてくるので、ここはインストールしておきましょう。あとで J-Link 化するにしても。

インストールが終わると、ドライブルートに ST ディレクトリが作られ、その下に CMake やら Ninja やら GNU-tools-for-STM32 やらがインストールされています。Clang が使いたければ自分でビルドしたほうがいいのかしら…と、また脱線しちゃだめ。

次に STM32 VS Code Extension ですが、すでにいくつか拡張を組み込んでいてコンフリクトなど起こしても面倒なので、拡張機能を一旦まっさらにします。

%USERPROFILE%/.vscode/extensions を extetensions.bak などの名前に変更します。そして VSCode を起動したら、マーケットプレイスから STM32 Extension をインストールします。

インストールが終わったら、CubeMX でプロジェクトの雛形を生成します。

中央の New Project の列で、ACCESS TO BOARD SELECTOR をクリックし、評価ボード名の NUCLEO-L476RG を検索します。


選択したら右上の Start Project で設定を開始します。

ピンコンフィグは、USART_TX/RX と B1 、LD2  をデフォルトのままで、PH0-OSC_INと PH0-OSC_OUT を Reset State にします。

せっかく RTC 用に 32.768kHz の水晶振動子が搭載されているので、RTC ペリフェラルをアクティベートします。


次にクロックコンフィグで、左上のセレクタで LSE を選択します。


最後に Project Manager で、Toolchain / IDE のところを CMake にし、プロジェクト名とロケーションを設定してから右上の GENERATE CODE をクリックします。


そうしたら VSCode で、今作成したプロジェクトのディレクトリをインポートします。左側のチョウチョみたいなアイコンをクリックして、

Import CMake projectを選択します。


プロジェクトを開けました。

main.c は空っぽのままですが一応コード生成はできるので、いきなりデバッガを起動してみます。


GDBサーバが終了しちゃったので TERMINAL タブの出力を確認してください、というので見てみると、

Error in initializing ST-LINK device.
Reason: ST-LINK firmware upgrade required. Please upgrade the ST-LINK firmware using the upgrade tool.

などと出力されていました。早速 ST-Link のアップデートのページでファームウェアをダウンロードしてアップデートします。ダウンロードした zip ファイルを展開すると、Windows フォルダに ST-LinkUpgrade.exe ファイルがあるので、これを実行します。


Device Connect ボタンを押すとバージョン情報が表示されるので、Yesボタンをクリック。ファームウェアのアップグレードができました。

さてそれではデバッグしてみましょう。

F5 キーを押すとビルドしてデバッガが動き、main() の最初のステップで停止します。


あとはもう、通常のデバッガ動作です。Continue、Step Over、Step Into、Step Out、Restart、Stop。左ペインにはVariableとWatchウィンドウがあります。

おお、これで VS Code でデバッグできますね。

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 でいいかな、と思い始めてしまったので、とりあえず一旦はここまでとします。

Ubuntu on WSL2にSegger Enbedded Studioをインストールする。その2

 その1でインストールまではできたものの、出てきたウィンドウがのっぺらぼうになってしまったので、その続きです。

エラーメッセージの最後のところに、"MESA: error: Failed to attach to x11 shm" とありまして、そういえば Qt で SHM(共有メモリ)関係のなにかがあったなぁ、と思ったところ、まさに Segger のナレッジベースにありました。

Using Embedded Studio remotely via X11 on a docker image not working

これは docker イメージで動作させるときのお話ですが、MIT-SHM X11 extensionがdisableされていることを確認してください、とのこと。環境変数 QT_X11_NO_MITSHM=1 を設定することでQtはこの拡張を使わなくなります、ということでやってみました。

$ export QT_X11_NO_MITSHM=1
$ /opt/SEGGER/segger_embedded_studio_8.22a/bin/emStudio&
[1] 1127
$


ちゃんとできましたね。

ライセンスですが、Nordicのチップでの開発であれば、Nordic用のライセンスが利用できます。1年間無償です。たぶん1年経ったらまた登録し直せばいいのかな。

ライセンスの登録は左下にある Obtain a License をクリックします。

…と、なにも反応がありません。コンソールを見てみると、

$ /usr/bin/xdg-open: 882: x-www-browser: not found
/usr/bin/xdg-open: 882: firefox: not found
/usr/bin/xdg-open: 882: iceweasel: not found
/usr/bin/xdg-open: 882: seamonkey: not found
/usr/bin/xdg-open: 882: mozilla: not found
/usr/bin/xdg-open: 882: epiphany: not found
/usr/bin/xdg-open: 882: konqueror: not found
/usr/bin/xdg-open: 882: chromium: not found
/usr/bin/xdg-open: 882: chromium-browser: not found
/usr/bin/xdg-open: 882: google-chrome: not found
/usr/bin/xdg-open: 882: www-browser: not found
/usr/bin/xdg-open: 882: links2: not found
/usr/bin/xdg-open: 882: elinks: not found
/usr/bin/xdg-open: 882: links: not found
/usr/bin/xdg-open: 882: lynx: not found
/usr/bin/xdg-open: 882: w3m: not found

おおぅ、ブラウザがないから困っているようです。

実はライセンスは別途Windows側で申請してもOKです。MACアドレス縛り(かつNordicチップ開発用)のライセンスなので、OKなんですが……。https://license.segger.com/Nordic.cgi に飛んで、必要事項を記入します。

MACアドレスを入力するようになっているけど、Ubuntuのほうで ip link  (ifconfig はdeprecatedとなり、今は iproute2 の時代です)で表示されるものではなく、Windowsのほうで ipconfig /all で表示されたものを入力してみます。名前とメールアドレスを入れて申請。すぐにメールでアクティベーションキーが送られてきます。

起動画面の Accept をクリックすると Segger Embedded Studio が起動しますので、Tools →License Manager で Activate Segger Embedded Studio をクリック。

届いたメールにある License_SES_... で始まる段落を丸ごとコピーして貼り付け、そのダイアログにある Install License のボタンをクリックすれば…だめですね。MACアドレスが違うと怒られました。

Ubuntu側のMACアドレスで再申請して入れてみたんですが、アクティベートされないようです。うーん。なんかあるのかな。またまた座礁です。やっぱりWindows環境でやるしかないのだろうか。

ちなみにですが、nRF52840 DKの箱には、nordicsemi.com/start52840dkと印刷してあって、ここから始めましょうな感じです。早速アクセスしてみると、別のリンクにリダイレクトされて、"Download and install nRF Connect for Desktop" というステップが案内されます。これもWindows版とLinux版があるので、インストールしてみましょう。ツールのなかでもしかしたら一番使うのはProgrammerかもしれません。Software Deviceを焼いたり、Eraseしたりができます。FOTAとかDFUで失敗したらEraseしてやり直せるのはありがたいです。

余談ですが、Gimp を起動すると

(gimp:884): Gtk-WARNING **: 12:08:13.595: Unable to locate theme engine in module_path: "pixmap",

という警告がたくさん出ます。これは pixmap エンジンがないということなので、

$ sudo apt-get install gtk2-engines-pixbuf

してやれば消えます。

Ubuntu on WSL2にSegger Enbedded Studioをインストールする。その1

本日の主題です。 ようやっとここまで来た感じですが。

まずはUSB デバイスを接続するに従って、WSL上のLinuxからUSBデバイスにアクセスするためのドライバを入れておきます。現在のバージョンは5.0.0のようです。

nRF82540 DKで遊ぶために、Segger Embedded Studioを利用させてもらいます。

まず、SEGGERのダウンロードページからLinux版をダウンロードして、Ubuntuからアクセスできる場所に置きます。Windowsのダウンロードフォルダは /mnt/c/Users/<username>/Downloadsとしてアクセスできるので、そのままでも大丈夫です。現在のバージョンは8.22aですね。


そうしたら、Ubuntuで展開します。

$ tar zxvf Setup_EmbeddedStudio_v822a_Linux_x86_64.tar.gz

INSTALL.txt と install_segger_embedded_studio というファイルができますので、まずはINSTALL.txtを読みます。

Run "./install_segger_embedded_studio" as root user and follow the installation instructions.

sudoで実行してね、ということですね。今回、Ubuntu はまだ RDP接続とかしてないのでこのあとでX関係のライブラリなどのインストールをする必要があるんですが、どっちを先にしようか。Xかな。 とりあえずお約束でxeyesを動かせるところまではやっておきますか。

まず、管理者モードでPowerShellを起動して、 wsl --update を実行しておきます。

PS C:\Users\kats> wsl --update
更新プログラムを確認しています。
Linux 用 Windows サブシステムをバージョンに更新しています: 2.4.13。

いちおうまだカーネルは 5.15 でした。

次に apt で x11-utils をインストールします。

$ sudo apt install x11-utils
[sudo] password for kats:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
libice6 libsm6 libxaw7 libxcb-shape0 libxft2 libxkbfile1 libxmu6 libxpm4 libxt6t64 libxv1 libxxf86dga1
Suggested packages:
mesa-utils
Recommended packages:
luit
The following NEW packages will be installed:
libice6 libsm6 libxaw7 libxcb-shape0 libxft2 libxkbfile1 libxmu6 libxpm4 libxt6t64 libxv1 libxxf86dga1 x11-utils
0 upgraded, 12 newly installed, 0 to remove and 0 not upgraded.
Need to get 831 kB of archives.
After this operation, 2437 kB of additional disk space will be used.
Do you want to continue? [Y/n]

x11-appsも。

$ sudo apt install x11-apps
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
libxcb-damage0 xbitmaps
Suggested packages:
mesa-utils
The following NEW packages will be installed:
libxcb-damage0 x11-apps xbitmaps
0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 737 kB of archives.
After this operation, 2770 kB of additional disk space will be used.
Do you want to continue? [Y/n]

でもって、

$ xeyes&

などとすると、


できました。これでコマンドラインからGUIアプリを起動できる準備ができたので、SESのインストールへと進みます。

$ sudo ./install_segger_embedded_studio

すると、


インストールダイアログがでてきました。Nextを押して…。


もう一回Nextを押して…


/optの下だからそのままでいいか。またNextを押します。


MDK-ARMが  Clang/llvm に移行してるんですが、こちらはGCCのままなんですよね。はいはい、Next。


Installボタンを押します。


Finishを押してインストールは完了です。インストールディレクトリを見てみると、

$ ls /opt/SEGGER/segger_embedded_studio_8.22a/bin
99-jlink.rules cpphtml libQt3Support.so.4 mv
CVSInterface.so_x64 crashreporter libQtCore.so.4 pkg
FileIcon.png crc32sum libQtGui.so.4 ptycom
GITInterface.so_x64 emBuild libQtNetwork.so.4 rm
HGInterface.so_x64 emLicense libQtSql.so.4 scproviders.xml
IConf.xml emScript libQtSvg.so.4 segger-LTO.so
JLinkGUIServerExe emSim libQtWebKit.so.4 segger-as
STLport.xml emStudio libQtXml.so.4 segger-cc
SVNInterface.so_x64 embed libSTLinkUSBDriver.so segger-ld
StudioIcon.png en_us.aff libc++.xml studio.xml
addstacksizes en_us.dic libcapstone.so styles.xml
cc environment.xml libjlinkarm.so svd2mm
cc++ gcc_build_options.xml libstdc++.xml symbols.sym
cc++-segger gcc_warning_options.xml libunicorn.so themes
cc-segger importCMakeGeneratedNinja.so_x64 ltollvm tools.xml
chmod importEclipse.so_x64 manifest.xml uc
codecs importGPDSC.so_x64 mkdir uninstall
color-schemes.xml importIAR.so_x64 mkld version.txt
cp importKeil.so_x64 mkpkg xmlcp
cpltodbg keyboard.xml mkresolution

emStudioというのがありますね。これがそうかな?

$ /opt/SEGGER/segger_embedded_studio_8.22a/bin/emStudio
/opt/SEGGER/segger_embedded_studio_8.22a/bin/emStudio: error while loading shared libraries: libusb-1.0.so.0: cannot open shared object file: No such file or directory

libusb-1.0.so.0がない、と言われました。ないのかな、と思って locate libusb したら、locate もないようです。

$ sudo apt install locate
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
locate
0 upgraded, 1 newly installed, 0 to remove and 230 not upgraded.
Need to get 50.3 kB of archives.
After this operation, 177 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu noble/universe amd64 locate amd64 4.9.0-5build1 [50.3 kB]
Fetched 50.3 kB in 1s (53.5 kB/s)
Selecting previously unselected package locate.
(Reading database ... 40972 files and directories currently installed.)
Preparing to unpack .../locate_4.9.0-5build1_amd64.deb ...
Unpacking locate (4.9.0-5build1) ...
Setting up locate (4.9.0-5build1) ...
Processing triggers for man-db (2.12.0-4build2) ...
$ sudo updatedb

おっと、/mnt/c や /mnt/d なんかを検索対象外にしておかないとやばいことになります。設定は /etc/updatedb.conf を書いて、と。でも、なさそうです。ということでlibusbもインストール。

$ sudo apt install libusb-1.0-0
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
libusb-1.0-0
0 upgraded, 1 newly installed, 0 to remove and 230 not upgraded.
Need to get 54.0 kB of archives.
After this operation, 140 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu noble/main amd64 libusb-1.0-0 amd64 2:1.0.27-1 [54.0 kB]
Fetched 54.0 kB in 1s (47.0 kB/s)
Selecting previously unselected package libusb-1.0-0:amd64.
(Reading database ... 40985 files and directories currently installed.)
Preparing to unpack .../libusb-1.0-0_2%3a1.0.27-1_amd64.deb ...
Unpacking libusb-1.0-0:amd64 (2:1.0.27-1) ...
Setting up libusb-1.0-0:amd64 (2:1.0.27-1) ...
Processing triggers for libc-bin (2.39-0ubuntu8) ...

で、起動してみる。

$ /opt/SEGGER/segger_embedded_studio_8.22a/bin/emStudio



…のっぺらぼう…。フォントとかがないのかな。たぶん、ライセンス指定のダイアログなんだけど、ウィジェットも出てこない。

どうもSESはQtライブラリを使ってるみたいですが、うーん。これはWindow Managerとか入れて、RDPで接続すべき?

ちなみに、このあとでNautilusとかGimpとかのGUIアプリをインストールしてみました。

Gimpはちゃんと動くようですが、Nautilusのほうは、

$ nautilus
** Message: 21:21:26.725: Connecting to org.freedesktop.Tracker3.Miner.Files
libEGL warning: DRI3: Screen seems not DRI3 capable
libEGL warning: DRI3: Screen seems not DRI3 capable
MESA: error: ZINK: failed to choose pdev
libEGL warning: egl: failed to create dri2 screen

** (org.gnome.Nautilus:8401): WARNING **: 21:22:18.697: Unable to get contents of the bookmarks file: Error opening file /home/kats/.gtk-bookmarks: No such file or directory

** (org.gnome.Nautilus:8401): WARNING **: 21:22:18.698: Unable to get contents of the bookmarks file: Error opening file /home/kats/.gtk-bookmarks: No such file or directory
MESA: error: Failed to attach to x11 shm

となりました。MESAとlibEGL関係でしょうか。ちょっと座礁しました。

QNAPで更新できないアプリの削除。

 QNAPを新しくしたら、更新もアンインストールもできないアプリが表示されてうっとうしいので削除する方法を検索しました。


古いQNAPのOSバージョンは QTS 4.3.4.2814 build 20240618 で、バージョン4.3.4です。一方新しい方は QTS 5.2.4.3079 build 20250321 で、メジャーバージョンも違っています。ここらへんが原因なのか、更新をしようとしてもエラーになってしまい、削除もできず、という状況です。

検索してみたら、フォーラムにやり方が出ていました。

まず、sshログインします。幸い sudo があるので、sudo 権限のあるユーザでログインすればOKです。

次に削除したいパッケージ情報を /etc/config/qpkg.conf から探します。less で眺めてもいいし、grep -i でキーワード検索してもいいですが、たとえば

[kats@~]$ grep -i download /etc/config/qpkg.conf
Name = DownloadStation
Display_Name = Download Station
QPKG_File = DownloadStation.qpkg
Shell = /share/CACHEDEV1_DATA/.qpkg/DownloadStation/qpkg_ds.sh
Install_Path = /share/CACHEDEV1_DATA/.qpkg/DownloadStation
WebUI = /downloadstation/
[kats@~]$ 

みたいにします。 

そうしたら、ここの Install_Path に .uninstall.sh というスクリプトがあるので、それを sudo実行してやります。

[kats@~]$ sudo /share/CACHEDEV1_DATA/.qpkg/DownloadStation/.uninstall.sh 
Remove DownloadStation
[kats@~]$

 次に qpkg.conf から該当箇所を削除します。が、それをやるコマンドがあるようです。

[kats@~]$ sudo rmcfg DownloadStation -f /etc/config/qpkg.conf
[kats@~]$ grep -i download /etc/config/qpkg.conf
[kats@~]$ 
ということで削除できました。App Centerからも消えています。よかよか。
あ、一応名前がわかっていれば、
[kats@~]$ sudo $(getcfg DownloadStation Install_Path -f /etc/config/qpkg.conf)/.uninstall.sh
などということもできるようです。

そういえばWSLカーネルの6.6はいつになったら出るのだろう。

 …と思ってぐぐってみたら、githubのほうでは linux-msft-wsl-6.6.84.1 なんてのが4月4日にリリースされていたようです。

その直前の6.6.75.3では、

  • Release rolling-lts/wsl/6.6.36.3

なんてリリースノートがあるんだけど、なんかの間違いかな。2024年7月に6.6がリリースされたときの番号が6.6.36.3だったので、コピペミス?

いずれにしても wsl --update で降りてこないので、やりたければ自分でビルドして入れ替えろってことかしら。


NASがおかしくなったので買い替えた。

 買い替えた、というか、新規に購入して中身を移し替えた話。

長年お世話になってきた TS-669L が調子悪くなっちゃって、どうにもおかしいから TS-664 に買い替えたというお話。

669Lってそもそもいつ買ったんだっけ、とメールをひっくり返してみたら、2013年6月1日にAmazonで購入してました。HDD レスで 68,845円。たしか他のが HDD レスでも10万以上してたのにこれだけ安かったんですわ。最初は 4TBx6 とかやってて、現在は 16TBx6 まで拡張してました。1台ずつ取り替えていくので、容量拡張は時間かかりましたね。ちなみに 16TB は東芝の MG08ACA16TE です。

TS-669Lの症状は、GbEの速度が300Mbps程度まで落ちてしまい、ログを見るとパケットエラーが大量に記録されていました。ケーブルとかはいじってないので、PHYが壊れた?
ともあれ、TCPだからなんとか使えてるけど実効速度が落ちて使い物にならないのと、やっぱりファイルが壊れるとやなので買い替えることにしたのです。ちなみに約13万円。

TS-669L が QTS なのに対して、TS-664 のOSはQTS/QuTS heroの2種類。QTS が ext4fs なのに対して QuTS hero は zfs と互換性がないため、万が一 QuTS hero だったらまずいので、QTS のイメージをあらかじめダウンロードして準備しておきます。

まずは起動してみようかと、KVMスイッチのHDMIとUSBを繋いで、なにもドライブを付けずに電源をいれると、「ドライブつけてちょ」(意訳)というメッセージが出ます。しかたないので以前にドライブ交換で外してあった12TBを2つばかりセットして起動すると、初期設定画面が出ました。

いちおうストレージ設定をJBODにして動作確認とかして、QTSであることが確認できたので、一旦電源を落とし、TS-669Lからドライブを抜き出して番号順に入れていきます。あとでテプラで番号貼らなきゃ。

TS-664を再起動するとしばらくカリカリやってましたが、そのうちビープ音がしてアクセスできるようになりました。

App Centerを見ると、更新が必要なアプリ(Malware RemoverとかLicense Centerとか)の更新が必要と出るんですが、更新しようとしても「デジタル署名がありません」とのエラーで更新できません。これはそのうち調べよう。

LANが 2.5GbEなので、そのうち10GハブとかPCにも10Gカードとか用意すればさらに速度が上がる予定。メインPCは Asrock Z690 Extreme WiFi 6Eなので2.5GbEポートがあるため、まずはスイッチングハブかな。

Ubuntu on WSL2を好きなディレクトリにインストールする。

 ARM の、というよりも Nordic の Bluetooth モジュール nRF52832 の開発環境を作りたくて、Segger Embedded Studioをインストールしようと思い立ちました。手元には PCA10056 nRF52840 DK がありまして、SES は登録すれば無料で使えます。PCA10056 には同じく Nordic の nRF5340 が載ってまして、こちらが J-Link デバッガ/プログラマとして動作します。nRF5340 は Cortex-M33 DualCore のかなり贅沢なチップです。中身はアプリケーション用として 128MHz M33 + 512KB RAM + 1MB Flash、ネットワーク用として 64MHz M33 + 64KB RAM + 256KB Flash。対する nRF52840 は 64MHz M4 + 256KB RAM + 1MB Flash のシングルコア。うーむ。

それはさておき、実は母艦というかメイン PC のほうが起動に2分近くかかるようになったので Windows 11をクリーンインストールしたばかりということもあり、環境を汚さずにコンテナみたいな形で実行できないかな、と考えまして。

ひとつは docker イメージを使ってやるもの、もう一つは WSL 上の Ubuntu などにインストールして WSLg でアプリを動かすもの。

dockerイメージの方は dockerhub で segger で検索するといくつか出てきますが、まずは WSL でやってみようかと。docker よくわからんし。

と枕はそのくらいにして、Ubuntuのインストールですが、Microsoft Store には Ubuntu がいくつかあります。その中で、LTS な 24.04 を使ってみることにしました。apt とかよくわからんけど。ここで素直に wsl --install Ubuntu-24.04 とかすると、*どこかのディレクトリ* に自動的にインストールしてくれます。でも、あとで消しちゃうかもしれないし、できれば自分で指定したディレクトリにインストールしたい。ということで調べながらやってみました。

まず、Manual installation steps for older versions of WSL の Step 6 - Install your Linux distribution of choice から…と思ったらそこには 24.04 はないですね。なので公式からダウンロードします。Download Ubuntu on WSL をクリックするとダウンロードが始まります。

Ubuntu2404-240425.AppxBundle というファイルがダウンロードできたら、7zipで展開します。

このなかで、*_scale_*というのはアイコンイメージが入っているので、使いたければあとで展開してショートカット用のアイコンとして使用できます。ARM64用のイメージもありますね。ここでは Ubuntu_2404.0.5.0_x64.appx というファイルをさらに 7zip で展開します。するとこんな感じになります。


この中で必要なのは下にある2つ、ubuntu2404.exe と install.tar.gz です。これを好きなディレクトリにコピーして、そこで ubuntu2404.exe を実行すると、install.tar.gz を自分で展開して ext4.vhdx を作成してインストールは完了です。新しいユーザを作成して、というメッセージが出るので、ユーザを作っておしまいです。

このあとはUSB を WSLから使えるようにして、Linux 用の Segger Embedded Studio をインストールして、ライセンス登録すればOKという流れになります。

LIXILのシャワートイレの電源ランプ。

年明け早々あれですが。

昨年末から、うちのLIXILのシャワートイレの電源ランプが、チカチカと鬱陶しい点滅を始めました。型番はDV-E116Hで2015年製。LIXILの取説では点検サービスを受けてくださいと書いてあり、この電源ランプの点滅をやめさせる方法はありません。ちなみに出張サービスと点検で約1万円。修理ならともかく、ランプチカチカを解除するために1万はないでしょうということで、ネットで調べてみるといわゆるLIXIL10年タイマーのようです。壁リモコンのシャワーとビデを同時押しで20秒とかありましたが、いずれも不発。解除できません。

ジャンパー線をカット、という情報もあったので、ものは試しと開けてみました。

両サイドのネジ穴の穴隠し(グロメットとか穴埋めキャップとか)を外し、計4か所のネジを外せばカバーが外れます。

向かって左側は脱臭装置の横。

右側はこんな感じ。


すると便座を含めた上部分がごそっと外れます。あ、作業時は電源コンセントを外すのをお忘れなく。

上部を外すと、基板やら配水チューブやらがあります。ケーブルも何本もあるので、引きちぎらぬよう。写真を撮り忘れましたが、基板を固定しているネジを取り外す必要があります。ケーブルがごちゃごちゃしているのでネジを落とさないように気をつけつつ外すとこんな感じ。

サービスマンが簡単に見つけられるように、だと思いますがニッパでカットできる抵抗ジャンパが1つだけありました。その他のものは防水のためと思いますが樹脂でしっかりカバーされており、面実装抵抗やICチップなどなど。アキシャルタイプの抵抗はこれ1つだけそびえ立っていました。ので、迷うこともなくニッパでカット。

ついでにシャワー装置周りの汚れを歯ブラシなどで落としてから組み付けて、電源ONで作業終了。電源ランプの点滅は止まりました。

Linux 6.6キタワァ。

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