如何在 qemu 上模拟固件映像

问题描述

我有一个固件映像。在使用 binwalk 命令时,我知道它是一个 cramfs 文件系统。我已经使用 binwalk 提取文件系统。我如何找出这个文件系统的架构(例如 arm、x86、mips...),以便我可以在 QEMU 上模拟它?

解决方法

如果您已经设法提取文件系统内容,您应该能够使用 Linux fileobjdump 命令来确定可执行文件是针对何种架构编译的。

但是,请注意,“CPU 架构匹配”不足以在 QEMU 上模拟完整的固件映像(即包括启动代码和内核)。您需要知道固件运行的确切硬件,因为它期望在具有特定硬件地址和特定功能的设备(串行端口、定时器、中断控制器等)的系统上运行。除非 QEMU 模型与这些匹配,否则即使 CPU 类型匹配,固件也不会启动很远。而且 QEMU 可能没有任何特定嵌入式设备的模型。

您也许可以使用为 QEMU 支持的机器类型构建的内核在 QEMU 上运行用户空间文件系统,但这只会在用户空间程序实际上并不关心它们在什么硬件上运行的情况下起作用,因此取决于您要实现的目标,它可能有帮助,也可能无济于事。