2009-09-28 56 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

相關問題