Edited at

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 で公開したらモテモテだったのでは? という気がした。

でも貯めこむと忘れるので,投稿する。モテなくたっていい。泣かない。