9

我试图让它运行,但不知道我做错了什么。我已经创建了一个 Debian.img(带有虚拟设备管理器的原始格式的磁盘 - 我猜是 gui 到 libvirt)并且安装了 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 选项吗?我已经尝试过了,但还没有运气。

4

5 回答 5

7

我自己想通了。一段时间过去了,但我记得解决方案是提供一个初始 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/username/compiled_kernel/bzImage
初始化路径:/home/username/compiled_kernel/initrd.img-3.2.46
内核参数:root=/dev/sda1

如果有人遇到同样的问题,希望这会有所帮助。

于 2014-11-12T15:05:24.370 回答
1

可能你的系统镜像文件坏了,无法挂载。您可以尝试使用这些命令来挂载映像文件并检查它是否是适用于 linux 的有效根文件系统。

losetup /dev/loop0 /var/lib/libvirt/images/Debian.img
kpartx -av /dev/loop0
mount /dev/mapper/loop0p1 /mnt/tmp
于 2013-10-30T02:45:27.517 回答
1

这适用于 QEMU 案例上的 AArch64 (arm64)。

我正在关注这个很好的教程:https ://ibug.io/blog/2019/04/os-lab-1/

就我而言,我遇到了以下错误消息:

---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0) ]---

mknod dev/ram b 1 0在initrd中做了。

后来我注意到该行上方有一条错误消息,暗示内核不支持 ram 磁盘。所以我编辑.config并设置了这些项目:

CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=131072 (= 128MB, the number is in unit of 1014B)

然后问题就消失了!initrd 安装在 /dev/ram 上,第一个 init 进程运行良好。

事实证明make defconfig,默认情况下运行并没有为我设置这些值。

于 2021-02-22T01:11:47.463 回答
0

最有可能的是内核不知道要从哪个正确设备引导。
您可以从 qemu 命令行显式提供它。因此,如果根在分区 2 上,您可以说:

qemu -kernel /path/to/bzImage \
     -append root=/dev/sda2 \
     -hda /path/to/hda.img \
     .
     .
     .

请注意,即使磁盘是 IDE,我也使用/dev/sda2 。现在甚至虚拟机似乎也使用 SATA。

其他可能性是,正如@Houcheng 所说,您的根 FS 已损坏,或者内核没有内置特定的 FS 类型。但我认为如果是这种情况,您会得到不同的错误。

于 2014-11-01T07:05:52.320 回答
0

QEMU 版本

QEMU emulator version 2.5.0 (Debian 1:2.5+dfsg-5ubuntu10.11), Copyright (c) 2003-2008 Fabrice Bellard

运行 build-root 4.9.6 并传递以下参数

qemu-system-x86_64 -kernel output/images/bzImage -hda output/images/rootfs.qcow2 -boot c -m 128 -append root=/dev/sda -localtime -no-reboot -name rtlinux -net nic -net user -redir tcp:2222::22 -redir tcp:3333::3333

只接受 /dev/sda 作为 root fs 挂载的选项(一旦它启动并挂起并出现以下错误,它将向您显示 root fs 选项的一点提示):

VFS: Cannot open root device "hda" or unknown-block(0,0): error -6
Please append a correct "root=" boot option; here are the available partitions:
0800 61440 sda driver: sd
于 2017-05-10T08:53:04.610 回答