我从 Debian 源构建的内核看不到 QEMU /dev/vda,尽管相同的设置适用于预构建的 Debian 内核

我从 Debian 源构建的内核看不到 QEMU /dev/vda,尽管相同的设置适用于预构建的 Debian 内核

我正在尝试为 ARM 交叉编译 Debian 系统。我有一个可用的交叉编译器设置,并且可以在安装在 QEMU 中的 Debian 系统下运行程序。我正在使用虚拟磁盘(qcow2 格式)以及单独的内核和 initramfs 映像(在主机上),我将它们作为命令行选项提供给 QEMU。

当我使用预编译的 Debian 内核启动时,一切正常,系统从 /dev/vda* 的 /dev/vda1 分区启动,我猜测这是 QEMU 从 qcow2 磁盘映像创建的虚拟磁盘设备。

然而,当我获取 Debian 内核源代码(在来宾系统中下载,以确保我获得该系统和 Debian 版本的正确源代码,然后复制到主机),并在我的主机系统上交叉编译它们时,生成的内核仅启动至于 initramfs 中的 busybox。此时,它无法找到根设备,因为不存在 /dev/vda* 设备。 (也没有任何 /dev/sd*、/dev/hd* 等设备。)

我的内核缺少什么导致根本看不到 QEMU 虚拟磁盘设备? (QEMU 被赋予了完全相同的命令行;唯一的区别是哪个内核映像文件名。)我在构建内核时是否配置错误? (对于默认设置,我实际上是从客户系统的 /boot 文件夹中获取的 Debian 内核配置文件开始的。)

Debian 版本(来宾)是 8.11 (jessie)。 Linux 内核版本为 3.16.0.6-armmp-lpae。

我的 QEMU 命令行如下所示:

qemu-system-arm -M virt -m 1024 -kernel <the kernel image file> -initrd initrd.img-3.16.0-6-armmp-lpae -append 'root=/dev/vda2' -drive if=none,file=hda.qcow2,format=qcow2,id=hd -device virtio-blk-device,drive=hd -netdev user,id=mynet -device virtio-net-device,netdev=mynet -nographic

答案1

您可能至少需要以下内核配置:

CONFIG_BLOCK=y
CONFIG_BLK_DEV=y
CONFIG_DEVTMPFS=y
CONFIG_VIRTIO_MENU=y
CONFIG_VIRTIO_BLK=y

然后挂载devtmpfs/dev你的 initrd 中,你应该会得到一个/dev/vda.

CONFIG_VIRTIO_MENU如果您使用tinyconfig,显然是必需的,即使它默认处于打开状态。

相关内容