由於很多同學來信詢問如何學習qemu,要看哪些資料,應該怎麼入手之類的問題,我每次都回答:看代碼。但是qemu的代碼也是挺龐大的,如果沒有一個好的方法和環境,將是一件非常痛苦的事情。因為qemu的相關資料太少了,並不像linux,有很多源碼分析的資料可以對照的看。
對一個陌生的東西,最好的方法是跟蹤它,所以,我們可以通過單步調試的方法來分析qemu的代碼,下面就介紹一下如何通過eclipse+gdb來搭建qemu源碼的調試環境。
在真正開始之前,先給個分析qemu源碼的小建議(純個人經驗),注意:同樣適用於分析linux代碼。
先學習linux使用相關的知識,推薦書籍《鳥哥的linux私房菜》見 http://www.linuxidc.com/Linux/2011-06/37317.htm ,其次學習linux環境編程,推薦書籍《Unix環境高級編程》 見 http://www.linuxidc.com/Linux/2011-04/34235.htm,最後學習qemu/linux源碼分析,推薦書籍《深入理解linux內核》見 http://www.linuxidc.com/Linux/2011-08/41228.htm。
1. qemu源碼編譯
(1)configure配置選項,根據不同的體系結構和需求進行配置,我的配置如下:
./configure --target-list=i386-softmmu,i386-linux-user --disable-xen --disable-vnc --disable-vnc-png --disable-vnc-jpeg --disable-vnc-sasl --disable-vnc-tls --disable-blobs --disable-bluez --disable-bsd-user --disable-darwin-user --disable-user --disable-vnc-thread
(2)eclipse 項目配置
在eclipse中創建Makefile工程,將configure後的源碼拷貝到新建工程中,執行Build,然後就想調試helloworld一樣對qemu進行調試了。
2. qemu的Makefile文件分析
從Makefile可以得到如下信息:
Qemu支持系統仿真和用戶仿真兩種模式,可以簡單的作如下理解:
(1)系統仿真,仿真一台完整的pc機,包括cpu,總線,內存,硬盤,外設等,調用i386-softmmu/qemu-system-i386。系統仿真模式包括的所有文件,參見附錄A, 從附錄A中可以很清晰的知道系統仿真模式由哪些文件編譯生成(configure時的配置不同,略有差異),依賴了哪些庫(藍色加粗)等。
(2)用戶仿真,僅僅仿真cpu,調用i386-linux-user/qemu-i386命令。用戶仿真模式包括的所有文件,參見附錄B,可以很清楚的知道用戶仿真模式的命令qemu-i386由哪���文件編譯生成configure時的配置不同,略有差異),依賴了哪些庫(藍色加粗),需要哪個鏈接腳本文件等等。