みつきんのメモ

組み込みエンジニアです。Interface誌で「Yocto Projectではじめる 組み込みLinux開発入門」連載中

YoctoProject LICHEE RV DOCKを動かす

はじめに

SiPEED LICHEE RV DOCKが転がっている。

これにはAllwinner D1が搭載されている。meta-riscvのマシン定義にnezha-allwinner-d1があるので試してみる。

環境を構築する

作業環境

$ mkdir -p ~/work/yocto/nezha-kirkstone
$ cd ~/work/yocto/nezha-kirkstone

CROPSの使用

run_crops.shをダウンロードして使用する。

$ wget https://gist.githubusercontent.com/mickey-happygolucky/2b9671f062de558f3312f7378ed3c240/raw/ab57346aa3911ff4219ac048f5b24519249aec17/run_crops.sh
$ chmod +x ./run_crops.sh

CROPSについてはYocto Project CROPSを使ってみる参照。

pokyの取得

$ git clone -b kirkstone git://git.yoctoproject.org/poky.git

環境変数の設定

$ ./run_crops.sh

meta-riscvの取得

$ ./run_crops.sh bitbake-layers layerindex-fetch meta-riscv

local.confを編集

MACHINE = "nezha-allwinner-d1"
DL_DIR = "${TOPDIR}/../downloads"

bitbake実行

$ ./run_crops.sh bitbake core-image-base

SDカードへの書き込み

/dev/sdXは実際のデバイスで読み替えること。

$ bmaptool copy build/tmp/deploy/images/nezha-allwinner-d1/core-image-base-nezha-allwinner-d1.wic.gz /dev/sdX

16GB以上のサイズのSDカードが必要なので注意。

ボード起動

Sipeed Lichee RVを参考にUSB-シリアル変換ケーブルでPCに接続し、minicomなどの端末を起動する。

LICHEE RV DOCKにSDカードを挿入し電源を投入する。

root@nezha-allwinner-d1:~# uname -a
Linux nezha-allwinner-d1 5.16.0-nezha #1 PREEMPT Sun Jan 16 18:33:32 UTC 2022 riscv64 GNU/Linux

Linux起動はできるようだ。

イメージのサイズが大きい理由

bmaptool実行時の出力をみると下記のような表示が見つかる。

bmaptool: info: 3605504 blocks of size 4096 (13.8 GiB), mapped 23255 blocks (90.8 MiB or 0.6%)

なぜか13.8GiBのイメージとなっている。本来サイズがそれほど大きくならないはずのcore-image-baseなのになぜなのだろうか。

bitbakeではイメージファイルを出力するためにwicを使用している。 wicはkickstartをベースとしていて、パーティション設定済みのディスクイメージを出力することができる。

wicはパーティション構成を定義するwksファイルを参照している。 bitbake実行時にどのwksを参照するかはWKS_FILEで設定される。

$ ./run_crops.sh bitbake core-image-base -e | grep '^WKS_FILE='
WKS_FILE="nezha.wks"

nezha.wksが参照されていることがわかった。 meta-riscvでnezha.wksを探してみる。

$ find poky/meta-riscv -name nezha.wks
poky/meta-riscv/wic/nezha.wks

nezha.wksが見つかったので内容を確認する。

# short-description: Create SD card image for Nezha Allwinner D1 development board

part boot0 --source rawcopy --sourceparams="file=boot0_sdcard_sun20iw1p1.bin" --offset 16s --ondisk mmcblk0 --no-table

part u-boot --source rawcopy --sourceparams="file=u-boot.toc1" --offset 32800s --ondisk mmcblk0 --no-table

part /boot --source bootimg-partition --ondisk mmcblk0 --fstype=vfat --label boot --align 4096 --fixed-size 64 --active

part /     --source rootfs --ondisk mmcblk0 --fstype=ext4 --label rootfs  --align 4096 --fixed-size 14000 --exclude-path data/

--fixed-size 14000の指定がある。fixed-sizeのデフォルトの単位はMiBなので、約14GBとなっている。

これが原因だった。

まとめ

SiPEED LICHEE RV DOCK向けにpokyを作った。 とりあえず起動はできるようだ。

wksの設定によってwicイメージが14GiB固定になっていた。