CentOS 7: Yoctoをビルドする

YoctoでLinuxカーネルとルートファイルシステムを作成してQEMUで起動する手順を記載します。

 

1 環境

以下の様な仮想マシン環境で実行しています。

 

CPUコア数 1
RAM 1GB
スワップ 1GB
ストレージ 80GB

 

2 ビルドに必要なパッケージのインストール

YoctoのQuickStartのページを参照して、ビルドに必要なパッケージをインストールします。

$ sudo yum install gawk make wget tar bzip2 gzip python unzip perl patch \
iffutils diffstat git cpp gcc gcc-c++ glibc-devel texinfochrpath socat \
perl-Data-Dumper perl-Text-ParseWords perl-Thread-Queue SDL-devel xterm

3 pokyの取得

Yoctoのビルドツールであるpokyを取得します。

$ git clone http://git.yoctoproject.org/git/poky

4 oe-init-build-envの実行

oe-init-build-envでpokyが提供するツールのPATH設定等が実行されます。

また、buildディレクトリが作成され、そちらにディレクトリ移動されます。

$ cd poky
$ . oe-init-build-env

5 local.confの設定

CPUアーキテクチャ、スレッド数、make -jの数等の指定が可能です。

ここではMACHINEはデフォルトのqemux86を使用します。

$ emacs conf/local.conf

 

BB_NUMBER_THREADS 同時にビルドするパッケージの数
PARALLEL_MAKE make -jの値
MACHINE CPU/ボード

 

複数コア利用可能な環境の場合はBB_NUMBER_THREADS x PARALLEL_MAKEがコア数に等しくなる値にすると相当のビルド速度向上が見込めます。

6 ビルド

レシピcore-image-minimalをビルドします。

core-image-minimalはLinuxカーネルと最小限のルートファイルシステムを作成するレシピです。

$ bitbake core-image-minimal
WARNING: Host distribution "Ubuntu-16.04" has not been validated with
this version of the build system; you may possibly experience
unexpected failures. It is recommended that you use a tested distribution.

本環境では、ビルドに3時間ほど掛かりました。

buildディレクトリの容量は20GBほどになりました。X-Window系パッケージを含むcore-image-satoの場合は30GBほど必要です。

7 QEMUの起動

oe-init-build-envを実行した後、runqemuコマンドでQEMUを起動できます。

 

nographicオプションを使用することで、GUIウィンドウを使わずに起動することもできます(SSH環境で便利です)。

bootparamsオプションを使用することで、カーネルに渡すパラメータを設定することができます(本環境ではAPICの初期化で失敗してしまうのでnoapicを指定します)。

qemuparamsオプションを使用することで、QEMUに渡すオプションを指定することができます(GDBとの連携に使えます)。

$ runqemu qemux86 nographic bootparams="noapic"

Continuing with the following parameters:
KERNEL: [/home/hiroom2/poky/build/tmp/deploy/images/qemux86/bzImage-qemux86.bin]
ROOTFS: [/home/hiroom2/poky/build/tmp/deploy/images/qemux86/core-image-minimal-qemux86-20160527160149.rootfs.ext4]
FSTYPE: [ext4]
Acquiring lockfile for tap0...
Setting up tap interface under sudo
Acquiring lockfile for tap1...
-net nic,model=virtio -net tap,vlan=0,ifname=tap1,script=no,downscript=no -cpu qemu32 -drive file=/home/hiroom2/poky/build/tmp/deploy/images/qemux86/core-image-minimal-qemux86-20160527160149.rootfs.ext4,if=virtio,format=raw -show-cursor -usb -usbdevice tablet -vga vmware   -nographic  -m 256
Running qemu-system-i386...
/home/hiroom2/poky/build/tmp/sysroots/x86_64-linux/usr/bin/qemu-system-i386 -kernel /home/hiroom2/poky/build/tmp/deploy/images/qemux86/bzImage-qemux86.bin -net nic,model=virtio -net tap,vlan=0,ifname=tap1,script=no,downscript=no -cpu qemu32 -drive file=/home/hiroom2/poky/build/tmp/deploy/images/qemux86/core-image-minimal-qemux86-20160527160149.rootfs.ext4,if=virtio,format=raw -show-cursor -usb -usbdevice tablet -vga vmware -no-reboot -nographic -m 256 -serial mon:stdio -serial null -append "vga=0 uvesafb.mode_option=640x480-32 root=/dev/vda rw mem=256M ip=192.168.7.4::192.168.7.3:255.255.255.0 oprofile.timer=1 rootfstype=ext4 console=ttyS0 noapic"
Initializing cgroup subsys cpuset
Initializing cgroup subsys cpu
Initializing cgroup subsys cpuacct
Linux version 4.4.11-yocto-standard (hiroom2@centos-7) (gcc version 5.3.0 (GCC) ) #1 SMP PREEMPT Sat May 28 04:26:09 JST 2016
<snip>
Poky (Yocto Project Reference Distro) 2.1+snapshot-20160527 qemux86 /dev/ttyS0

qemux86 login: root
root@qemux86:~#