2009-09-28 58 views
1

我正在使用266MHz的ARM9处理器,支持fpu和32MB RAM,我在其上运行linux.I想在pc上模拟它(我的电脑上有linux和windows availabe)。我想分析我的循环计数,直接在模拟器中运行我的交叉编译的可执行文件。是否有任何开源项目可用于轻松创建模拟器,我需要编写多少变更/代码/工作才能创建自定义模拟器?如果你向我提供教程或其他参考资料以获得启动,那将是非常棒的。如何制作ARM9自定义设备模拟器?

感谢&问候,

阳光。

回答

2

你应该给看看QEMU。 但我不明白,为什么你需要一个完整的模拟器?

您可以在没有模拟器的情况下进行大量的分析。拥有系统仿真器会带来什么收益?

+0

我的嵌入式设备除串行连接器外没有任何连通性,每次将代码转移到它上面都非常痛苦。将代码传输到设备需要10到15分钟的时间。 – SunnyShah 2009-09-28 10:57:33

+0

你能告诉我,使用qemu制作模拟器需要多少努力? – SunnyShah 2009-09-28 11:00:37

4

你想模仿处理器还是整个​​机器?

效法一个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

+0

那么,我想模仿整个机器。感谢您的详细解答。 – SunnyShah 2009-09-28 07:46:18

+0

我已经在JavaScript中完成了任天堂Gameboy模拟器,代码非常简单易用,也许它可以帮助您了解模拟器的工作原理。 http://www.codebase.es该版本有点过时,几天后我将上传新版本,并提供大量错误修正和改进的兼容性。 – Peter 2009-09-28 07:56:47

+3

虽然这种方法基本上是正确的,但重要的是要注意这是一个固有的不准确的仿真。它将序列化不会在真实处理器中序列化的内容。例如,ARM9中的操作码不是原子的,它们是通过5级流水线完成的,因此在流水线的任何阶段都可能发生中断。为现代CPU编写仿真器肯定是一项不重要的任务,所以我对产品代码提出反对意见(但它可能是一种很好的学习体验)。 – Falaina 2009-09-28 08:36:15

相关问题