kgdb在內核2.6.26中加入,用於調試內核。kdb是內建的內核調試器,由SGI開發。 網絡
二者差別是:數據結構
這裏兩臺機器(使用的是兩臺VBox的虛擬機),一個是目標機器(被調試內核的機器),另外一臺是開發機器(鏈接被調試內核的機器)。frontend
要使用kgdb,須要從新編譯下內核,先修改相關配置:spa
[*] Compile the kernel with debug infodebug
[*] KGDB: kernel debugger ---> 調試
[*] KGDB_KDB: include kdb frontend for kgdb 開發
CONFIG_DEBUG_INFO選項使得編譯中生產調試信息。虛擬機
CONFIG_STRICT_KERNEL_RWX選項會阻止內核的某些斷點,因此禁止(4.15.15中並未看到此項)。並增長KDB。最後查看.config配置文件包含以下:it
CONFIG_FRAME_POINTER=y編譯
CONFIG_KGDB=y
CONFIG_KGDB_SERIAL_CONSOLE=y
CONFIG_KGDB_KDB=y
CONFIG_DEBUG_INFO=y
而後進行編譯安裝,make –j2 && make modules_install && make install
在內核啓動參數中添加,表示啓動,經過串口ttyS0來實現kgdb調試。
kgdbwait kgdboc=ttyS0,115200
kgdbwait能夠讓kgdb在內核啓動階段等待一個調試器連接進來,系統此刻是掛住的。
注:kgdboc表示kgdb over concole,是配置gdb和kgdb通訊的首選機制。
也能夠運行過程當中使能或禁止命令,以下:
echo ttyS0 > /sys/module/kgdboc/parameters/kgdboc
echo "" > /sys/module/kgdboc/parameters/kgdboc
使能kgdb後要禁止內核執行,執行以下,觸發一箇中斷:
echo g > /proc/sysrq-trigger
目標機器掛住後,就是開發機器連接到目標機器上去了。下面來看下整個過程。