more: Jollen 的 Embedded Linux 教育訓練

« qemu-neo1973 / openmoko-emulator / jk2410-emulator | Home | 小聊 qemu 的 CPUState »

分享一下最近修改 jk2410-emulator 的心得

jollen 發表於 April 10, 2007 10:03 PM

來分享一下最近修改 jk2410-emulator 的心得,簡單紀錄重點,不過應該對有志研究 qemu 的 developer 有些啟發作用;OrzLab 有意舉辦 qemu 的讀書會,到時一定要跟大家多多請教,了解這個模擬器的明日之星。

對於 qemu internal 的研究,我還算是新手,幾天前從 jserv 那拿來了 openmoko-emulator 後,再參照 qemu-neo1973,做了一些小修改。最近在研究 qemu PC emulator,由於 qemu 可以研究的地方真的很多,像是:

- dynamic translator(解譯 target CPU opcode 的核心)
- accelerator(kqemu)
- translation cache
- MMU emulation
- Linux system call 的處理
- System emulator(vl)
- (...more)

所以如果不能結合大家的力量來 hacking 的話,的確還挺辛苦的。不過,其中 system emulator 的實作因為和週邊硬體的模擬有關,所以花了比較多時間在這個部份。以 S3C2410A 這顆 SoC 的模擬來說,target 是使用 'target-arm/' ,不過,由於官方發佈的 mainstram 版本似乎沒有定義 ARM920T 的 CPU ID,所以由 OpenMoko & OpenedHand 所實作的 'qemu-neo1973' 在 'target-arm/cpu.h' 加了相關定義:

#define ARM_CPUID_ARM920T 0x41129200

在 qemu system emulator 初始化「machine」時,會需要指定 CPU ID;其它的部份,像是 SoC 的 controller 部份,qemu-neo1973 已經對 qemu 註冊好 IO 與 memory 的資訊,對於 S3C2410A 這顆玻璃製品的支援算是完備。

最後,則是 machine 的模擬部份。Qemu system emulator 提供一個介面如下:

int qemu_register_machine(QEMUMachine *m)
{
QEMUMachine **pm; pm = &first_machine; while (*pm != NULL) pm = &(*pm)->next; m->next = NULL; *pm = m; return 0; }

可參考 hw/neo1973.c 的實作:

QEMUMachine neo1973_machine = {
    "neo",
    "Neo1973 phone aka FIC GTA01 aka OpenMoko (S3C2410A)",
    neo_init,
};

'Machine' 的註冊是寫在 system emulator 裡,即 vl.c,並透過 qemu-system-arm 的 '-M' 參數來指定所要模擬的 machine。關於 machine 的部份,雖然同樣是基於 S3C2410A 的 PCB,但是週邊與 GPIO 的規格還是有差異,因此 jk2410-emulator 必須修改此部份。

20070410-1.JPG

到這裡就只剩實作問題了,不過,由於 qemu-neo1973 並沒有完整模擬所有 S3C2410 controller 的行為(register read/write),所以可能要先自己再實作一小部份,或是等待 OrzLab 更新 openmoko-emulator

另外,順帶一提,qemu 的 ELF loader(elfload.c)是由 kernel 移植而來:

/* This is the Linux kernel elf-loading code, ported into user space */

可由 elfload.c:elf_exec() 看起。

--jollen

引用通告

如果您想引用這篇文章到您的Blog,
請複製下面的鏈接,並放置到您發表文章的相應界面中。

http://blog.jollen.org/mt-tb.cgi/380

發表一個評論

(您發表的意見將被立即接受,但需要一點時間與後端伺服器做同步,您的留言才會顯示在網站上。為避免 spam 攻撃,按「發表」後請輸入帳號密碼。使用者帳號:「nospam」、密碼:「nospam」。)

Top | 授權條款 | Jollen's Forum: Blog 評論、討論與搜尋
Copyright(c) 2006 www.jollen.org