一直对 Linux 的启动很感兴趣,但对 initrd 和 initramfs 等概念不大了解,于是上网找了资料,自己成功地看到了现象。

参考资料: Build and boot a minimal Linux system with qemu Custom Initramfs initramfs vs initrd ramfs, rootfs and initramfs The Kernel Newbie Corner: “initrd” and “initramfs”– What’s Up With That?

具体步骤:

$ cat hello.c
#include <stdio.h>
#include <unistd.h>

int main() {
    for (;;) {
        printf("Hello, world!\n");
    }
}
$ gcc -static hello.c -o init
$ echo init | cpio -o -H newc | gzip > initrd
$ qemu-system-x86_64 -kernel /boot/vmlinuz-linux -initrd initrd -nographic -append 'console=ttyS0'
# Use C-a c q u i t <Enter> to exit

可以看到过一会(三四秒?),可以看到满屏的 Hello world 在输出。