在 QEMU 中使用目录作为 initrd

kas*_*erd 7 linux 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
Run Code Online (Sandbox Code Playgroud)

我可以以某种方式实现相同的功能而不必在文件系统上创建 initrd 文件吗?

到目前为止我尝试的是以下内容:

qemu-system-i386 -kernel /boot/vmlinuz -initrd initrd
Run Code Online (Sandbox Code Playgroud)

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

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

导致 QEMU 死亡:

qemu: error reading initrd /dev/fd/63: Illegal seek
Run Code Online (Sandbox Code Playgroud)

Vir*_*ick 0

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