Help us understand the problem. What is going on with this article?

Automotive Grade Linuxことはじめ

Automotive Grade Linux

日系企業が多く参加している団体が作るLinux。
どのようなものか、インストールして、体感してみることにしました。

本稿は、インストール手順のまとめと、動かしてみたところまでの記録。

自動運転に係わるお仕事、ください。

資料のありか

Qiitaにも記事がありますが、原書主義なので、オリジナルから引用します。

ホスト環境のセットアップ

必要なホスト環境

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のダウンロード

手順書のまま進めます。
https://docs.automotivelinux.org/docs/en/master/getting_started/reference/getting-started/image-workflow-download-sw.html

環境変数を整えます。

$ 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を修正して、追い出しを図る

$AGL_TOP/build/conf/local.conf
- #TMPDIR = "${TOPDIR}/tmp"
+ TMPDIR = "/mnt/tmp"

ビルド環境構築

手順書のまま、進みます。
https://docs.automotivelinux.org/docs/en/master/getting_started/reference/getting-started/image-workflow-initialize-build-environment.html

$ 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

image.png

画面が横向きですが、無事に起動しました。
ただ、動きがとろくて、話にならない状態です。

デフォルトだと、画面が図の通り、横向きなので、次を変更すると、向きが変わります。
コンソールから乗り込んで、編集します。

/etc/xdg/weston/weston.ini
(旧) 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

一番最初だけ、いろいろ内部で作るみたいで、時間がかかります。そのあとの起動は、早いです。
image.png

シリアルがあると、楽ですが、一度立ち上がると、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をコメントアウトします。

/etc/xdg/weston/weston.ini
#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

起動すると、勝手に画面が動きます。

image.png

image.png

番外編

番外編もどうぞ

おしまい。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away