我正在尝试使路由器固件(二进制)在QEMU上运行(如果可能的话)。所有网络均设置良好,因为在运行此QEMU时,我使用debian_wheezy_mips_standard.qcow2测试了它。我以为它可能不是用户界面,因为它是路由器,但是对它应该位于的IP地址空间运行nmap时我没有任何响应。

我应该导入文件系统使用:

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。我希望能够访问端口,所以需要运行路由器固件/文件系统

任何人都可以帮忙吗?

评论

请参阅Qemu中的模拟juan DVR R7816(尤其是reverseengineering.stackexchange.com/a/11091/1562)。

在这种情况下,他使用的是为QEMU构建的内核,因此更像是reverseengineering.stackexchange.com/questions/4480/…。这是应该起作用的。 @ user15945,也许尝试将Earlyprintk添加到内核命令行?

“例如,我在路由器上运行了netcat。我希望能够访问端口,因此需要运行路由器固件/文件系统。”如果您需要能够远程登录到路由器,则只需它可以从任何计算机上获取。否则,您的问题就没有意义。

@VitalyOsipov当他想通过telnet连接到仿真路由器但无法让所述仿真路由器启动时,他的问题有什么意义?

为此,您的QEMU需要模拟路由器的以太网接口的硬件,并将该接口“连接”到主机的网络(!)。我以某种方式怀疑它正在这样做。我猜想,如果找不到路由器的物理硬件,内核甚至不会启动。

#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系统时,这一部分非常重要。否则您正在解释的症状就会发生。