Automotive Grade Linux
日系企業が多く参加している団体が作るLinux。
どのようなものか、インストールして、体感してみることにしました。
本稿は、インストール手順のまとめと、動かしてみたところまでの記録。
自動運転に係わるお仕事、ください。
資料のありか
Qiitaにも記事がありますが、原書主義なので、オリジナルから引用します。
- https://www.automotivelinux.org/software/download/get-started
- https://wiki.automotivelinux.org
- https://docs.automotivelinux.org/docs/en/master/getting_started/
ホスト環境のセットアップ
必要なホスト環境
Yocto準拠であればよい、とのこと。今回は、Ubuntu 16.04 LTSを選択。
そのほか
- 50GBの空き容量 <-- 本稿投函時点で、絶賛400Gほど利用中....
- ツールの最新バージョン
- Git 1.8.3.1 or greater
- Tar 1.27 or greater
- Python 3.4.0 or greater
Tarが入っているのが、おちゃめ。(本稿では未使用)
Yoctoでは、次のコマンドを要求
https://www.yoctoproject.org/docs/2.4.4/yocto-project-qs/yocto-project-qs.html
$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \
build-essential chrpath socat cpio python python3 python3-pip python3-pexpect \
xz-utils debianutils iputils-ping libsdl1.2-dev xterm curl
AGLのダウンロード
環境変数を整えます。
$ export AGL_TOP=$HOME/workspace_agl
$ mkdir -p $AGL_TOP
repoを導入します。
$ mkdir -p ~/bin
$ export PATH=~/bin:$PATH
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
次に、Stable版をダウンロードします。
git --globalにて、user.emailとuser.nameを入れておかないと、エラーで止まります。
$ cd $AGL_TOP
$ repo init -b flounder -u https://gerrit.automotivelinux.org/gerrit/AGL/AGL-repo
$ repo sync
途中、curlにて404が多発しますが、よくわからないので、ここでは放置しておきます。
guppyがあったので、そちらに変更。curlのエラーがなくなった。
$ repo init -b guppy -m guppy_7.0.2.xml -u https://gerrit.automotivelinux.org/gerrit/AGL/AGL-repo
$ repo sync
halibutがリリースされたので、改めて、環境構築して、ビルドしてみる
$ repo init -b halibut -m halibut_8.0.3.xml -u https://gerrit.automotivelinux.org/gerrit/AGL/AGL-repo
$ repo sync
ビルド環境として、100Gのディスク領域を用意したが、足りず。
tmp領域で、60G以上利用していたため、build/conf/local.confを修正して、追い出しを図る
- #TMPDIR = "${TOPDIR}/tmp"
+ TMPDIR = "/mnt/tmp"
ビルド環境構築
$ bash
$ cd $AGL_TOP
$ source meta-agl/scripts/aglsetup.sh -h
ずらずらと出てくれば、ここまではOK
ビルド
ここから、雲行きが怪しい。
手順書が古そうなので、調整しながら進む。
$ source meta-agl/scripts/aglsetup.sh -m beaglebone agl-demo
となっているが、beagleboneは使わないので、違うのを選択。
x86環境だとintel-corei7-64。
qemuだと、qemux86-64。
raspberrypiだと、raspberrypi3とrspberrypi4がある。
"aglsetup.sh -h"でずらずら表示されるので、その中から自分の環境にあるマシーンを"-m"で選択すればヨシ
-b: buildのdir名を設定
-m: ターゲットマシーンを設定
bとmを使い分けることで、それぞれのmachine, featureごとに、ビルドすることが可能。これ、便利な機能です。
ただし、build dirごとに、tmpを作って、大量にダウンロードをするので、ストレージに負荷がかかります。
$ source meta-agl/scripts/aglsetup.sh \
-m intel-corei7-64 \
agl-devel agl-demo agl-appfw-smack agl-netboot agl-audio-4a-framework
$ source meta-agl/scripts/aglsetup.sh -m qemux86-64 agl-demo
設定は、build/conf/local.confに反映されます。
MACHINEが、それぞれ指定したものになっているか、確認しましょう。
デフォルトは、qemuなので、qemuの場合は、大きな問題なし。
続いて、ビルド
$ bitbake agl-demo-platform
6900超ファイルを操作するので、1回目は相当時間がかかります。(うちの環境(i7-7700K)で6時間ほど)
-fをつけると、confの中を上書きします。それだけ。ほかのなにかも上書きするわけではない。
お試し動作
QEMU編
これも、取説のまま。
コマンドラインより、以下をタイプ
qemu-system-x86_64 -enable-kvm -m 2048 \
-hda agl-demo-platform-qemux86-64.wic.vmdk \
-cpu kvm64 -cpu qemu64,+ssse3,+sse4.1,+sse4.2,+popcnt \
-vga virtio -show-cursor \
-device virtio-rng-pci \
-serial mon:stdio -serial null \
-soundhw hda \
-net nic,vlan=0 \
-net user,hostfwd=tcp::2222-:22
画面が横向きですが、無事に起動しました。
ただ、動きがとろくて、話にならない状態です。
デフォルトだと、画面が図の通り、横向きなので、次を変更すると、向きが変わります。
コンソールから乗り込んで、編集します。
(旧) transform=270
(新) transform=0
このファイルにはほかの設定も入っていますが、解像度は、1920x1080のままのほうがよさそうです。
変更すると、マウスの動きがうまくキャプチャできない印象です。
unable to init server: could not connect: connection refused
といったエラーが出た場合は、xhostの許可をあげてください。
$ xhost +
Raspberry Pi 3 編
できたファイルを、micro SDに焼きます。
$ xzcat <image_name> | sudo dd of=<sdcard_device_name> bs=4M
ちゃんとビルドができていれば、立ち上がります。が、自分の環境では、真っ黒画面しか出てきませんでした。
一度、cleanして、再度、焼き直したところ、正常に立ち上がりました。
$ bitbake -c clean agl-demo-platform
$ bitbake agl-demo-platform
一番最初だけ、いろいろ内部で作るみたいで、時間がかかります。そのあとの起動は、早いです。
シリアルがあると、楽ですが、一度立ち上がると、sshからでも接続できます。DHCPがあるネットワークなら、ETH0が次のように設定されます。
UID: root, PWD:(なし)で、接続できます。(シリアルがない場合は、arpで当該IP addrを探してください)
raspberrypi3:~# ifconfig eth0
eth0 Link encap:Ethernet HWaddr
inet addr:192.168.0.37 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr:
inet6 addr: Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1927 errors:0 dropped:522 overruns:0 frame:0
TX packets:345 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:291099 (284.2 KiB) TX bytes:47199 (46.0 KiB)
$ ssh root@192.168.0.37
The authenticity of host '192.168.0.37 (192.168.0.37)' can't be established.
ECDSA key fingerprint is SHA256:gRRXX0kuQWgWfFC/G5zXKXHbOW0CHHHelEURMNGoVCQ.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.37' (ECDSA) to the list of known hosts.
Last login: Mon Jul 1 08:14:49 2019
raspberrypi3:~#
また、タッチパネル付きディスプレイで操作すると、qemuよりも、断然早く動きます。(サクサクかは、人それぞれの感じ方かもしれません)
weston.iniのpanel-positionをコメントアウトします。
#panel-position=none
タイムゾーンを合わせるには、次のlocaltimeの情報を書き換えます。
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
#最後に
物理レイヤを実装しているわけではないので、ふーん、という感は否めません。もう少し調査して、音が出る、ネットサーフィンができる、というものにならないか、試してみます。
#(追記) AGL CLUSTER DEMO
次のコマンドで、agl-cluster-demoを作ることができます。
今回は、qemu向けに作ってみました。
$ source meta-agl/scripts/aglsetup.sh -b build-cluster -m qemux86-64 agl-cluster-demo
$ bitbake agl-cluster-demo-platform
起動 (qemuのコマンドのまま)
$ sudo qemu-system-x86_64 -enable-kvm -m 2048 \
-hda agl-demo-platform-qemux86-64.wic.vmdk \
-cpu kvm64 -cpu qemu64,+ssse3,+sse4.1,+sse4.2,+popcnt \
-vga virtio -show-cursor \
-device virtio-rng-pci \
-serial mon:stdio -serial null \
-soundhw hda \
-net nic,vlan=0 \
-net user,hostfwd=tcp::2222-:22
起動すると、勝手に画面が動きます。
###番外編
番外編もどうぞ
おしまい。