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です。https://license.segger.com/Nordic.cgi に飛んで、必要事項を記入すれば OK。

MACアドレスを入力するようになっているけど、Ubuntuのほうで ip link で表示されるものではなく、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という流れになります。

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

 その1でインストールまではできたものの、出てきたウィンドウがのっぺらぼうになってしまったので、その続きです。 エラーメッセージの最後のところに、"MESA: error: Failed to attach to x11 shm" とありまして、そういえば Q...