KDB 入門指南
調試內核問題時,能夠跟蹤內核執行情況並查看其記憶體和資料結構是非常有用的。 Linux 中的內置內 核調試器 KDB 提供了這種功能。 在本文中您把瞭解怎麼樣&HTTP://www.aliyun.com/zixun/aggregation/37954.html">nbsp;
使用 KDB 所提供的功能,以及怎麼樣在 Linux 機器上安裝和設置 KDB。 您還把熟悉 KDB 中可以使用的命令以及設置和顯示選項。
Linux 內核調試器(KDB)允許您調試 Linux 內核。 這個恰如其名的工具實質上是內核代碼的補丁,它允許高手訪問內核記憶體和資料結構。 KDB 的主要優點之一就是它不需要用另一台機器進行調試:您可以調試正在運行的內核。
設置一台用於 KDB 的機器需要花費一些工作,因為需要給內核打補丁並進行重新編譯。 KDB 的使用者應當熟悉 Linux 內核的編譯(在一定程度上還要熟悉內核內部機理),但是如果您需要編譯內核方面的説明,請參閱本文結尾處的參考資料一節。
在本文中,我們把從有關下載 KDB 補丁、打補丁、(重新)編譯內核以及啟動 KDB 方面的資訊著手。 然後我們把瞭解 KDB 命令並研究一些較常用的命令。 最後,我們把研究一下有關設置和顯示選項方面的一些詳細資訊。
入門
KDB 專案是由 Silicon Graphics 維護的(請參閱參考資料以獲取連結),您需要從它的 FTP 網站下載與內核版本有關的補丁。 (在編寫本文時)可用的最新 KDB 版本是 4.2。 您把需要下載並應用兩個補丁。
一個是「公共的」補丁,包含了對通用內核代碼的更改,另一個是特定于體系結構的補丁。 補丁可作為 bz2 檔獲取。 例如,在運行 2.4.20 內核的 x86 機器上,您會需要 kdb-v4.2-2.4.20-common-1.bz2 和 kdb-v4.2-2.4.20-i386-1.bz2。
這裡所提供的所有示例都是針對 i386 體系結構和 2.4.20 內核的。 您把需要根據您的機器和內核版本進行適當的更改。 您還需要擁有 root 許可權以執行這些操作。
把檔案複製到 /usr/src/linux 目錄中並從用 bzip2 壓縮的檔解壓縮補丁檔:
#bzip2 -d kdb-v4.2-2.4.20-common-1.bz2
#bzip2 -d kdb-v4.2-2.4.20-i386-1.bz2
您把獲得 kdb-v4.2-2.4.20-common-1 和 kdb-v4.2-2.4-i386-1 檔。
現在,應用這些補丁:
#patch -p1
#patch -p1
這些補丁應該乾淨俐落地加以應用。 查找任何以 .rej 結尾的檔。 這個副檔名表明這些是失敗的補丁。 如果內核樹沒問題,那麼補丁的應用就不會有任何問題。
接下來,需要構建內核以支援 KDB。 第一步是設置 CONFIG_KDB 選項。 使用您喜歡的配置機制(xconfig 和 menuconfig 等)來完成這一步。 轉到結尾處的「Kernel hacking」部分並選擇「Built-in Kernel Debugger support」選項。
您還可以根據自己的偏好選擇其它兩個選項。 選擇「Compile the kernel with frame pointers」選項(如果有的話)則設置 CONFIG_FRAME_POINTER 標誌。 這把產生更好的堆疊回溯,因為幀指標寄存器被用作幀指標而不是通用寄存器。
您還可以選擇「KDB off by default」選項。 這把設置 CONFIG_KDB_OFF 標誌,並且在缺省情況下把關閉 KDB。 我們把在後面一節中對此進行詳細介紹。
保存配置,然後退出。 重新編譯內核。 建議在構建內核之前執行「make clean」。 用常用方式安裝內核並引導它。