GitHubのページ
出典: GitHub

USBシリアルから操作する小型OS

KoaOSは、ESP32-S3を搭載したHeltec WiFi LoRa 32 V4向けの小型OSです。画面やキーボードを使わず、USBポートにつないだ端末からシェルを操作します。ログイン後はファイル操作やテキスト編集のほか、GPS、天気、LoRa APRSなどの機能を利用できます。

このOSはLinuxではなく、Arduino C++で作られたファームウェア上で動作します。ファームウェアがシェルやファイルシステム、Wi-Fi、GPS、LoRaなどを提供し、利用者はUSBシリアル端末からコマンドを入力します。

画面表示は本体のOLEDに対応しますが、入力はUSBシリアル経由です。組み込みの編集機能やプロセス管理、簡単なシェルスクリプトも備え、単体の端末として操作できます。

V4のPSRAMをアプリ実行に利用

KoaOSの対応機種はHeltec WiFi LoRa 32 V4に限られます。ESP32-S3搭載でも、V3などPSRAMを備えないボードは対象外です。起動時にはPSRAMを使える設定が必要です。PSRAMはチップに外付けするメモリーで、ESP32-S3の内部RAMが数百キロバイト程度にとどまる用途を補います。

ESP-IDFでは、初期化した外部RAMをメモリー領域として利用したり、メモリー確保機構に加えたりできます。利用方法は設定によって異なり、アプリケーション側で外部RAMを管理する方式もあります。

外部RAMには制約もあります。フラッシュのキャッシュが無効になる書き込み時などはPSRAMにアクセスできず、DMA用の領域やタスクスタックにも制限があります。KoaOSではアプリごとに約1MBのPSRAMを使い、WebAssemblyの実行領域として利用します。

Cで作ったアプリを後から追加

KoaOSのアプリはCで作成し、WebAssemblyにコンパイルして「.esp」パッケージにまとめます。ここでのWebAssemblyは、OS内のインタープリターでアプリを実行する形式です。ファームウェアを書き換えず、同じWi-Fi上のパソコンやスマートフォンからアプリをネットワーク経由でインストール・削除できます。

アプリは必要な機能をマニフェストに宣言し、実行時にその資源を取得します。宣言していない機能へのアクセスはOSが拒否します。GPIOのピンや無線機能も資源管理の対象で、各アプリのファイル領域は個別に分けられています。

標準ファームウェアにはGPS、天気、APRS、テキストエディターなどが含まれます。追加アプリにはGPS情報を表示するもの、URLを取得するもの、MeshCoreのクライアントがあります。WebAssemblyアプリのファイルサイズは最大256KBで、計算負荷の高い処理は遅くなる場合があります。

利用時に知っておきたい制限

KoaOSは端末の物理的な保護を目的とする仕組みを有効にしていません。ログインの初期設定は「root / 1234」で、端末を手にした人はフラッシュを読み出せます。また、アプリ配布に使うHTTPS接続では証明書を検証せず、パッケージ内のハッシュも配布元の真正性を証明しません。

WebAssemblyアプリにはサンドボックスがありますが、シェルスクリプト型のアプリは保護の対象外です。Wi-Fiなどを宣言したアプリは、許可された機能を使ってデータを送信できます。KoaOSはネットワークサーバーを標準で起動せず、受信接続を受け付けるのは利用者が導入したアプリに限られます。

MeshCoreクライアントでは、チャンネルの広告やメッセージを無線経由で利用できますが、直接メッセージを送受信するとシステムがクラッシュする既知の不具合があります。また、GPIOや各種バスをアプリから使えますが、キーボード用ドライバーなどOSレベルのドライバーはまだありません。