构建简易的 initramfs¶
一直对 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 在输出。