在QEMU中运行bzImage:无法在未知块(0.0)上安装根fs


8

我通过make menuconfig和编译内核make。我正在尝试通过在qemu中运行bzImage来执行此操作,qemu -kernel bzImage但无法解决错误消息:

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

Linux内核错误

我该如何解决?如何在qemu中运行bzImage?


5
内核启动正常,但找不到根文件系统。您已在VM中安装了哪些磁盘?根文件系统是哪种文件系统类型,磁盘类型是什么?是否已在内核中编译了所有必需的驱动程序(忘记其中一个驱动程序是一个常见错误)?
吉尔斯(Gilles)“所以

@Gilles我没有挂载文件系统。编译后,我直接进入bzImage所在的文件(../arch/x86/boot),然后执行命令“ qemu -kernel bzImage”。多数民众赞成在我遇到错误时。
Coder404 2012年

Answers:


11

它确实解决了。内核启动正常。错误是:

无法在未知块(0.0)上安装根fs

内核正在寻找根文件系统。您需要提供一个。您必须在某个内核上运行进程才能与它进行交互,并且初始进程必须从某个地方加载:当内核启动时,它将在目录上挂载一个文件系统(根文件系统)/,然后运行该程序/sbin/init。初始化程序通常负责运行启动脚本和启动服务,包括允许用户登录的程序。

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

Linux提供了另一种可能性,即在启动过程中将一个初始文件系统加载到RAM中,以查找并安装根文件系统。该初始文件系统可以包含处理根文件系统的设备和文件系统类型的模块。有两种略有不同的机制:initrd和initramfs。


感谢您的回答!我可以创建一个虚拟文件系统来启动吗?如果是这样,我将如何去做?
Coder404

@ Coder404您的意思是要用作根文件系统的虚拟文件系统?使它成为ram驱动器。
吉尔(Gilles)'所以

我确实想将虚拟文件系统用作我在QEMU中构建的内核的根文件系统。我将如何制作虚拟文件系统?
Coder404

1

即使文件系统将单独由内核编译,也必须创建一个初始文件系统,该文件系统将存在于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-内核bzImage -initrd initrd.img-2.6.32.59 -m 512M

-initrd表示初始的ram文件系统

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.