我正在使用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