2013-08-26 71 views
3

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

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

我一直在使用的命令是

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

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

+0

尝试put root =/dev/ram –

+0

这不起作用/ dev/ram实际上不是分区离子,因此找不到它 – maverick

+0

它将允许您使用ram作为根分区。在你的系统上你没有它,但是它在内核配置上有所不同。 –

回答

1

你确实磁盘映像和根文件系统给予QEMU和内核?

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

因此,您必须生成一个包含根文件系统的qemu磁盘映像。如果您创建了它,以便根文件系统位于虚拟磁盘的第一个分区上,则可以使用“-hda/path/to/qemu/disk/image”将虚拟磁盘指定为qemu的参数,并且您可以告诉内核使用“-append”root =/dev/sda1“来使用该虚拟磁盘的第一个分区(它也可以是/ dev/vda1或/ dev/hda1,具体取决于您创建的磁盘映像类型)

因此,最终的命令看起来像:

QEMU系统-x86_64的-kernel的bzImage -initrd的initrd.img 3.11 -hda /路径/到/你/ QEMU /磁盘/图像-append“根=/dev/sda1“

2

这里缺少的组件内核参数传递, 当您使用-initrd即initialramdisk你需要传递rdinit = /(你的应用程序内可执行的)

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

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

+0

我认为这应该是一个评论而不是答案。 – Dariusz

+0

这不提供问题的答案。要批评或要求作者澄清,请在其帖子下方留言。 – Dariusz

+0

@Dariusz感谢您的建议 –

相关问题