Linux kernel 用Qemu进行内核仿真

Linux kernel 用Qemu进行内核仿真,linux-kernel,virtualization,qemu,busybox,Linux Kernel,Virtualization,Qemu,Busybox,实际上,我正在尝试使用Qemu和busybox模拟linux内核。 到目前为止,我制作了以下内核映像: 并使用以下参数启动Qemu: qemu-system-x86_64-m 256-s-hda rootfs.img-kernel linux-2.6.34.12/arch/x86/boot/bzImage-append“root=/dev/sda\init=/bin/sh” 但一旦启动内核,我会收到一条消息,说: 内核恐慌。没有找到init。尝试将init=选项传递给内核。。。 我认为在参数中添

实际上,我正在尝试使用Qemu和busybox模拟linux内核。 到目前为止,我制作了以下内核映像: 并使用以下参数启动Qemu: qemu-system-x86_64-m 256-s-hda rootfs.img-kernel linux-2.6.34.12/arch/x86/boot/bzImage-append“root=/dev/sda\init=/bin/sh” 但一旦启动内核,我会收到一条消息,说: 内核恐慌。没有找到init。尝试将init=选项传递给内核。。。
我认为在参数中添加“init=/bin/sh”可以解决问题,但事实并非如此。我是这个领域的乞丐。有人能帮我吗?谢谢

使用Busybox时,您希望将-initrd initramfs而不是init=/bin/sh传递给qemu。试试这个

qemu-system-x86_64 -m 256 -s -hda rootfs.img -kernel linux-2.6.34.12/arch/x86/boot/bzImage -initrd initramfs -append "root=/dev/sda"

我最终通过使用busybox的预构建版本实现了它的工作,该版本是静态链接的(可在网站上找到)。旧的是动态链接的,将其编译为静态可执行文件是一件非常痛苦的事情(glibc似乎不再支持静态链接)。

initramfs是启动时加载到内存中的初始ram磁盘。您可以看到如何使用busybox创建它。如果可用,您可以使用它来创建initramfs文件。