みつきんのメモ

組み込みエンジニアです。Interface誌で「My オリジナルLinuxの作り方」連載中

Yocto Project 3.0(Zeus)でラズベリーパイ4を動かす

はじめに

技適が通り、やっと国内で流通し始めたラズベリーパイ4が手に入ったので、Yocto Projectで動かしてみる。 発熱がすごいらしいのでファン付きのケースも同時に購入した。

構築手順

ソース取得

依存関係がいつの間にか改善されている。最小限の構成であればmeta-openembeddedは不要となったようだ。

$ mkdir -p rpi-zeus/layers
$ cd rpi-zeus/layers
$ git clone git://git.yoctoproject.org/poky.git -b zeus
$ git clone git://git.yoctoproject.org/meta-raspberrypi -b zeus
$ cd ../

環境変数設定

$ source layers/poky/oe-init-build-env build

自動的にビルドディレクトリに移動される。 これで、bitbake関連のツールが使用可能になる。

レイヤ追加

こちらもmeta-raspberrypiのみの追加で行ける。

$ bitbake-layers add-layer ../layers/meta-raspberrypi

local.confの修正

MACHINEをraspberrypi4に設定し、UARTを有効化する。

MACHINE = "raspberrypi4"
DL_DIR ?= "${TOPDIR}/../downloads"

# enable uart
ENABLE_UART = "1"

# systemd
DISTRO_FEATURES_append = " systemd pam"
VIRTUAL-RUNTIME_init_manager = "systemd"
DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
VIRTUAL-RUNTIME_initscripts = ""

# connman
IMAGE_INSTALL_append = " connman \
                 connman-client \
"

ビルド

core-image-baseをビルドする。

$ bitbake core-image-base

書き込み

ddやEtcherで書き込む

ddの場合は次のようにする。

$ sudo dd if=tmp/deploy/images/raspberrypi3/core-image-base-raspberrypi3.rpi-sdimg of=/dev/sdX bs=100M 

/dev/sdXはSDのデバイスに適宜読み替え。

実行

zeusが起動した。

# cat /etc/os-release
ID="poky"
NAME="Poky (Yocto Project Reference Distro)"
VERSION="3.0.1 (zeus)"
VERSION_ID="3.0.1"
PRETTY_NAME="Poky (Yocto Project Reference Distro) 3.0.1 (zeus)"

メモリもきちんと4G見えているようだ。

# free
              total        used        free      shared  buff/cache   available
Mem:        3999780       86908     3871760        8796       41112     3849068
Swap:             0           0           0

きちんと動かしてないけど、USB3.0バイスも認識している様子。

~# lsusb
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 0480:0200 Toshiba America Inc External Disk
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

# lsusb -t
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
    |__ Port 1: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M

USB3.0のHDDを接続したらきちんとBus 02の下にHDDが入った。

まとめ

大体問題なく動作しているようだ。