• Arduinoに花束を

WindowsのWSLやChromebookのCrostiniなどが、Linuxアプリケーションを動かせるようにしている背景には、開発環境としてLinuxを取り込みたいという狙いがある。Linuxは開発環境として広く使われていて、標準的なPCのハードウェアはカバーしている。しかし、メーカー固有の機能などは汎用デバイスではないことがありデバイスドライバーが入手できないことがある。Linuxプリインストールマシンがあればいいのだが、いまのところLinuxプリインストールマシンを広く販売しようという大手ハードウェアメーカーは出てきそうにもない。

趣味の話ではあるが、筆者が会社勤めしていた頃、帰宅時に電車で必ず座れるのでHP-100LXにLSI-Cを入れてソフトを作っていたことがある。開発の最終段階で、実行しては書き直しのサイクルに入ったときなど、ソフトウェアへの集中を切らしたくないとき、モバイルコンピューティングは最適だと思う。WSLについては色々と情報もあるようなので、今回はChromebookのLinux環境(Crostini)は、開発環境として利用できるのかどうかを調べてみた。

普通のソフト開発なら開発環境をインストールして終わりだが、組み込み系の開発などでは、開発ボードなどを接続したクロス開発が必要なことがある。少なくとも、作ったバイナリをターゲットに転送するところまでは最低限できてほしい。

こうした用途には、USBシリアルが使われることが多い。ホスト側からみれば、単純なシリアルポートであり、ターゲット側も面倒な処理をすることなくデータを受けとれる。組み込み系SoCではUSBシリアル接続が簡単になっているものが多い。

一般に入手が可能なSoCボード(マイコンボード)には、Raspberry-PiやArduinoなどがあり、趣味でこれを使う人も少なくない。ここでは筆者の手元にあったソニー Spresenseというマイコンボード用の開発環境をChromebook上に構築してみた。SpresenseはARM Cortex-M4Fを6コア搭載したSoC、CXD5602を搭載し、サウンド処理デバイスやGPSも搭載している。処理性能的にはArduino UnoとRaspberry-Piの間ぐらいになる。

・Spresense について
https://developer.sony.com/develop/spresense/docs/introduction_ja.html

開発環境にはArduino IDEと独自のSpresense SDKがある。上記サイトには、Linuxで開発を行うときのドキュメントもあるのだが、対象がUbuntu 16.04 LTSとなっている。ChromebookのLinux環境は標準はDebian(ver.10 buster)なのでちょっと違う。なお、Arduinoに関しては本家サイトを参照いただきたい。

・Arduino
https://www.arduino.cc/

開発環境としてCrostiniを使う場合、いくつか事前にやっておく準備がある。1つは、Crostiniのローカルストレージのサイズを拡大しておくことだ。標準だと7ギガバイト程度しか割り当てられていないが、開発用にコンパイラなどをインストールするので、7ギガバイトでは足りなくなる。最低でも10ギガバイト程度には増やしておく。もちろん、どこまで増やすのかは、ハードウェア次第。変更は、「設定アプリ ⇒ 詳細設定 ⇒ デベロッパー ⇒ Linux開発環境 ⇒ ディスクサイズ」の変更ボタンで行う。

もう1つは、ダウンロードしたファイルなどにアクセスできるように、crostiniから「ダウンロード」フォルダーにアクセスできるようにしておく。開発では、インターネットからさまざまなファイルをダウンロードすることが多いが、認証ページなどが挟まると、ちゃんとしたブラウザが必要になる。Crostiniにブラウザをインストールしてもいいのだが、2つも3つもブラウザは必要ない。Chromebookの標準ブラウザを使うなら、Crostiniからすぐダウンロードファイルにアクセスできるようにしておくと効率がよい。

ChromeOSの「ファイル」アプリを使い、ウィンドウ左側の「ダウンロード」の上で右クリックしてメニューから「Linuxと共有」を選択する。これで、Linux側からは、「/mnt/chromeos/MyFiles/Downloads」でダウンロードフォルダーがアクセス可能になる。

まずはArduino IDEをインストールしてみる。Arduinoに関しては、以下のURLを参照されたい。なお、Arduino IDEをインストールする作業は、特にSpresenseに関係しているわけではなく、Arduinoや互換ボードでも同じやり方になる。

本家ArduinoのページではLinuxでのインストールは、GUIデスクトップやNautilsなどが前提の作業になっている。crostini自体にはデスクトップがないので、コマンドラインで作業を行う(リスト01)。

・リスト01


xz -d arduino-1.8.16-linux64.tar.xz # xzで伸張
tar xvf arduino-1.8.16-linux64.tar      # tarで展開。
cd arduino-1.8.16                   # tarコマンドで作られたディレクトリに移動
sudo ./install.sh                   # install.shを実行。sudoが必要
sudo usermod -a -G dialout $USER    # ユーザーをdialoutグループに追加

※arduino-1.8.16-linux64.tar.xzは、ダウンロードしたArduion IDEのファイル

次にSpresenseボードをChromebookにUSBで接続する。コネクタを刺すと、デバイスをLinux側に接続するかどうかを尋ねるトースト通知が表示されるので、ここで「Linuxに接続」をクリックして接続させる(写真01)。あるいは「設定アプリ ⇒ 詳細設定 ⇒ デベロッパー ⇒ Linux開発環境 ⇒ USBデバイスを管理する」を使うこともできるが、設定ページよりも、トーストのリンクを使うほうが簡単だ。

  • 写真01: Crostiniを有効にしているChromebookにUSBシリアルデバイスを接続すると、このようなトースト通知が表示される。左下の「Linuxに接続」をクリックすると設定ページを開くことなく、デバイスをCrostini側に接続できる

crostiniでは、USBシリアルが対応するデバイス/dev/ttyUSB0のデフォルトの所属グループがrootなので、これを以下のコマンドを使って“dialout”グループにしておく必要がある。これは一般ユーザー権限でのデバイス制御を可能にするためだ。前記のリストの最後でusermodしているのはそのためだ。それには、


sudo chgrp dialout /dev/ttyUSB0

とする。crostiniではUSBデバイスを抜き差しするたびに上記のコマンドを実行する必要がある。

Arduino IDEが起動したら、その中でSpresenseライブラリをインストールする(詳細はSpresenseサイトの解説を参照のこと)。ターゲットとしてSpresenseを選択し、ポートに前記の/dev/ttyUSB0を指定すれば、Arduino IDEでスケッチ(Arduinoのプログラム)の作成からSpresenseへの描き込みまで問題なく行える(写真02)。

  • 写真02: ChromebookでLinux版Arduino IDEを実行する。ToolsメニューにあるBoardやPortの設定を行えば、スケッチをUSB経由で転送可能になる

ただし、CrostiniではArduino IDEからSpresenseのブートローダー(ファームウェア)の描き込みができなかった。CrostiniからSpresenseにブートローダーの描き込みを行うには、Spresense SDKをインストールして、コマンドラインから行う必要があった。なお、前記の/dev/ttyUSB0のグループ設定を行えば、Spresense SDKのインストールや実行、実機への転送は問題なくCrostiniで行えた。

ChromebookのCrostiniは、Android Studioのインストール、実行が可能でADB(Android Debug Bridge)も利用できる。その他の開発環境でも、開発、評価ボードに多いUSBシリアル接続は問題なく動作する。ただ、CrostiniではLinux GUIアプリケーションの動作は、必ずしも万全というわけでもない。Arduino IDEのブートローダー描き込みのエラーメッセージを見たところ、フォント関連のエラーが出ており、ライセンス確認用のウィンドウ表示に失敗しているような感じで、USB接続などの問題ではなさそうだ。それから考えるとコマンドラインで完結するようなら、Crostiniは開発環境としては十分利用できそうだ。

WindowsのWSLもWindows 11でLinux GUIアプリには対応したが、USBデバイスの接続はこれからの課題という段階。この点では、Crostiniが一歩リードしている感じがある。