有没有办法在启动 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 频道上询问,看看是否有任何特定的专业知识来完成您要做的事情,但我猜您每次都必须重建它。