歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 采用Eclipse + GDB來搭建調試Qemu源碼的環境

采用Eclipse + GDB來搭建調試Qemu源碼的環境

日期:2017/3/1 9:59:06   编辑:Linux編程

由於很多同學來信詢問如何學習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文件分析

  1. /*Makefile*/
  2. all: build-all
  3. include config-host.mak
  4. include $(SRC_PATH)/rules.mak
  5. config-host.mak:$(SRC_PATH)/configure
  6. @echo $@ is out-of-date, running configure
  7. @sed –n “/.*Configured with/s/[^:]*: //p” $@ | sh
  8. /*config-host.mak*/
  9. SRC_PATH = /home/workspace/qemu-1.0
  10. CFLAGS=-O2 –g ? CFLAGS=O0 –g /*避免調試時指令亂序執行*/
  11. %.o:%.c /*Makefile中的模式匹配,將所有的.c文件生成對應的.o*/
  12. $(call quiet-command,$(CC) $(QEMU_INCLUDES) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) –c –o $@ $<,”CC $(TARGET_DIR)$@”)
  13. /*上面規則的含義即為調用函數quiet-command, 並且函數有兩個參數:
  14. * $1 = (CC) $(QEMU_INCLUDES) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) *$(CFLAGS) –c –o $@ $<
  15. * $2 = ”CC $(TARGET_DIR)$@”
  16. */
  17. quiet-command = $(if $(V), $1,$(if $(2), echo $2 &&$1, @$1))
  18. /*這條規則的含義為,如果$(V) !=NULL,則執行參數1($1), 否則,如果$(2)!=NULL,則先打印出$2,再執行$1*/
  19. %.o:%.S /*原理同上*/
  20. /*經過以上兩步之後,已經把所有的.c和.S生成了對應的.o文件*/
  21. LINK = $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $(1) $(LIBS)," LINK $(TARGET_DIR)$@")
  22. /*上面規則的含義為: gcc –o qemu-system-i386 *.o */

從Makefile可以得到如下信息:

Qemu支持系統仿真和用戶仿真兩種模式,可以簡單的作如下理解:

(1)系統仿真,仿真一台完整的pc機,包括cpu,總線,內存,硬盤,外設等,調用i386-softmmu/qemu-system-i386。系統仿真模式包括的所有文件,參見附錄A, 從附錄A中可以很清晰的知道系統仿真模式由哪些文件編譯生成(configure時的配置不同,略有差異),依賴了哪些庫(藍色加粗)等。

(2)用戶仿真,僅僅仿真cpu,調用i386-linux-user/qemu-i386命令。用戶仿真模式包括的所有文件,參見附錄B,可以很清楚的知道用戶仿真模式的命令qemu-i386由哪���文件編譯生成configure時的配置不同,略有差異),依賴了哪些庫(藍色加粗),需要哪個鏈接腳本文件等等。

Copyright © Linux教程網 All Rights Reserved