前口上
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 で公開したらモテモテだったのでは? という気がした。
でも貯めこむと忘れるので,投稿する。モテなくたっていい。泣かない。