3

我已经从树中编译了 linux 内核(稳定)并得到了 initrd 和 bzImage。我尝试在 qemu 模拟器上运行它,但我无法指定根文件系统分区。(我知道这是加载运行 initrd 的分区)。

我的系统是通过 Wubi 在 Windows 上安装的 Ubuntu 12.04。

我一直在使用的命令是

qemu-system-x86_64 -kernel bzImage  -initrd initrd.img-3.11 -append "root=/no-clue-what-to-put"

我知道 root 是指定根分区在哪里的参数。让这个图像在 qemu 上运行的任何帮助将不胜感激。

4

2 回答 2

2

这里缺少的组件是要传递的内核参数,当您使用 -initrd 即 initialramdisk 时,您需要传递 rdinit=/(your-app-executable)

你可以通过rdinit=/sbin/initrdinit=/bin/sh 试试这个

qemu-system-x86_64 -kernel bzImage -initrd initrd.img-3.11 -append "root=/dev/ram rdinit=/sbin/init"

于 2013-08-26T12:03:54.390 回答
2

你真的一个磁盘映像和根文件系统来提供给 qemu 和你的内核吗?

启动 linux 系统需要的不仅仅是 linux 内核。对于 qemu,您还需要一个包含在虚拟磁盘映像中的根文件系统。这将包含内核在完成引导时“手动控制”的程序,通常是“init”或“systemd”。

所以你必须生成一个包含根文件系统的 qemu-disk 映像。如果您创建它时根文件系统位于虚拟磁盘的第一个分区,那么您可以将虚拟磁盘指定为 qemu 的参数-hda /path/to/qemu/disk/image,并且您可以告诉内核使用该虚拟磁盘的第一个分区-append "root=/dev/sda1"(它也可能是/dev/vda1/dev/hda1取决于您创建的磁盘映像类型)。

所以你的最终命令看起来像:

qemu-system-x86_64 -kernel bzImage -initrd initrd.img-3.11 -hda /path/to/your/qemu/disk/image -append "root=/dev/sda1"
于 2017-03-08T19:06:44.437 回答