私のラズパイZero 2 W yocto環境構築体験談

この記事は[Linux Advent Calendar 2022](https://qiita.com/advent-calendar/2022/linux)の25日目です。

# はじめに
主要SoCメーカーがyocto環境を提供していること、CQ出版社のinterface誌でyocto連載がはじまったこともありyoctoの環境構築をしたいと思いました。

# 背景
以前もyocto環境を構築したことがありました。

 * [AWS(EC2)でSTM32MP1 用の組込みLinux(OpenSTLinux)をコンパイルした件](https://qiita.com/juraruming/items/aae78d84759e72c65cc0)

そのときはAWS上でyocto環境をつくりました。
私がyocto環境構築する際にネックになるのが【ストレージ容量】です。

私のメインPCはMacBook(2017年版)でストレージ容量はつぎのとおりです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171866/9339a9a2-cbc7-a69c-403f-85f0614914ac.png)

このMac PCにUbuntuをゲストOSとして動かしyocto環境構築するのにはストレージ容量が厳しそうです。
そういった事情も前回AWSで環境構築した理由です。
ただ、AWSの料金管理の知見がなくお金を払いすぎたこと([こちらを参照](https://qiita.com/juraruming/items/8fd07d6559823df278c4))もありAWSでyocto環境構築はやりたくありませんでした。
現状のPCでなんとかyocto環境構築する手段はないかと探していました。

# 結局どうしたか?
結論としてつぎの構成でyocto開発環境が構築できました。

 * PCは現状のMacBook(２０１７年版)のまま
 * SSD 1Tを購入
 * SSDケースを購入し、USB Type-CでMac PCに接続

外付けSSDにVMwareのUbuntu20.04の仮想マシンをつくり、そこにyocto環境を構築しました。
以降に少し掘り下げて説明します。


# ホストPCのスペック紹介
ホストPCのスペックを紹介します。

 * MacBook 2017
 * メモリ　8G
 * ストレージは250G
 * ストレージの空き容量は30Gという状況

# yocto開発環境構築
## 機材準備
### ラズパイZero 2 W
今回はラズパイZero 2 W向けにyoctoのSDカードイメージをつくることにしました。

### SSD
SSDはつぎを購入しました。

 * [ACClamator NVMe 1TB PS5 SSD PCIe Gen4x4 M.2 2280](https://www.amazon.co.jp/gp/product/B0BBRGMYWM/ref=ppx_yo_dt_b_asin_title_o04_s00?ie=UTF8&psc=1)

### SSDケース
SSDケースはつぎを購入しました。

 * [玄人志向 ドライブケース M.2 NVMe SSD 2280 Type-C 40Gbps(USB3.2, USB3.1, USB3.0互換) GWM.2NVMe-40GC](https://www.amazon.co.jp/gp/product/B09RFFW14V/ref=ppx_yo_dt_b_asin_title_o04_s00?ie=UTF8&th=1)

こちらのケースでは40Gbpsの転送と謳っていますが私のMacBookのUSBがUSB3.0のため転送速度は５Gbpsで頭打ちになると思います。
最新のMacBook　Pro(M2チップ)であればこのケースの性能を使えそうです。

つぎの図はMacBookのシステム情報です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171866/3dc0be6a-e00c-eb25-971e-cf17b9b7c6e5.png)


SSDをケースに格納します。
![IMG_4956.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171866/c5fdf5f9-7392-9cce-fb91-903be5df9b49.jpeg)

２つ合わせてそれなりの金額になります。
もしyocto環境が構築できなかったら、
 * 外付けストレージデバイス
 * ラズパイをSDカードブートからSSDブートにする
 * その他

など使い道がありそうだったので購入してyocto環境構築してみることにしました。。


## 構築手順
### 仮想マシンをつくる
ホストPCはMacなのでVMwareでゲストOSのLinuxを動かし、そこにyocto環境をつくることにしました。
こちらの[1.1 Supported Linux Distributions](https://docs.yoctoproject.org/ref-manual/system-requirements.html#supported-linux-distributions)によるとyocto環境はつぎのLinuxディストリビーションで動くとのことでした。

 * Ubuntu 18.04 (LTS)
 * Ubuntu 20.04 (LTS)
 * Ubuntu 22.04 (LTS)
 * Fedora 34
 * Fedora 35
 * AlmaLinux 8.5
 * Debian GNU/Linux 10.x (Buster)
 * Debian GNU/Linux 11.x (Bullseye)
 * OpenSUSE Leap 15.3

この中で割と使ったことが多い **Ubuntu 20.04 (LTS)** をゲストOSに決めました。
VMwareでUbuntu20.04の仮想マシンをつくります。

### 構築の方針
yocto環境構築は基本Interface誌１０月号の記事とこちらの[Build Host Packages](https://docs.yoctoproject.org/brief-yoctoprojectqs/index.html#build-host-packages)を参考に進めていきました。
構築のバリエーションは選択肢があると思いますが、Interface誌の連載を再現するのが目的だったのでこちらにしました。

 * yoctoのバージョンはkirkstone
 * イメージはcore-image-minimal

krikstoneについては[こちらのページ](https://www.lineo.co.jp/blog/yocto/vol01-kirkstone.html)が詳しそうです。
core-image-minimalイメージは**Linuxのブートに必要な最小限の構成**とのことです。

### 構築時に起きたこと
構築を開始するといくつかの事象が発生しました。

#### ディスク容量の不足
VMwareでUbubtu20.04の仮想マシンをつくるときにディスク容量を20Gにしていました。
ディスク容量不足のため構築が失敗していました。つぎは状況発生時のツイートです。

https://twitter.com/juraruming/status/1590096129341165568?s=20&t=VU_5hUvQvZw6SbM3OOuf8g

ディスク容量を20Gから200Gに変更しふたたび構築をおこないました。
結果、構築が完了しcore-image-minimalのイメージができました。
構築に要したストレージの容量は53Gとなっていました。

https://twitter.com/juraruming/status/1590556153456758784?s=20&t=QuI0-c9F5gtsVR1g3RJmuA

## 動作確認
構築で作成されたcore-image-minimalのイメージをマイクロSDカードに書き込み電源ONしました。
つぎのツイートのとおり、ラズベリーが表示され、rootでログインできました。

https://twitter.com/juraruming/status/1591056916436094977?s=20&t=QuI0-c9F5gtsVR1g3RJmuA

# まとめ
今回の記事をまとめます。

 * SSDを外付けしてもyocto環境構築ができた
 * yocto kirkstone, core-image-minimalイメージのディスク使用量は53Gだった。

もし同様の環境構築を行う際にストレージ容量の見積りに悩まれた際は参考にしていただければ・・・と思います。