コンパクトなKernel を Build して qemu で動かすことを目標にします。
下記のサイトに記載の内容を実施してみた結果です。
利用した環境は以下の通りです。
・ホストOS:Windows 10 Pro
・Linux 環境:WSL(Ubuntu 18.04.3 LTS)
・Build する Linux の Kernelのバージョン:linux-5.3.12
・QEMU emulator version 2.11.1(Debian 1:2.11+dfsg-1ubuntu7.20)
Kernel のBuildに必要な環境は整っている前提です。
・qemuをインストール
$ sudo apt-get install qemu
・その他
$ sudo apt-get install libncursesw5-dev
$ sudo apt-get install ncurses-doc
$ sudo apt-get install bison
$ sudo apt-get install dctrl-tools
$ sudo apt-get install flex
$ sudo apt install libelf-dev
$ sudo apt install libssl-dev
$ sudo apt install libcurl4-openssl-dev
$ sudo apt install libssl-dev
$ sudo apt install openssl
その他、必要な環境は下記を参考にする。
https://mongonta.com/f258-howto-build-linux-kernel/
ソースを配置するディレクトリを作成し、ソースをダウンロードする。
$ mkdir linux53
$ cd linux53
$ wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.3.12.tar.xz
$ xzcat linux-5.3.12.tar.xz | tar xfv -
下記のサイトを参考にしました。
「Linux を(わりと)シンプルな構成でビルドして Qemu で起動する」
記事では4系のカーネルですが、今回は5系で実施しました。
Kernelのコンフィグは、ほぼ、リンクの記事の通りです。
正しく動作すると下記のようになりました。
------------------------------------------------------------------------------
省略
random: get_random_bytes called from 0xffffffff8102df5f with crng_init=0
sched_clock: Marking stable (404304716, 86088419)->(493789505, -3396370)
input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0
Freeing unused kernel image memory: 480K
Write protecting the kernel read-only data: 8192k
Freeing unused kernel image memory: 2036K
Freeing unused kernel image memory: 1828K
Run /init as init process
-----------HELLO------------
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000000
Kernel Offset: disabled
---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000000 ]---
------------------------------------------------------------------------------
以下の記事の「BusyBoxでユーザーランドを作る」から先を進める。
「ビルドしたLinuxカーネルをブートできる最低限の環境を用意する(with Busybox & qemu)」
BusyBoxのビルドは下記のサイトを参考にしました。
qemuで実行する際に、下記のコマンドとする。
$ qemu-system-x86_64 -kernel ./bzImage -initrd ./rootfs.img -append "console=ttyS0 rdinit=/bin/sh" -nographic
起動すると下記のようになりました。
------------------------------------------------------------------------------
random: get_random_bytes called from 0xffffffff8102df5f with crng_init=0
sched_clock: Marking stable (416703671, 81781460)->(499244844, -759713)
input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0
Freeing unused kernel image memory: 480K
Write protecting the kernel read-only data: 8192k
Freeing unused kernel image memory: 2036K
Freeing unused kernel image memory: 1828K
Run /bin/sh as init process
/bin/sh: can't access tty; job control turned off
/ # input: ImExPS/2 Generic Explorer Mouse as /devices/platform/i8042/serio1/input/input2
clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x33e494b9d3a, max_idle_ns: 440795255743 ns
clocksource: Switched to clocksource tsc
/ #
/ # ls
bin dev linuxrc root sbin usrrandom: fast init done
------------------------------------------------------------------------------