我应该导入文件系统使用:
sudo qemu-system-mips -M malta -kernel vmlinux-3.2.0-4-4kc-malta -hda MYROUTERBINARY.bin
-append "root=/dev/sda1 console=ttyS0"-nographic
例如,我在路由器上运行了netcat。我希望能够访问端口,所以需要运行路由器固件/文件系统
任何人都可以帮忙吗?
#1 楼
大多数基于MIPS / ARM的路由器都有一个ROM引导加载程序,该引导加载程序在设备开机时运行。该引导加载程序通常可以通过串行端口访问,但是某些平台(例如AR7)做的事情很奇怪,例如有FTP服务器运行(您可以通过它来刷新固件)。此引导加载程序将加载内核映像。然后从NAND设备的分区中初始化文件,然后运行它。除了拥有内核的分区以外,还有更多的分区,您将拥有一个可能包含initrd或rootfs的分区,以及一个充当“ NVRAM”或保留设置的分区。一个人甚至可以握住引导加载程序本身。
一旦Linux运行,通过写入
bin
设备就可以进行固件升级。设备上的Flash分区是内核和initrd,并使用QEMU的/dev/mmcbllkpX
和-kernel
选项来加载它们。这是您将要遇到的严重问题的地方。大多数路由器只有一个“分区”的NAND设备,Linux内核将它们重新创建为-initrd
,/dev/mmcblkp0
等。要尝试重新创建设备的原始环境,您确实需要将完整的NAND转储并分区在芯片上。 br /> 还有一个问题,如果路由器不是基于Linux的,则只能与路由器中的特定硬件设备一起使用。
#2 楼
您可能需要先解压缩bin文件(使用binwalk之类的工具)。我认为您不能仅将.bin引用为hda。通常,解压缩.bin文件后,将获得设备的文件系统。您有几个不同的分区,因为某些路由器制造商会创建跨多个模型共享的主文件系统,然后创建较小的模块以加载到特定于模型的设备中。如果您查看根fs的初始化,您应该能够看到.bin中的其他分区如何移动并模仿它。就我个人而言,我从未尝试过模拟完整的设备,我发现能够解压缩.bin并将其扩展到wheezy_mips hda并尝试运行路由器的一部分具有更多价值。通过他们自己。另外,我认为您将遇到网络问题。模拟wheezy_mips hda很简单,请记住,.bin是要在具有多个网络接口的环境中加载的,
-祝您好运。
#3 楼
sudo qemu-system-mips -M马耳他-内核vmlinux-3.2.0-4-4kc-malta -hda MYROUTERBINARY.bin-附加“ root = / dev / sda1 console = ttyS0” -nographic
您将使用bin文件的设备是否具有分区?
我将作为最终声明添加--no-acpi。应该做的。当您运行qemu系统时,这一部分非常重要。否则您正在解释的症状就会发生。
评论
请参阅Qemu中的模拟juan DVR R7816(尤其是reverseengineering.stackexchange.com/a/11091/1562)。在这种情况下,他使用的是为QEMU构建的内核,因此更像是reverseengineering.stackexchange.com/questions/4480/…。这是应该起作用的。 @ user15945,也许尝试将Earlyprintk添加到内核命令行?
“例如,我在路由器上运行了netcat。我希望能够访问端口,因此需要运行路由器固件/文件系统。”如果您需要能够远程登录到路由器,则只需它可以从任何计算机上获取。否则,您的问题就没有意义。
@VitalyOsipov当他想通过telnet连接到仿真路由器但无法让所述仿真路由器启动时,他的问题有什么意义?
为此,您的QEMU需要模拟路由器的以太网接口的硬件,并将该接口“连接”到主机的网络(!)。我以某种方式怀疑它正在这样做。我猜想,如果找不到路由器的物理硬件,内核甚至不会启动。