###1. 使用qemu引导linux
现在, 我们已经有了已经build好了的kernel, 和基于ramdisk的根文件系统(存储了busybox在其中), 现在, 可以使用qemu引导一个使用内存盘的linux系统了
###2. 方法一
cp linux-src/linux-linux-3.10.40/arch/x86_64/boot/bzImage .
qemu-system-x86_64 -kernel bzImage -initrd initrd.img -append "root=/dev/ram0 rw ramdisk_size=30720 init=/bin/sh"
其中, 参数的意义如下
-kernel 指定了内核镜象
-initrd 指定了启动内核时的initrd
-append 指定了linux内核的启动参数,
root 指定根文件系统所在的设备, 这里我们将ramdisk作为最终的根文件系统, 因此指定“/dev/ram0”
rw 指定以rw的方式挂载根文件系统
ramdisk_size 因为ramdisk的默认大小为4M, 而我们制作的根文件系统大小为30M,因此需要用“ramdisk_size”来指定ramdisk的大小,
init 指定init程序
执行命令后, 会弹出一个新的窗口, kernel起来后, 你会获得一个交互式的终端, 当鼠标被该新窗口捕获后,可以使用 alt + ctrl 键来释放它。
或者你可以 运行qemu时,加上 -curses 参数,在当前终端里面以字符模式引导linux
是的, 这种方式是以ramdisk来存放根文件系统来引导内核的, 在qemu上, 还可以使用硬盘来存放根文件系统来引导kernel, 见方法二
###3. 方法二
qemu-system-x86_64 -kernel bzImage -hda rootfs.img -append "root=/dev/sda rw init=/bin/sh"
其中参数的意义
-kernel 指定内核镜像
-hda 指定第一块硬盘, 使用根文件系统镜像模拟硬盘
-append 指定linux内核的启动参数
root 指定根文件系统, 放置在第一块硬盘上
rw 以rw的方式挂载根文件系统
init 指定init程序
###4. 两种方法的差别
这两种方式还是有很大的区别的, linux系统的常见的启动过程是这样的
1.kernel启动
|
2.挂载ramdisk作为根文件系统(临时的)
|
3.挂载外存上的根文件系统
方法一去掉了第3步, 将ramdisk上的文件系统作为最终的根文件系统, 在该文件系统上的读写操作才断电后是会丢失的
方法二去掉了第2步, 直接挂载外存上的根文件系统, 在该文件系统上的读写操作才断电后是不会丢失的