提要
繼續學習Linux.
今天要做是的搭建Linux的核心調試環境。
環境:Ubuntu13.04 gcc4.7.3
安裝QEMU
QEMU簡介
QEMU是一套由Fabrice Bellard所編寫的以GPL許可證分發源碼的類比處理器,在GNU/Linux平台上使用廣泛。Bochs,PearPC等與其類似,但不具備其許多特性,比如高速度及跨平台的特性,通過KQMEU這個開源的加速器,QEMU能類比至接近真實電腦的速度。
最簡單的方法就Ubuntu的軟體中心安裝:
找不到的話可以嘗試更新源,然後update。
其他發行版的linux可以從源碼進行安裝 - http://wiki.qemu.org/Main_Page。
編譯linux的核心
之前有一篇文章介紹核心編譯的,可以參考-Linux作業系統分析(4)- 更新核心與添加系統調用
這裡需要重新編譯一下,添加調試資訊。
首先下載最新版本的核心
https://www.kernel.org/pub/linux/kernel/v3.x/
下載linux-3.9.tar.gz
解壓後終端進入檔案夾,執行:
make menuconfig
在Kernel hacking項目裡面將Compile the kernel with debug info和Compile the kernel with frame pointers,兩項勾選。這些項目可以讓編譯時間添加調試資訊,類似我們平時用的-g選項。
接著執行:
make -j2 bzImage
編譯核心,我的是雙核的cpu,所以是 -j2,四核的話 -j4。
進行調試
去http://wiki.qemu.org/Testing下載linux-0.2.img.bz2,解壓後丟到linux源碼的目錄下。
終端執行:
qemu -S -kernel arch/i386/boot/bzImage -hda linux-0.2.img -append "root=dev/hda"
# -kernel 用來指定核心,注arch/x86/bzImage是不帶調試資訊的核心,vmlinux是帶有調試資訊的核心.
#-hda 指定IDE硬碟
#-append cmdline use 'cmdline' as kernel command line
之後彈出一個小黑視窗,qemu就算起來了。
ctrl+alt+1 與 ctrl+alt+2可以切換介面,前者是螢幕輸出,後者是qemu控制台
運行起來後是黑屏,我們要切換到控制台,用滑鼠點擊視窗,然後ctrl+alt+2,
在QEMU的命令列中 運行:
gdbserver tcp::1234
啟動gdbserver,並在tcp的1234連接埠監聽,-S表示在開始的時候凍結CPU直到遠端gdb輸入相應的控制命令
新起一個終端,用gdb調試vmlinux.
gdb vmlinux
target remote localhost:1234
設定一下斷點,跑一下。
軟體開發技巧
現在 QEMU 已安裝並運行客戶作業系統,現在可以開始開發軟體。既可用模擬器下的原有編譯器,也可用主機上的跨編譯器。對於需要在客戶作業系統反覆編譯和測試軟體的大型開發項目,跨編譯器可能更快,但其安裝配置已超出本文範圍。模擬器下啟動並執行編譯器適合於小型項目,或不經常編譯軟體的項目。
對於軟體,電腦就像是目標平台的真執行個體子,可用於最實際的用途。一些特性,如位元組順序、CPU 一致性以及其他硬體基本特性就像在一台真實電腦上一樣運行正常。我使用過真實的 PowerPC Apple iMac 和基於 QEMU 的 PowerPC 系統開發與測試全域惟一標識符(GUID)分區表(GPT) fdisk 程式的 PowerPC 版本,該程式需要知道 CPU 的位元組順序,在我看來,基於 QEMU 的系統與真實的 iMac 別無二致,除了 QEMU 系統有些慢。
這說明,如果深入探究,確實有些差異。例如,QEMU 的類比硬碟會返回 “QEMU HARDDISK” 的模式字串,與真實的硬碟不同。總的來說,QEMU 的虛擬硬碟有些過時;硬碟都是 PATA 或 Small Computer System Interface (SCSI) 裝置,這根據具體平台,視頻硬體也過時了。可以在 QEMU 文檔中找到虛擬硬體的詳細資料。請注意各個版本的詳細資料都不同。
在 Linux 下,QEMU 會話佔用很少的 CPU 時間,除了客戶作業系統工作時。但 QEMU 會話會佔用指定給它的 RAM 容量。因此,從實際出發,需要給主機系統大量記憶體,尤其是打算同時運行多於一個或兩個 QEMU 會話時。
參考利用qemu進行核心源碼級調試 - http://blog.csdn.net/gdt_a20/article/details/7231652使用 QEMU 進行跨平台開發 - http://www.ibm.com/developerworks/cn/linux/l-qemu-development/