Ubuntu on WSLにSegger Enbedded Studioをインストールする。

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

まずは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で作業終了。電源ランプの点滅は止まりました。

Vimの補完プラグインをインストール。その4

Vimの補完プラグインをインストール。その3で、ddc-tabnineが使えそうです、などと書いたのですが、早速やってみました。

まず、tabnineのバイナリを用意しないといけません。がどうにもTabNineのサイトがわかりにくいので、tabnine-nvimにあるダウンロードスクリプトを利用させてもらいます。
(あるいはこちらのdl-binaries.shを単独でダウンロードして実行しても良いかもしれません)

すると最新バージョンのtabnineがbinaries/4.194.0/x86_64-unknown-linux-musl以下に展開されます。

ddc-tabnineでもダウンロードの仕組みはあるのですが、ちゃんと動かないようです。また、あまりメンテもされていないっぽいです。が、ddcプラグイン自体は動きます。

ちなみzipファイルを展開して出てきたTabNineを実行すると、.config/TabNineというディレクトリが作成されて設定などはここに入るようです。

次にddc-tabnineをdein.vimでインストールします。

call dein#add('LumaKernel/ddc-tabnine')  

でもって、そのページにある設定もvimrcにコピーしておきます。

call ddc#custom#patch_global('sources', ['tabnine'])
call ddc#custom#patch_global('sourceOptions', {
    \ 'tabnine': {
    \   'mark': 'TN',
    \   'maxCandidates': 5,
    \   'isVolatile': v:true,
    \ }})

ここで注意。sourceOptionsのmaxCandidatesは、2022年2月22日にmaxItemsに変更されています。

2022.02.22
* Rename maxCandidates to maxItems.
* Rename ddc#map#insert_candidate() to ddc#map#insert_item().
* Deprecate gatherCandidates attribute.

ですので、そのように修正。

また、sourcesにtabnineを追加します。正直、aroundはいらないかなとも思いますが。

call ddc#custom#patch_global('sources', ['vim-lsp', 'tabnine', 'around'])

ここでVimを終了して再起動すると、TabNineが見つからないとかのエラーが出ます。なので、先程ダウンロードしたbinariesディレクトリをそのまま ~/.cache/ddc-tabnine/以下に移動します。

たぶんここまでくれば動くと思いますが、動かない場合(TabNineがまだ見つからないとか)は、

call ddc#custom#patch_global('sourceParams', {
            \ 'tabnine': {
            \   'maxNumResults': 10,
            \   'storageDir': expand('~/.cache/ddc-tabnine/binaries'),
            \ }})

が必要かもしれません。これはddc-tabnine.txtに書いてあります。

 ということでソースを編集してみると、


ちゃんとTabNineが動いているようです。右のほうに "TN" とありますし。

めでたしめでたし、なんですが、あとはRuffでのisortとか試さないと。

Ubuntu on WSLにSegger Enbedded Studioをインストールする。

本日の主題です。 ようやっとここまで来た感じですが。 まずは USB デバイスを接続する に従って、WSL上のLinuxからUSBデバイスにアクセスするためのドライバを入れておきます。現在のバージョンは5.0.0のようです。 nRF82540 DKで遊ぶために、Segger Em...