Raspberry Pi 3 B+でAGLブート



[ここ](https://wiki.automotivelinux.org/agl-distro/agl-raspberrypi)とか[ここ](http://docs.automotivelinux.org/docs/getting_started/en/dev/reference/machines/raspberrypi.html)にRaspberry Pi向けのビルド方法が記載されているものの、少しずつ記述が違うのでよくわらかない。
実際に起動までできた手順をまとめてみる。

動かしてみるだけなら、SDへ書き込み可能なバイナリイメージを取得すればよい。
[Snapshot Binary](https://download.automotivelinux.org/AGL/snapshots/master/latest/raspberrypi3/deploy/images/raspberrypi3/)

今回はあえてビルドにチャレンジ。

## ビルド環境
+ Windows10 + VMWare Workstation 14 Player<br>
Windowsとのデュアルブート環境作るのも面倒なのでVMWare上にさくっとインストール。<br>
Virtual BoxでもHyper-Vでもいいはずなのでお好みで。
+ Ubuntu 16.04<br>
最初は18.04でビルドしてみたもののエラーが発生したので16.04で再構築。

## 環境構築
最初の一回だけセットアップすればよい手順

+ 必要ツールのインストール<br>
Ubuntuにソースビルドに必要なツール群をインストールする。

```bash
sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \
     build-essential chrpath socat libsdl1.2-dev xterm cpio curl
```

+ ディレクトリの作成<br>
ソースのダウンロードや、ビルドをするためのディレクトリを作成する。

```
export AGL_TOP=$HOME/workspace_agl
mkdir -p $AGL_TOP
```
`export AGL_TOP=～`は、次回以降の起動時は自動で設定されるよう~/.bashrcに書いておいた。

+ repoツールのダウンロード<br>
AndroidのAOSPソースダウロードではおなじみのツール<br>

```bash
mkdir -p ~/bin
export PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
````
同じく`export PATH=～`は~/.bashrcに書いておく。

## ソースダウンロード

2018/9/6時点の最新バージョンを取得

```bash
cd $AGL_TOP
repo init -b master -m flounder_5.99.4.xml -u https://gerrit.automotivelinux.org/gerrit/AGL/AGL-repo
repo sync
```
-b : ブランチを指定
-m : リポジトリ内で使用する manifest のファイルを指定
-u : manifestのリポジトリが存在するURLを指定

[ここ](http://docs.automotivelinux.org/docs/getting_started/en/dev/reference/source-code.html#download-master-branch)記載では、最新ソース取得する場合は"-m"の指定が不要となってるが指定しないとbitbake時にエラーが出る。
"-m"指定は必須。

どのブランチのどのmanifestを参照すれば良いかは以下を参照。
[AGL Unified Code Base Release Notes](https://wiki.automotivelinux.org/agl-distro/release-notes)

余談だが、メジャーバージョンにはコードネームがつけられている模様。
おさかなシリーズ。

| バージョン | コードネーム |
|---|---|
|7.x|Grumpy Guppy|
|6.x|Funky Flounder|
|5.x|Electric Eel|
|4.x|Daring Dab|
|3.x|Charming Chinook|
|2.x|Brilliant Blowfish|


## ソースビルド
今回利用したのはRaspberry Pi 3 B+だが、指定は`raspberrypi3`の指定でOK。
Yoctoビルドが実行され、ソースのビルドだけでなく各種パッケージソースもダウンロードされる。
かなり時間がかかるので（特にダウンロードが低速）、しばらく放置。

```bash
source meta-agl/scripts/aglsetup.sh -m raspberrypi3 agl-demo agl-netboot agl-appfw-smack
bitbake agl-demo-platform
```

## SDへの書き込み
小一時間、二時間まつとビルドが完了するのでSDに書き込む。
/dev/sdc1がマウントされていたので、アンマウントしてから書き込む。

```bash
sudo umount /dev/sdc1
cd $AGL_TOP/build/tmp/deploy/images/raspberrypi3/
xzcat agl-demo-platform-raspberrypi3.wic.xz | sudo dd of=/dev/sdc bs=4M
sync
```
ddの出力先にはパーティションのデバイスファイルでななく、ドライブのデバイスファイルを指定。
書き込みが完了するとSDカード上にパーティションが生成されている。


## 起動
Raspberry Pi本体にSDカードを指してから電源に接続。
ディスプレイはHDMI出力。
しばらく放置すると起動し、AGLのデモ用Launcherアプリ表示される。

ただディスプレイがランドスケープだと画面が横向きに表示される。
＃画面向かって左が天、右が地

使ったデイスプレイがチルトできないやつだったので、画面出力を回転させる。
＃正確には回転させずに表示させる

## ディスプレイの画面出力を回転させる
### シリアル接続
ディスプレイの出力はGUIなので、コンソールにアクセスするためにシリアル接続する。
ケーブルは[これ](https://www.amazon.co.jp/gp/product/B00K7YYFNM/)を利用。安かったけどちゃんと使えた。

ピンとの接続は以下を参考に接続。
[Connect the Lead](https://learn.adafruit.com/adafruits-raspberry-pi-lesson-5-using-a-console-cable/connect-the-lead)

シリアルケーブ接続できたらscreenをたたく。

```bash
sudo screen /dev/ttyUSB0 115200
```

デフォルトではユーザ名root, パスワード無でログインできる。

### 画面の出力設定
デフォで270°回転する設定となっているの、HDMI出力時の回転指定をコメントアウトする

```/etc/xdg/weston/weston.ini
[output]
name=HDMI-A-1
#transform=270
```

保存したらRaspberry Piを再起動。
再起動後は左右にレターボックスが入って、ちゃんと縦に表示される。