TOPPERS
ETロボコン

300打鍵以内でEV3RTをビルドする

More than 1 year has passed since last update.

前口上

ETロボコンでも使われている EV3RT ですが,TOPPERS プロジェクト(というか OSS)の製品にありがちなことに,開発環境の構築が面倒です。
やりたいことは EV3RT のアプリケーションの開発のはず。
環境の構築なんてしたくありませんよね? 楽をしましょう。

環境

Docker を使います。最近は Linux だけでなく Mac や Windows でも動くので,障壁は下がっていると思います。使えるようになっておけば,他の分野でも使えますし。

Docker を使うと,環境を完全に同一にできます。人数の多いチームでの開発をしたことのある方は,これが大きなメリットだと感じて頂けるかと思います。
継続ビルドも行いやすくなります。

今回はホストとして Linux (CoreOS) を使います。他のOSやディストリビューションでも概ね一緒だと思いますが,適宜読み替えてください。
Docker イメージを DockerHub から引っ張ってきますし,ソースコードは GitHub から clone してきますので,インターネット接続も要ります。

手順

Docker コンテナに入ってからの作業は,Get Startedの後半と一緒なのですが,とりあえず,一通り記しておきます。

Docker コンテナへ入る

まずは Docker コンテナを引っ張ってきて,その中に入ります。

$ mkdir projects
$ cd projects
$ docker run --rm -it -v ${PWD}:/projects pizzafactory/che-stack-ev3rt /bin/bash

-v オプションで,カレントディレクトリをコンテナ内にマウントしています。
これが無いと,ビルドが終わったあと,コンテナ内のビルド成果物を取り出すのが難しくなります。

たぶん,初回だけ,こんな感じでダウンロードが走ります。

Unable to find image 'pizzafactory/che-stack-ev3rt:latest' locally
latest: Pulling from pizzafactory/che-stack-ev3rt
6bbedd9b76a4: Already exists
fc19d60a83f1: Already exists
de413bb911fd: Already exists
2879a7ad3144: Already exists
668604fde02e: Already exists
778c49b1024a: Pull complete
c04e85362e33: Pull complete
c75bea60126b: Pull complete
0dd26cf7d467: Pull complete
d0fa3f3dd7d6: Pull complete
9d103e0e382b: Pull complete
Digest: sha256:65b2f6305ce2780677d21da5cc157b01517583ba84b2691bfa1a71e6cfb8d92d
Status: Downloaded newer image for pizzafactory/che-stack-ev3rt:latest

しばらくするとプロンプトが出ます。

root@8b2e1b815cd8:/projects#

root ユーザになりますが,今回の起動方法では,コンテナからホストに出て悪さをすることは不可能です。安心して操作してください。
以下,プロンプトを「#」で表記します。

ソースツリーの取得

GitHub からソースツリーを取得します。

# git clone https://github.com/ev3rt-git/ev3rt-hrp2
# cd ev3rt-hrp2
# git submodule init
# git submodule update

clone の際にパスワードを聞かれたときには URL を間違えています。確認してください。

カーネルコンフィギュレータの作成

# cd cfg
# make

Boost を使った比較的サイズの大きなツールなので,ビルドにそこそこの時間がかかります。
コーヒーサーバに行って帰ってくるくらいはできるかも。

uImage のビルド

$ cd ../base-workspace
$ make app=loader

こちらは,さほど時間はかかりません。大きかったら EV3 に入りませんし。

helloev3 のビルド

$ cd ../sdk/workspace
$ make app=helloev3

こちらはさらに時間がかからずに終わります。hello world 相当ですから。

Docker コンテナから脱出

Ctrl+D を押すなり exit コマンドを実行するなりして,コンテナから出ます。

# exit

成果物の回収

ホスト環境に戻ってきました。
先ほどカレントディレクトリをマウントしておきましたので,カレントディレクトリにコンテナ内の作業内容が残っています。

ev3rt-hrp2/base-workspace/uImage はファイル名の通り uImage で,{カレントディレクトリ}/ev3-rt-hrp2/sdk/workspace/app は先ほどビルドした helloev3 です。

このあとの作業は,Mindstorms EV3 に慣れていらっしゃる読者の方がお詳しいでしょう。

打鍵数は?

コンテナからの脱出で Ctrl-D を使った場合の打鍵数は 299。ギリギリで 300打鍵以内に収まりました。入力補完が効きますので,実際の打鍵数はもう少しすくなくなるはずです。

余談

もう一回ビルドしたいときは?

docker に --rm オプションが付いているので,コンテナから抜けるとコンテナインスタンスは消えます。
もう一度ビルドしたいときは,最初のビルドを行ったディレクトリへ移動して,再度 docker を実行してください。

$ cd projects
$ docker run --rm -it -v ${PWD}:/projects pizzafactory/che-stack-ev3rt /bin/bash

コンテナインスタンスは消えますが,イメージは残っていますので,再実行時は瞬時にコンテナ内に入れます。

どうでもいいいこと

書き上げてから,この記事 ET ロボコン Advent Calendar で公開したらモテモテだったのでは? という気がした。
でも貯めこむと忘れるので,投稿する。モテなくたっていい。泣かない。