這篇文章http://www.linuxidc.com/Linux/2016-11/137343.htm講了DDD的安裝,這一篇博文先將講bochs的安裝,之後再說聯合調試。下載bochs解壓後進入目錄。
./configure --enable-gdb-stub
make
make install
搞定,系統裡面又多了一個命令bochs
這裡依然使用之前的博文制作出來的hd.img可啟動內核鏡像,這裡面包含2.4.0內核。為了清楚起見我把bochs配置過程在這裡再寫一遍,這個過程與之前單純的運行內核時有所不同,之前我們只想運行內核,現在我們要調試內核,所以多了第4步。
bochs
命令會出現命令行菜單,選擇3. Edit options
開始編輯配置,進入12. Disk & Boot options
,把4. First HD/CD on channel 0
設為hd.img,這個過程需要輸入hd.img的一些參數例如柱面數、磁頭數、每磁道扇區數,其他的參數保持默認即可。15. Boot Options
,把1. Boot drive #1: floppy
改為disk。7. Memory options
->1. Standard Options
->1. RAM size options
後,將memory size
設為32,將host memory size
設為64。16. Other options
->2. GDB Stub Options
->1. Enable GDB stub: no
,把no
改成yes
就行了,端口會自動設為1234,Text base
、Data base
以及BSS base
都保持默認為0
即可。4. Save options to...
保存下配置,命名為kdebug.bxrc6. Begin simulation
開始模擬。在內核源碼的頂層Makefile裡將 CFLAGS_KERNEL =
改為 CFLAGS_KERNEL = -g
給內核加入調試信息。編譯後在頂層目錄裡的vmlinux
就是帶調試信息的未壓縮內核鏡像。這個鏡像僅供調試使用。
這個vmlinux文件必須放在源碼頂層目錄裡,不能挪動位置,不然調試時無法顯示對應的源碼信息。這裡的源碼目錄可以是編譯完內核過後的源碼目錄,也可以是完全干淨的源碼目錄。舉個例子,我的實驗平台是CentOS 6.4和RedHat Linux 7.3構成的,CentOS專門修改和調試內核,RedHat僅負責編譯內核,我可以在RedHat上把附帶調試信息的內核編譯出來,然後將vmlinux
文件復制到CentOS上,放到剛解壓出來完全干淨的源碼頂層目錄裡,這樣是完全沒有問題的。我之所以不選擇將編譯完內核後的整個目錄直接復制到CentOS上是因為這麼做實在是太慢了,130M的大小,那麼多文件,壓縮和復制都挺麻煩的。解壓一份新源碼,將vmlinux
放進去,這多快,多方便。
最激動人心的時刻來了,命令行切換到源碼目錄裡,再輸入ddd vmlinux
,DDD就打開了,在界面源碼框裡可以看到源碼。
break start_kernel
,在剛進入C語言函數處設個斷點。target remote localhost:1234
,這是讓gdb連接bochs以便進一步指導bochs如何運行。(溫馨提示:在gdb命令行窗口裡點右鍵沒有粘貼選項,因為Paste
選項在DDD主窗口的Edit
菜單裡)c
,告訴bochs持續運行直到被斷點中斷。Uncompressing Linux... OK, booting the kernel
,然後就到達斷點處了。總的來說,bochs+DDD這樣的神級組合就是為開發操作系統而生的,稱之為宇宙最強應該不會有什麼問題。
CentOS 6.0 源碼 編譯 安裝 Bochs http://www.linuxidc.com/Linux/2012-12/76952.htm
openSUSE 安裝Bochs 2.6 http://www.linuxidc.com/Linux/2012-11/75156.htm
Linux0.11 運行環境搭建以及調式--Bochs http://www.linuxidc.com/Linux/2012-11/73902.htm
Ubuntu 12.04安裝帶調試功能的Bochs http://www.linuxidc.com/Linux/2012-10/73251.htm
Ubuntu安裝Bochs過程中遇到的問題及解決方法 http://www.linuxidc.com/Linux/2012-05/61422.htm
Ubuntu 14.04 LTS 安裝和配置Bochs http://www.linuxidc.com/Linux/2016-10/135905.htm
Ubuntu上使用Bochs http://www.linuxidc.com/Linux/2016-10/135903.htm