我正在使用266MHz的ARM9处理器,支持fpu和32MB RAM,我在其上运行linux.I想在pc上模拟它(我的电脑上有linux和windows availabe)。我想分析我的循环计数,直接在模拟器中运行我的交叉编译的可执行文件。是否有任何开源项目可用于轻松创建模拟器,我需要编写多少变更/代码/工作才能创建自定义模拟器?如果你向我提供教程或其他参考资料以获得启动,那将是非常棒的。如何制作ARM9自定义设备模拟器?
感谢&问候,
阳光。
我正在使用266MHz的ARM9处理器,支持fpu和32MB RAM,我在其上运行linux.I想在pc上模拟它(我的电脑上有linux和windows availabe)。我想分析我的循环计数,直接在模拟器中运行我的交叉编译的可执行文件。是否有任何开源项目可用于轻松创建模拟器,我需要编写多少变更/代码/工作才能创建自定义模拟器?如果你向我提供教程或其他参考资料以获得启动,那将是非常棒的。如何制作ARM9自定义设备模拟器?
感谢&问候,
阳光。
你应该给看看QEMU。 但我不明白,为什么你需要一个完整的模拟器?
您可以在没有模拟器的情况下进行大量的分析。拥有系统仿真器会带来什么收益?
你想模仿处理器还是整个机器?
效法一个CPU是很容易的,只要定义一个包含所有CPU寄存器的结构,建立一个数组来模拟RAM,然后只是模仿这样的:
cpu_ticks = 0; // counter for cpu cycles
while (true) {
opcode = RAM[CPU.PC++]; // Fetch opcode and increment program counter
switch (opcode) {
case 0x12: // invented opcode for "MOV A,B"
CPU.A = CPU.B;
cpu_ticks += 4; // imagine you need 4 ticks for this operation
set_cpu_flags_mov();
break;
case 0x23: // invented opcode for "ADD A, #"
CPU.A += RAM[CPU. PC++]; // get operand from memory
cpu_ticks += 8;
set_cpu_flags_add();
break;
case 0x45: // invented opcode for "JP Z, #"
if (CPU.FLAGS.Z) CPU.PC=RAM[CPU.PC++]; // jump
else CPU.PC++; // continue
cpu_ticks += 12;
set_cpu_flags_jump();
break;
...
}
handle_interrupts();
}
模拟一个整个机器是非常困难得多..你需要模拟LCD控制器,内存映射寄存器,内存组控制器,DMA,输入设备,声音,I/O等等...也许你需要从bios和操作系统转储......我不知道ARM处理器,但如果它有管道,缓存和其他东西,事情会变得更复杂的时机。
如果您已将所有硬件部件完整记录下来,则不存在任何问题,但是如果您需要进行逆向工程或猜测仿真机器的工作方式......您将很难获得。
从这里开始:http://infocenter.arm.com/help/index.jsp并下载处理器的“技术参考手册”。
和一般仿真问题:http://www.google.es/search?q=how+to+write+an+emulator
那么,我想模仿整个机器。感谢您的详细解答。 – SunnyShah 2009-09-28 07:46:18
我已经在JavaScript中完成了任天堂Gameboy模拟器,代码非常简单易用,也许它可以帮助您了解模拟器的工作原理。 http://www.codebase.es该版本有点过时,几天后我将上传新版本,并提供大量错误修正和改进的兼容性。 – Peter 2009-09-28 07:56:47
虽然这种方法基本上是正确的,但重要的是要注意这是一个固有的不准确的仿真。它将序列化不会在真实处理器中序列化的内容。例如,ARM9中的操作码不是原子的,它们是通过5级流水线完成的,因此在流水线的任何阶段都可能发生中断。为现代CPU编写仿真器肯定是一项不重要的任务,所以我对产品代码提出反对意见(但它可能是一种很好的学习体验)。 – Falaina 2009-09-28 08:36:15
我的嵌入式设备除串行连接器外没有任何连通性,每次将代码转移到它上面都非常痛苦。将代码传输到设备需要10到15分钟的时间。 – SunnyShah 2009-09-28 10:57:33
你能告诉我,使用qemu制作模拟器需要多少努力? – SunnyShah 2009-09-28 11:00:37