2021年2月3日水曜日

qemu-system-arm で動く Linux を Yocto でビルドする

Yocto Project Quick Build — The Yocto Project ® 3.2.1 documentationqemuarm で試す。

前提

  • OS: Windows 10 Pro
  • Docker: Docker version 20.10.2, build 2291f61
  • 使用する Docker イメージ: debian:buster-slim

作業用コンテナ起動

docker run -it --name myyocto --workdir="/work" debian:buster-slim

必要パッケージのインストール

WORK_DIR=$(pwd)
apt-get update

# Quick Build に記載されているパッケージをインストール
apt-get install -y gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint3 xterm python3-subunit mesa-common-dev

# Quick Build には記載されていないが、これが無いとビルド時にエラーが発生した
apt-get install -y python2

# qemu インストール
apt-get install -y qemu-system-arm

yocto の clone とビルド

# yocto を clone
git clone git://git.yoctoproject.org/poky.git
cd poky
git checkout tags/yocto-3.2.1 -b my-yocto-3.2.1

# yocto 環境設定読み込み
source oe-init-build-env

# arm 用のバイナリをビルドするための設定
sed -i -e 's/MACHINE ??= "qemux86-64"/MACHINE ??= "qemuarm"/' conf/local.conf

# root でビルドできるように設定
touch conf/sanity.conf

# 詳細不明だが、エラーが発生した
# エラーになっても 2, 3 回同じコマンドを繰り返すと成功することがある。
# 一発で成功することもある。謎。
bitbake core-image-minimal

ビルド成果物を qemu-system-arm で実行

runqemu を実行すると、「tun モジュールが無い」と怒られたので、 qemu-system-arm コマンドで実行する。

qemu-system-arm -M virt -m 1024 \
  -kernel tmp/deploy/images/qemuarm/zImage \
  -drive if=none,file=tmp/deploy/images/qemuarm/core-image-minimal-qemuarm.ext4,format=raw,id=hd \
  -device virtio-blk-device,drive=hd \
  -netdev user,id=usernet \
  -device virtio-net-device,netdev=usernet \
  -append "root=/dev/vda" \
  -nographic -no-reboot

以上。

参考資料

0 件のコメント:

コメントを投稿