0

使用 QEMU,我既可以使用-initrd '${images_dir}/rootfs.cpioinitrd,也可以将 initramfs 映像直接传递给-kernel Image.

但是,如果我initramfs用 gem5 尝试图像,fs.py --kernel Image它会失败:

fatal: Could not load kernel file

使用 QEMU 能够使用的完全相同的 initramfs 内核映像。

而且我看不到-initrd.

我开始工作的唯一方法是将ext2磁盘映像--disk-image与 raw一起传递给vmlinux.

https://www.mail-archive.com/gem5-users@gem5.org/msg15198.html

4

1 回答 1

0

initrd 至少在 arm 和 x86 上似乎没有实现,因为 gem5 必须知道如何加载它并通知内核它的位置,并且 greppinginitrd只显示一些 ARM 命中:

src/arch/arm/linux/atag.hh

但他们被注释掉了。

现在似乎可以通过 DTBchosen节点linux,initrd-startlinux,initrd-end属性将 initrd 与内核通信,因此它可能很容易实现:https ://www.kernel.org/doc/Documentation/devicetree/bindings/chosen.txt (和gem5现有的DTB自动生成)+重用基础设施将任意字节加载到内存位置:除了主ELF可执行文件外,如何从命令行预加载gem5中给定原始字节的内存?

Initramfs 不起作用,因为 gem5 只能从原始 ELF 文件 vmlinux 启动,并且 initramfs 映像只能通过内核构建附加到更最终的映像类型,例如 QEMU 可以用来启动的 Image 或 bzImage,另请参阅:https://unix.stackexchange.com/questions/5518/what-is-the-difference-between-the-following-kernel-makefile-terms-vmlinux-vml/482978#482978

编辑:在提到的补丁之后不再需要以下内容:如何使用 gem5 fs.py 在模拟中附加多个磁盘映像?为了做这个测试,我还必须传递一个从 gem5 7fa4c946386e7207ad5859e8ade0bbfc14000d91 开始的虚拟磁盘映像,因为脚本不能很好地处理丢失的问题--disk-image,你可以转储一些随机的 512 字节并使用它们:

dd if=/dev/zero of=dummy.iso bs=512 count=1
于 2019-01-21T15:51:56.710 回答