GitHubにて公開されたLEGO Mindstorms EV3のファームウェアのソースコードを読み解いた内容をまとめました。個人的に読み解いてまとめた内容ですので誤解や間違いも散見されると思いますが悪しからずお願いします。
- [GitHub] LEGO MINDSTORMS EV3 source code
- https://github.com/mindboards/ev3sources
(1) extraディレクトリにまとめられたコードは汎用的なモジュールです。一般的な組み込みLinuxシステムやLinuxボードに共通のコードがまとめられています。
(2) lms2012ディレクトリにまとめられたコードはMindstorms EV3固有のモジュールになっています。
(2-1) lms2012ディレクトリの下にあるlms2012ディレクトリのソースコードからビルドされる実行ファイル lms2012 がEV3のファームウェアのコアになっています。ドキュメントではVM(Virtual Machine)と記述されています。EV3の電源をONするとブートローダーからLinuxが起動され、lms2012 がプロセスとして常駐します。このlms2012がEV3固有の機能を統べています。ちなみにlms2012ではUIやI/Oを直接は実装せず、下記にあげるbytecodeやシェアード・ライブラリなどを介して実現しています。そういう意味でファームウェアの中心にあるソフトウェアモジュールです。
(2-2) lmssrcディレクトリの下にはEV3本体のメニューから実行されるアプリケーションのコードが集められています。これらのコードはEV3固有のDSL(アセンブリコード)で記述されています。アイコンデータやサウンドデータもVMでロード可能なバイナリフォーマットに変換されています。マクロアセンブラ風のDSLはJavaで記述されたアセンブラをつかい、VMがロードして実行可能なbytecode形式に変換する必要があります。EV3標準の開発環境(EV3ソフトウェア)で作成されたプログラムもPC側でこのbytecodeに変換した後に、EV3本体(インテリジェントブロック)にロードして実行するようです。
(2-3) openfirstディレクトリの下にはファームウェアのビルドなどに必要なシェルスクリプトがまとめられています。
(2-4) c_comなどc_で始まるディレクトリの下にはシェアード・ライブラリのコードがまとめられています。VM(プロセス)とOSの中間層でEV3固有のハードウェアのドライバーの役割を果たします。
(2-5) d_usbhostなどd_で始まるディレクトリの下にはカーネルモジュールのコードがまとめられています。OSの下層でEV3固有のハードウェアのドライバーの役割を果たします。
C言語やRubyなどでEV3のソフトウェアをハックする方法は2つ考えられそうです。1つ目はEV3のVM(Virtual Machine)がロード可能なbytecodeをPCで生成する開発環境を作るやり方。2つ目はVMは無視して直接ハードウェアドライバ(シェアード・ライブラリとカーネル・モジュール)にアクセスする実行モジュールを作成してEV3上で実行させるやり方。EV3ファームウェアの既存の機能を生かしつつスマートに開発するのであれば1つ目の方法が好ましいのでしょうが、ひとまずゴリゴリと実装するのであれば2つ目のやり方で十分かな?というのが現在のところの私の感想です。
教育版(Education edition)とホーム版(Home edition)の違いについて
Mindstorms EV3 製品には教育版とホーム(玩具)版の2つのパッケージがあります。2つのパッケージは価格や同梱されるLEGO部品が異なり標準プログラム環境も異なります。 ちなみに2013年8月現在、日本国内では教育版の発売情報しかありません。 amazon.co.jpやトイザらスにてホーム(玩具)版 Mindstorms EV3 の購入予約がはじまりました。
そしてEV3(インテリジェントブロック)に搭載されるファームウェアも教育版とホーム版で異なるようです。教育版はファームウェアバージョンの末尾が”E”、ホーム版が”H”となっていることがGitHubに公開されているソースコードから読み取れます。そして、ホーム版ファームウェアは #ifdef を使って教育版ファームウェアから一部の機能を削っているようです。GitHubにソースコードを公開していることから ホーム版のMindstorms EV3を購入して教育版のファームウェアを上書きすることも将来的には可能かもしれませんが、ひとまず教育版とホーム版で機能に差がつけられていることに注意した方が良さそうです。現在のところ個人輸入でもしなかぎり日本でホーム版は手に入りませんが…
以上が、これまでに読み解いた内容です。
情報ありがとうございました。8月にupしてくださったのにやっと読ませていただきました。
最近ようやく時間がとれるようになったので、EV3にLeJOSを導入しようと考えていますが、私の実力では移植(環境設定)ができずにいます。すねいるさんから教えていただいたことをもとにゆっくり挑戦してみたいと思っています。
なお、私もHome版をダウンロードしてみました。これからも「すねいる情報」を楽しみに待っています。よろしくお願いいたします。