CentOS 7: buildrootをビルドする

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

 

1 buildrootのソースコード取得

ここでは2016年2月にリリースされたものを利用します。

$ wget https://buildroot.org/downloads/buildroot-2016.02.tar.bz2

リポジトリのものを使うには以下のとおりです。

$ git clone https://git.busybox.net/buildroot/

2 buildrootのビルド

qemu-system-i386で利用可能なデフォルト設定ファイルのqemu_x86_defconfigを使用します。

QEMUのnographicオプションの為に、コンソールの出力先をtty1(Ctrl-Alt-F1で表示される画面)からttyS0(シリアル)に変更します。

$ tar jxf buildroot-2016.02.tar.bz2
$ cd buildroot-2016.02/
$ make qemu_x86_defconfig
$ sed -i -e 's/BR2_TARGET_GENERIC_GETTY_PORT="tty1"/BR2_TARGET_GENERIC_GETTY_PORT="ttyS0"/g' .config
$ make

本環境ではビルドに30分ほど掛かりました。ビルド生成物を含むbuildroot-2016.02の容量は3.3GBほどです。

3 QEMUの起動

EPELリポジトリにあるqemu-system-x86パッケージをインストールします。

$ sudo yum install -y epel-release
$ sudo yum update
$ sudo yum install -y qemu-system-x86

out/images配下にカーネルイメージのbzImageとルートファイルシステムイメージのrootfs.ext2が生成されます。

EPELのqemu-system-i386だとAPICの初期化が上手くいかないようなので、カーネル起動パラメータにnoapicを加えます。

$ qemu-system-i386 --kernel output/images/bzImage --hda \
output/images/rootfs.ext2 --nographic --append \
"console=ttyS0 root=/dev/sda noapic"
Linux version 4.4.1 (hiroom2@centos-7) (gcc version 4.9.3 (Buildroot
2016.02) ) #1 SMP Fri May 27 17:07:40 JST 2016
x86/fpu: Legacy x87 FPU detected.
x86/fpu: Using 'lazy' FPU context switches.
e820: BIOS-provided physical RAM map:
<snip>
Welcome to Buildroot
buildroot login: root
#