2013年9月10日火曜日

How to build LEGO Mindstorms EV3 firmware.

実際に動くかどうか分らないけど、ひとまずそれっぽいものが出来上がったのでまとめておく。これが想定される正しいビルド方法である確証もないし、実機で動作するかも見保証。EV3が、ただの箱になっても責任負いません。

環境

Debian 7(wheezy)使用。必要になるパッケージを入れる。

$ sudo aptitude install imagemagick git u-boot-tools

Java Linux x86(jdk-7u25-linux-i586.tar.gz)をダウンロード

$ sudo tar xzf -C /opt jdk-7u25-linux-i586.tar.gz

Sourcery CodeBench Lite EditionからARM ProcessorsのDownload the GNU/Linux Releaseを辿り、Sourcery CodeBench Lite 2013.05-24からIA32 GNU/Linux TAR(arm-2013.05-24-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2)ダウンロード。

$ sudo tar xjf -C /opt arm-2013.05-24-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

以下のように環境変数を設定する。

ソースコード

Githubから直接クローンする。

$ mkdir projects
$ cd projects
$ git clone https://github.com/mindboards/ev3sources.git lms2012

ビルド

クローンしたlms2012ディレクトリ内のlms2012/open_first内でビルドする。ターゲットを指定せずにmakeを実行すると有効なターゲットとその説明が表示される。

$ cd lms2012/open_first
$ make
Execute "make TARGET" where TARGET is:
 lms2012: to build the lms2012 program and its libraries
 modules: to build lms2012 kernel modules
 programs: to build bytecode programs and their data files
 kernel: to build Linux kernel
 u-boot: to build u-Boot
 doc: to build documentation

Execute "make doc.view" to view the documentation in a web
browser

Execute "make TARGET.clean" to clean an individual target
or "make clean" to clean everything

Add the ARCH=X86 argument to run for X86 platform (some targets
are then meaningless).

doc以外のターゲットを実行すれば、ファームウェア作成に必要なファイルが生成される。

$ make lms2012 modules programs kernel u-boot

以下は、各ターゲットで実行される内容。

lms2012
lms2012/lms2012内をビルドする。デバイスアクセス用ユーザランドライブラリとEV3上で動作するバイナリインタプリタ(lms2012)が生成される。ビルドしたバイナリはlms2012/lms2012/Linux_AM1808に出力される。
modules
ハードウェア制御用のカーネルドライバをビルドする。lms2012/d_xxxxにあるソースからlms2012/d_xxxx/Linuxmod_AM1808にビルドする。
programs
デフォルトで入っているユーティリティなどをビルドする。
kernel
extra/linux-03.20.00.13にあるソースをビルドしてカレントディレクトリにuImageを作る。
u-boot
extra/uboot-03.20.00.13にあるソースをビルドしてカレントディレクトリにuBootを作る。

イメージの作成

lms2012/open_first/scripts/make_ev3_os_EDU.shの、/mntで作業しているのが気持ち悪いので/tmpに書き換える。 さらにsudoで実行するためにホームディレクトリの参照を書きかえる。

-PATH1=~/projects/lms2012
+PATH1=/home/$SUDO_USER/projects/lms2012

カレントディレクトリをlms2012/open_firstにしたうえで、以下のコマンドを実行する。

$ sudo ./make_image_EDU.sh 

正常に終了すると、EV3-image.1378785043.binEV3.cramfs.binが生成される。EV3-image.1378785043.binはU-Bootとカーネルとルートファイルシステムを含んだファームウェア、EV3.cramfs.binはルートファイルシステムになる。