はじめに
"Yocto Project CROPSを使ってみる"を拝見して、、、
— nb.o (@Nextremer_nb_o) February 9, 2022
Fedoraのpodmanでもできました。https://t.co/YGURc1j6hz
私の記事を参考にして、meta-riscvをビルドしようとしたけどうまくいかないらしかったので試してみる。
大まかな流れ。
Quick Startの手順をなぞる。
- repoの設定(省略)
- ワークスペースの作成
- setup.shの実行
- bitbake実行
CROPSは3の手順から使用する。
ワークスペースの作成
mkdir riscv-yocto && cd riscv-yocto repo init -u git://github.com/riscv/meta-riscv -b master -m tools/manifests/riscv-yocto.xml repo sync repo start work --all
setup.shの実行
CROPS実行用のスクリプトを作成
riscv-yoctoディレクトリにrun_meta-riscv.sh
とかの名前で下記のようなスクリプトを作成する。
引数なしで実行した場合は、meta-riscv/setup.sh
を実行し、
引数を指定した場合は、そのコマンドラインを実行する。
#!/bin/sh BUILD_DIR=build cmd="source $(pwd)/openembedded-core/oe-init-build-env ${BUILD_DIR}" if [ $# -gt 0 ] ; then cmd="${cmd} && $*" else cmd="source $(pwd)/meta-riscv/setup.sh" fi docker run --rm -it -v "$(pwd)":"$(pwd)" crops/poky --workdir="$(pwd)" bash -c "${cmd}"
実行権限をつけておく。
$ chmod +x ./run_meta-riscv.sh
setup.shを実行する
$ ./run_meta-riscv.sh
bitbake実行
setup.shの結果、buildディレクトリが作成され、その中にauto.confやlocal.conf、bblayers.confなどが作成される。
local.conf
local.confの末尾に次の一行を追加する。
USER_CLASSES:remove = "image-prelink"
bitbakeを実行する
次のようにしてCROPSでbitbakeを実行する。
$ ./run_meta-riscv.sh MACHINE=qemuriscv64 bitbake core-image-full-cmdline
これでイメージがビルドされる。
runqemuの実行
qemuの実行はネットワークデバイスの設定などが面倒臭いのでCROPSは使わずに直接ホストマシンで実行する。
$ source openembedded-core/oe-init-build-env $ MACHINE=qemuriscv64 runqemu nographic
ホストマシンに必要なパッケージが不足しているとエラーになるが、基本的にはこれでいけるはず。
こんな感じで起動が面がでてくる。
OpenSBI v0.9 ____ _____ ____ _____ / __ \ / ____| _ \_ _| | | | |_ __ ___ _ __ | (___ | |_) || | | | | | '_ \ / _ \ '_ \ \___ \| _ < | | | |__| | |_) | __/ | | |____) | |_) || |_ \____/| .__/ \___|_| |_|_____/|____/_____| | | |_| Platform Name : riscv-virtio,qemu Platform Features : timer,mfdeleg Platform HART Count : 4 Firmware Base : 0x80000000 Firmware Size : 124 KB Runtime SBI Version : 0.2 Domain0 Name : root Domain0 Boot HART : 3 Domain0 HARTs : 0*,1*,2*,3* Domain0 Region00 : 0x0000000080000000-0x000000008001ffff () Domain0 Region01 : 0x0000000000000000-0xffffffffffffffff (R,W,X) Domain0 Next Address : 0x0000000080200000 Domain0 Next Arg1 : 0x0000000082200000 Domain0 Next Mode : S-mode Domain0 SysReset : yes Boot HART ID : 3 Boot HART Domain : root Boot HART ISA : rv64imafdcsu Boot HART Features : scounteren,mcounteren,time Boot HART PMP Count : 16 Boot HART PMP Granularity : 4 Boot HART PMP Address Bits: 54 Boot HART MHPM Count : 0 Boot HART MHPM Count : 0 Boot HART MIDELEG : 0x0000000000000222 Boot HART MEDELEG : 0x000000000000b109 [ 0.000000] Linux version 5.15.16-yocto-standard (oe-user@oe-host) (riscv64-oe-linux-gcc (GCC) 11.2.0, GNU ld (GNU Binutils) 2.37.20210721) #1 SMP PREEMPT Tue Jan 25 14:32:29 UTC 2022 [ 0.000000] OF: fdt: Ignoring memory range 0x80000000 - 0x80200000 [ 0.000000] Machine model: riscv-virtio,qemu [ 0.000000] Memory limited to 256MB [ 0.000000] efi: UEFI not found. [ 0.000000] Zone ranges:
rootでログインしてみる。
OpenEmbedded nodistro.0 qemuriscv64 ttyS0 qemuriscv64 login: root root@qemuriscv64:~# cat /etc/os-release ID=nodistro NAME="OpenEmbedded" VERSION="nodistro.0" VERSION_ID=nodistro.0 PRETTY_NAME="OpenEmbedded nodistro.0" root@qemuriscv64:~#
まとめ
いちおう、問題なくビルドはできていそう。