initrd 至少在 arm 和 x86 上似乎没有实现,因为 gem5 必须知道如何加载它并通知内核它的位置,并且 greppinginitrd
只显示一些 ARM 命中:
src/arch/arm/linux/atag.hh
但他们被注释掉了。
现在似乎可以通过 DTBchosen
节点linux,initrd-start
和linux,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