Automotive Grade Linuxことはじめ

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

手順書のまま進めます。
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213097/804ef48a-397a-9381-39e8-dd02c80ae9a5.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213097/0d0619cc-96fd-4c5d-2b29-0d5aa12898a8.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213097/47a861b2-27c3-a24d-e897-90fd2fce2871.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213097/b06c2f5e-83e2-9387-e8c7-f9cd72b8a88f.png)



###番外編
[番外編もどうぞ](https://qiita.com/mbamba/items/3729aa2ef296dc7ee0d2)

おしまい。