Ubuntu 24.04のLive USBを使ってArduino IDEの検証

概要

昔にUSB SSDにUbuntuを入れて検証環境を作ってみましたが、実際のところあまり利用していません。そこでUbuntuのインストールディスクを使ったLive USBで毎回まっさらな状態からの検証ができるかを確認してみました。

また、今回はWCH社のCH32V103のArduino IDE開発をテストしています。

事前準備

インストール用isoダウンロード

Ubuntuを入手する | Ubuntu
Ubuntuは、スマートフォン、タブレット端末、PCからサーバー、クラウドまであらゆる環境で動作するオープンソースのソフトウェアプラットフォームです。

Ubuntu Desktop 24.04 LTSを今回は使ってみようと思います。

USB作成ツール

Just a moment...

Raspberry Pi Imagerを使います。たぶんこのツールが一番導入がしやすくて安定している気がします。

USBメディア作成

Raspberry Piデバイスは未選択の状態で、OSをUse customにすると自分でisoファイルを指定できます。

その後USBメモリやUSB SSDを選択します。使ってみた限りSSDのほうが起動は早いですが、起動してしまえばメディアアクセスはほぼ無いので頻繁に利用しない場合にはUSBメモリでも十分な気もします。

ちなみにRaspberry Pi ImagerのEraseコマンドは非常に便利で、USBメモリやSDカード、HDDなどほぼすべてのメディアのパーテションなどをすべて壊してフォーマットしてくれます。特にブート可能なメディアを作成した場合には通常のフォーマットなどでは元に戻すのが大変ですのでRaspberry Pi ImagerのEraseで初期状態に戻すのがおすすめです。

起動

USBメディアをいれてパソコンを起動させます。ただUSBメディアを起動させるのは結構たいへんでF12とかを連打するとメディアを選択できるマシンやF1やF2連打でBIOS画面などから起動順を指定する必要があります。

Windowsが立ち上がる場合

マシンのメーカー名+ブートメニューかBISOなどで検索をして、起動メディアの選択方法を探します。

Secure Boot Violationが表示される場合

おめでとうございます。比較的新しいマシンの場合にはこの画面がでます。この画面がでるのはWindows(Microsoft)以外のSecure BootがBIOSで許可されていない状態です。

Secure Bootをオフにするのではなく、「Allow Microsoft 3rd Party UEFI CA」などの設定を探します。ちなみにSecure Boot系の設定を変更するとWindowsのログインなどで利用しているWindows Helloなどの認証データが飛びます。指紋やカメラでのログインができなくなって、登録している指紋などを削除して再登録をしないといけなくなるので気をつけましょう。

起動後の操作

この画面がでれば正常にUbuntuのセットアップディスクが起動しています。Try or Install Ubuntuを選択します。メモリを増設したときなどは一番下のTest memoryを使うと不良品が入っていないか確認可能です。

ちなみに仮想環境上でも実験していますが、こんな感じでエラーがでますが動いていました。

しばらくすると上記の画面が開きます。下に方にある日本語を選択します。

ここはそのままNextを選択。

ここが重要で日本語キーボードを選択します。英語キーボードの人は最初の画面から閉じても実は大丈夫なんですが、日本語キーボードの人はここまで進んだほうがわかりやすいです。

Wi-Fiか有線でインターネットに接続してあげます。

ここが重要で、インストールを選ぶとハードディスクの中身がすべて消えてしまうので、「Ubuntuを試してみる」を選びます。これでLive USBとして利用可能です。この状態はUSBの中身はRAMディスクにコピーされており、設定を変更しても再起動すればすべて元に戻る状態になります。

Arduino IDEのセットアップ

Linux用のArduino IDEはAppImageとZIPの2種類ありますが、AppImageはlibfuse-devなどを追加でいれる必要があるので、今回はZIP版を利用したいと思います。

cd Downloads/
wget https://downloads.arduino.cc/arduino-ide/arduino-ide_2.3.2_Linux_64bit.zip
unzip arduino-ide_2.3.2_Linux_64bit.zip
cd arduino-ide_2.3.2_Linux_64bit

上記でダウンロードして展開しています。バージョンは2.3.2のURLなので最新版に変更するか、ブラウザ経由でダウンロードするのがよいと思います。

./arduino-ide --no-sandbox

そのまま起動するとsandboxのエラーがでるので、–no-sandboxをつけて起動します。「sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0」というsandboxを無効化する素敵コマンドもありますが個別指定したほうが好ましいはずです。

Arduino IDEの設定

https://raw.githubusercontent.com/ch32-riscv-ug/arduino_core_ch32_riscv_noneos/main/package_ch32-riscv-noneos.json

ボードマネージャーは上記のURLですので追加をして、CH32のボードをArduino IDEに追加します。

rootでのスクリプト実行

/home/ubuntu/.arduino15/packages/ch32-riscv-noneos/tools/1.91/beforeinstall/start.sh

上記を実行します。本当はpost_install.shに名前を変えておくとArduino IDEが自動で呼び出してくれますが、デフォルトのままのファイル名でパッケージしてしまいました。後日修正したいと思います。。。

#! /bin/bash
echo  -e "\nCopy Libs"
sudo cp -P ./lib*    /usr/lib
echo  -e "Register new Libs"
sudo ldconfig
echo "copy rules"
sudo cp ./50-wch.rules /etc/udev/rules.d
sudo cp ./60-openocd.rules  /etc/udev/rules.d
echo "Reload rules"
sudo udevadm control  --reload-rules
echo -e "DONE"

結構重要なことをしていたので、中身の解説をしたいと思います。まずsoファイルを/usr/libにコピーしています。結構怖い感じですね。。。その後ldconfigで更新をしてから/etc/udev/rules.dにファイルをコピーしています。

SUBSYSTEM=="usb", ATTR{idVendor}="1a86", ATTR{idProduct}=="8010", GROUP="plugdev"
SUBSYSTEM=="usb", ATTR{idVendor}="4348", ATTR{idProduct}=="55e0", GROUP="plugdev"
SUBSYSTEM=="usb", ATTR{idVendor}="1a86", ATTR{idProduct}=="8012", GROUP="plugdev"

50-wch.rulesが上記のようなファイルです。これはUSBを接続した場合にVIDとPIDを指定して権限をしていしています。この場合にはplugdevグループに属しているユーザーになります。

SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", MODE:="0666"

ArduinoCore-renesasのファイルを見てみるとVIDがArduinoの場合、666のパーミッションをつけています。昔はdialoutグループを使っていたみたいですが、最近はplugdevなのかな?

sudo gpasswd -a $USER plugdev

ちなみにLive USBのUbuntuユーザーはplugdevグループに属しているので特に設定が必要ないのですが、通常インストールをした場合にはログインしているユーザーに上記でplugdevグループ権限を追加してから、ログアウトしてログインしなおすことで権限が反映されます。

「lsusb」や「id」コマンドを利用して、現在の状況などを確認しながら動かしてみてください。とくにデフォルトのグループ設定はセットアップ途中に作ったユーザーにはplugdevに所属しており、コマンドなどから追加したユーザーで違うので注意が必要です。

Arduino IDEで実行

先程の/etc/udev/rules.dにファイルを追加して「udevadm control –reload-rules」で反映したあとにUSBを接続することで適切なパーミッションの/dev/ttyACM0が現れるはずです。

シリアルを選択して、シリアルモニタを開き、速度を115200にしてからプログラムの転送をしてプログラムが動くのを確認してみてください。

シリアルに接続できない場合

Ubuntu 22.04のときはbrlttyにシリアルを奪われることがあり、無効化する必要がありましたが、24.04のLive USBモードでは大丈夫でした。

基本的にはパーミッションが適切でない場合にエラーになります。/dev/ttyACM0のグループとパーミッションを確認してみてください。「sudo chmod 666 /dev/ttyACM0」で毎回設定が必要ですが無理やり利用するのも手だと思います。

転送時にsoファイルがないとエラーがでる

/home/ubuntu/.arduino15/packages/ch32-riscv-noneos/tools/1.91/beforeinstall/start.sh

上記のスクリプトなどを実行していない場合だと思います。その他使っているボードの中にLinuxの場合には手動で呼び出さないといけないスクリプトが入っている可能性があります。

転送時にハングアップ

VirtualBoxで試したところopenocd接続時にハングアップしてしまいました。

USB 2.0からUSB 3.0に変更してみたところ動きました。VirtualBoxは結構バージョンによって動きがことなるので気をつけてください。まだVirtualBox 7.0.18だとUbuntu 24.04を安定して動かすのは難しいかもしれません。

転送が遅い

仮想環境の場合転送に非常に時間がかかります。諦めましょう。

仮想環境上で試す場合

基本的にLive USBで動かす場合にはメモリを多めに設定してください。そしてエージェントのインストールなどを行っての再起動ができないのでクリップボード共有などは使えないと思ってください。

クリップボード共有などを利用したい場合にはクリーンインストールした状態でスナップショットを保存して使い回す運用の方がLive USBでの利用より適していると思います。

VirtualBoxの場合

ディスクの設定をしますが、Live USBで動かす場合にはセットアップしないのでディスク容量を取りません。とはいえisoファイルが結構大きいので注意しましょう。

メモリは2GBだとちょっと少ないのでもう少し増やしましょう。Live USBの場合にはRAMディスク上にファイルを置くのでメモリ割り当てが少ないと書き込みできる容量が少なくなってボードマネージャーなどのダウンロード中に容量不足になります。

CPUはそれほど使わないのですが8個とか割り当てたら動きがおかしくなったので、2個か4個ぐらいで問題ないと思います。

USBは2.0だと転送に失敗したので3.0にする必要があるかもしれません。ただESP32などのようにopenocdを利用せずに、シリアル経由で転送する場合には2.0のままでも大丈夫だと思います。

VMware Workstaion Pro

個人での利用が無償になったので試してみました。VirtualBoxと同じくメモリを少し多めにして動かせばあとはopenocdを利用した転送などもうまく動きました。

ただ私の環境ではVirtualBoxの方がサクサク動いたのでVMware Workstaion Proは使わないかもしれません。。。

Hyper-V

USBの共有が面倒なのでおすすめしません。とくにLive USBだとエージェントのインストールが大変なので向いていません。初期セットアップ済みのをスナップショット保存する運用で、WSLでもUSB共有を設定済みの場合にはHyper-Vでもよいのかもしれません。

まとめ

USBまわりのパーミッションなどはどんどん変化していくのでたまに情報をアップデートしないとですね。現在はとりあえず許可されていないUSBデバイスはすべて接続拒否するような動きになっているようです。

コメント