linux:在 qemu 中运行自编译内核:VFS:无法在未知的 wn-block(0,0) 上挂载根 fs

标签 linux kernel qemu vfs panic

我试图让它运行起来,但不知道我做错了什么。我已经创建了一个 Debian.img(带有虚拟设备管理器的原始格式的磁盘 - 我猜是 libvirt 的 gui)并顺利安装了 debian。现在我想让它运行一个自编译的内核。我从我的工作(虚拟)debian 中复制了 .config 文件,并且根本没有做任何更改。这就是我所做的:

    qemu-system-x86_64 -m 1024M -kernel /path/to/bzImage -hda /var/lib/libvirt/images/Debian.img -append "root=/dev/sda1 console=ttyS0" -enable-kvm -nographic

但在启动期间我总是收到此错误消息。

    [    0.195285] Initializing network drop monitor service
    [    0.196177] List of all partitions:
    [    0.196641] No filesystem could mount root, tried: 
    [    0.197292] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
    [    0.198355] Pid: 1, comm: swapper/0 Not tainted 3.2.46 #7
    [    0.199055] Call Trace:
    [    0.199386]  [<ffffffff81318c30>] ? panic+0x95/0x19e
    [    0.200049]  [<ffffffff81680f7d>] ? mount_block_root+0x245/0x271
    [    0.200834]  [<ffffffff8168112f>] ? prepare_namespace+0x133/0x169
    [    0.201590]  [<ffffffff81680c94>] ? kernel_init+0x14c/0x151
    [    0.202273]  [<ffffffff81325a34>] ? kernel_thread_helper+0x4/0x10
    [    0.203022]  [<ffffffff81680b48>] ? start_kernel+0x3c1/0x3c1
    [    0.203716]  [<ffffffff81325a30>] ? gs_change+0x13/0x13

我做错了什么?请有人帮忙。我需要传递 -initrd 选项吗?我已经试过了,但还没有成功。

最佳答案

我自己想出来的。一段时间过去了,但我记得解决方案是提供一个初始 ramdisk。这就是我使用硬件加速的方式。

编译

make defconfig

CONFIG_EXT4_FS=y
CONFIG_IA32_EMULATION=y
CONFIG_VIRTIO_PCI=y (Virtualization -> PCI driver for virtio devices)
CONFIG_VIRTIO_BALLOON=y (Virtualization -> Virtio balloon driver)
CONFIG_VIRTIO_BLK=y (Device Drivers -> Block -> Virtio block driver)
CONFIG_VIRTIO_NET=y (Device Drivers -> Network device support -> Virtio network driver)
CONFIG_VIRTIO=y (automatically selected)
CONFIG_VIRTIO_RING=y (automatically selected)

---> 见http://www.linux-kvm.org/page/Virtio

在配置中启用paravirt

禁用 HOST 上的 NMI 看门狗以在 GUEST 上使用性能计数器。您可以忽略这一点。

cat /proc/sys/kernel/nmi_watchdog

---> 见http://kvm.et.redhat.com/page/Guest_PMU

在Qemu中启动

sudo qemu-system-x86_64 -m 1024M -hda /var/lib/libvirt/images/DEbian.img -enable-kvm -initrd /home/username/compiled_kernel/initrd.img-3.2.46 -kernel /home/username/compiled_kernel/bzImage -append "root=/dev/sda1 console=ttyS0" -nographic -redir tcp:2222::22 -cpu host -smp cores=2

在KVM中启动

内核路径:/home/用户名/compiled_kernel/bzImage
initrd路径:/home/username/compiled_kernel/initrd.img-3.2.46
内核参数:root=/dev/sda1

希望这对遇到同样问题的人有所帮助。

关于linux:在 qemu 中运行自编译内核:VFS:无法在未知的 wn-block(0,0) 上挂载根 fs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17242403/

相关文章:

c - bash : ./comp.out:权限被拒绝

linux - 显示命令的特定列

linux - 关于服务器上多个 JVM 的最佳实践是什么?

c - 为启动时运行的 linux 内核添加代码

android - 如何从 Linux 内核中找到处理核心的频率和利用率?

linux - Qemu 中的 guest 操作系统在 irq4 上生成过多中断

linux - 为 "echo"输出创建时间戳到文件

windows - 每次创建驱动程序句柄时都会出现蓝屏

linux - 运行Qemu后只是黑屏

Android 模拟器 (qemu) 不允许某些 tcp 连接(RST,ACK 作为对 SYN 的回答)