如何制作ARM9自定义设备模拟器?

时间:2009-09-28 07:07:02

标签: linux emulation embedded-linux device-emulation

我正在使用269 Mhz的ARM 9处理器,支持fpu和32 MB RAM,我在它上面运行linux。我想在PC上模拟它(我在PC上都有linux和windows可用)。我想描述我的循环计数,直接在模拟器中运行我的交叉编译可执行文件。是否有任何开源项目可以轻松创建模拟器,我需要编写多少更改/代码/工作量来制作自定义模拟器?如果你提供教程或其他参考来获得启动,那将是很棒的。

谢谢&的问候,

阳光。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

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

你可以在没有模拟器的情况下进行大量的分析。您对系统仿真器的期望是什么?