在 QEMU 中使用目录作为 initrd

在 QEMU 中使用目录作为 initrd

有没有办法在启动 QEMU 时使用目录作为 initrd?

我知道如何使用QEMU 的-kernel-initrd标志来启动内核和 initrd,而无需先创建包含这两个文件的可启动设备。现在我想知道是否有办法跳过使用cpio创建 initrd 文件的步骤。

通常,当对包含我的 initrd 的所有文件的目录进行更改时,我会通过运行来测试它们

(cd initrd ; find . | cpio --quiet -R 0:0 -o -H newc) | gzip >initrd.gz
qemu-system-i386 -kernel /boot/vmlinuz -initrd initrd.gz

我是否可以以某种方式实现相同的功能而无需在文件系统上创建 initrd 文件?

到目前为止我尝试了以下方法:

qemu-system-i386 -kernel /boot/vmlinuz -initrd initrd

导致内核启动但在尝试挂载根文件系统时出现崩溃。

qemu-system-i386 -kernel /boot/vmlinuz -initrd <(
   cd initrd ; find . | cpio --quiet -R 0:0 -o -H newc)

导致 QEMU 死亡:

qemu: error reading initrd /dev/fd/63: Illegal seek

答案1

我怀疑不是 - 据我从 QEMU 文档中得知,它不支持从 stdin 读取内核或 initrd,而这实际上是您尝试使用重定向执行的操作。我相信 Qemu 需要一个实际的文件描述符(基于 /dev/fd/63 错误),所以您可能运气不佳。您可以在 Qemu 邮件列表或 IRC 频道上询问,看看是否有任何特定的专业知识来完成您要做的事情,但我猜您每次都必须重建它。

相关内容