在 QEMU 中运行 bzImage:无法在未知块(0.0)上挂载根文件系统

在 QEMU 中运行 bzImage:无法在未知块(0.0)上挂载根文件系统

make menuconfig我通过执行和编译了内核make。我试图在 qemu 中运行 bzImage,qemu -kernel bzImage但没有成功,并出现错误消息:

Unable to mount root fs on unknown-block(0.0)

Linux 内核错误

我该如何修复它?如何在 qemu 中运行 bzImage?

答案1

它确实成功了。内核启动正常。错误是:

无法在未知块(0.0)上挂载根文件系统

内核正在寻找根文件系统。您需要提供一份。如果不在内核上运行进程,则无法与内核交互,并且必须从某个地方加载初始进程:当内核启动时,它会在目录上安装文件系统(根文件系统)/,然后运行程序/sbin/init。 init 程序通常负责运行引导脚本和启动服务,包括让用户登录的程序。

您必须确保内核能够挂载根文件系统。它必须具有文件系统类型和块设备中涉及的所有层(磁盘控制器(SCSI/SATA/IDE/USB/…适配器)、分区类型等)的驱动程序。

Linux 提供了另一种可能性,即在引导过程中使用的 RAM 中加载初始文件系统,以便定位和挂载根文件系统。该初始文件系统可以包含处理根文件系统的设备和文件系统类型的模块。有两种略有不同的机制:初始化程序和 initramfs。

答案2

尽管文件系统将单独编译内核,但仍必须创建一个初始文件系统,该文件系统将存在于 RAM 中以运行内核。为了创建这个初始 ram 文件系统,使用了 mkinitrd。在 ubuntu 中使用 mkinitramfs 代替

cd ~/linux/linux-2.6.32.59/arch/i386/boot

mkinitramfs -o initrd.img-2.6.32.59

之后在 qemu 上运行内核

qemu-system-i386-kernel bzImage-initrd initrd.img-2.6.32.59-m 512M

-initrd 代表初始 ram 文件系统

你可以在/boot/initramfs-linux.img下找到ra​​m文件系统

相关内容