我试着让它运转起来,不知道我做错了什么。我已经创建了一个Debian.img(原始格式的磁盘,带有虚拟设备管理器 - 我认为是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选项吗?我已经试过了,但还没有运气。
答案 0 :(得分:3)
我自己想通了。一段时间过去了,但我记得解决方案是提供一个初始的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)
---&GT;见http://www.linux-kvm.org/page/Virtio
在HOST上禁用NMI监视程序以在GUEST上使用性能计数器。你可以忽略这一点。
cat /proc/sys/kernel/nmi_watchdog
---&GT;见http://kvm.et.redhat.com/page/Guest_PMU
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
Kernal路径:/ home / username / compiled_kernel / bzImage
Initrd路径:/home/username/compiled_kernel/initrd.img-3.2.46
内核参数:root = / dev / sda1
希望如果有人遇到同样的问题,这会有所帮助。
答案 1 :(得分:1)
也许您的系统映像文件很糟糕,无法安装。 您可以尝试使用这些命令来挂载映像文件并检查它是否是适用于linux的有效根文件系统。
losetup /dev/loop0 /var/lib/libvirt/images/Debian.img
kpartx -av /dev/loop0
mount /dev/mapper/loop0p1 /mnt/tmp
答案 2 :(得分: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) ]---
我在 initrd 中做了 mknod dev/ram b 1 0
。
后来我注意到在该行上方有一条错误消息,暗示内核不支持 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
并没有为我设置默认值。
答案 3 :(得分:0)
最可能的事情是内核不知道要启动的正确设备 您可以从qemu命令行显式提供。因此,如果根位于分区2上,您可以说:
qemu -kernel /path/to/bzImage \
-append root=/dev/sda2 \
-hda /path/to/hda.img \
.
.
.
注意我使用 / dev / sda2 ,即使磁盘是IDE。甚至虚拟机现在似乎也在使用SATA。
其他可能性是,如@Houcheng所说,你的根FS已损坏,或者内核没有内置的特定FS类型。但我认为如果是这种情况你会得到一个不同的错误。< / p>
答案 4 :(得分: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