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

标签 linux emulation embedded-linux device-emulation

我正在使用 266 Mhz 的 ARM 9 处理器,支持 fpu 和 32 MB RAM,我在上面运行 linux。我想在 pc 上模拟它(我在 pc 上同时使用 linux 和 windows)。我想分析我的循环计数,直接在模拟器中运行我的交叉编译的可执行文件。是否有任何开源项目可用于轻松创建模拟器,我需要编写多少更改/代码/工作才能使用它制作自定义模拟器?如果您向我提供教程或其他引用资料以帮助我入门,那就太好了。

感谢和问候,

晴天。

最佳答案

你想只模拟处理器还是整台机器?

模拟 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 Controller 、内存映射寄存器、内存库 Controller 、DMA、输入设备、声音、I/O 东西...您可能还需要从bios 和操作系统...我不知道 ARM 处理器,但如果它有管道、缓存和类似的东西,那么时序就会变得更加复杂。

如果您已完整记录了所有硬件部件,那没有问题,但如果您需要进行逆向工程或猜测仿真机的工作原理……您将遇到困难。

从这里开始:http://infocenter.arm.com/help/index.jsp并为您的处理器下载“技术引用手册”。

对于一般仿真问题:http://www.google.es/search?q=how+to+write+an+emulator

关于linux - 如何制作ARM9自定义设备模拟器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1485780/

相关文章:

linux - Bash循环只读最后一行

php - 在Linux上通过PHP运行外部程序

linux - 如何在 Y 和 K 之间每隔 X 分钟运行一次 Jenkins 作业?

linux - 为什么mongodb提示transparent_hugepage?

java - getAvailableBlocksLong() * getBlockSizeLong() VS getAvailableBytes()

安卓工作室 : Can't run AVD because of Intel HAXM error

c++ - 如何在嵌入式设备上的 Qt/X11 中渲染 "Video"

c - malloc() 的奇怪行为

linux - 为什么 arm-linux-gnueabi-g++-4.4 总是构建一个 "7-A"二进制文件?

java - Android Studio 2.1.3 中构建错误