vmware + kgdb + linux2.6.15內(nèi)核調(diào)試配置
===================================================
作者:ietf AT doit.com.cn
引用請(qǐng)注明出處。
===================================================
從早到晚,整整一天啊,總算成功了。
首先看看配置吧:
系統(tǒng)配置:
vmware workstation 5.5.3
FC-5,內(nèi)核2.6.15
具體可以參考《在VmWare Workstation中編譯Linux2.6.20內(nèi)核》(以下簡(jiǎn)稱《2.6.20》)中“VmWare虛擬硬件環(huán)境:”和“VmWare原始系統(tǒng)內(nèi)核環(huán)境”,完成系統(tǒng)的安裝,命名系統(tǒng)為"FC-5-kgdb-client"。
Clone一個(gè)和預(yù)裝環(huán)境一樣的系統(tǒng),選則"Create a full clone",命名為"FC-5-kgdb-server"。
分別為兩個(gè)系統(tǒng)增加一個(gè)串口,以"use named pipe"方式,其中:
client端選擇"this end is theclient", "the other end is a virtual machine"
Server端選擇"this end isthe server", "the other end is a virtual machine"
文件下載:
進(jìn)入client系統(tǒng),從網(wǎng)上下載如下源文件。(之所以算澤2.6.15版本內(nèi)核,是因?yàn)閗gdb的patch目前最高只能支持到這個(gè)版本)
linux kernel
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.15.tar.gz
module-init-tools
http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/module-init-tools-3.2.tar.gz
kgdbpatch
http://kgdb.linsyssoft.com/downloads/kgdb-2/linux-2.6.15.5-kgdb-2.4.tar.bz2
按照《2.6.20》所介紹方式,解壓縮各個(gè)包。假設(shè)最終kernel和patch的路徑如下:
/usr/src/linux
/usr/src/linux-2.6.15.5-kgdb-2.4
為內(nèi)核打上kgdb的支持補(bǔ)?。ò车倪^(guò)程如下,具體可以參考patch中README,選擇需要得patch):
cd/usr/src/linux
patch -p1 <../linux-2.6.15.5-kgdb-2.4/core-lite.patch
patch -p1 <../linux-2.6.15.5-kgdb-2.4/i386-lite.patch
patch -p1 <../linux-2.6.15.5-kgdb-2.4/8250.patch
patch -p1 <../linux-2.6.15.5-kgdb-2.4/eth.patch
patch -p1 <../linux-2.6.15.5-kgdb-2.4/i386.patch
patch -p1 <../linux-2.6.15.5-kgdb-2.4/core.patch
patch -p1 <../linux-2.6.15.5-kgdb-2.4/module.patch
patch -p1 <../linux-2.6.15.5-kgdb-2.4/sysrq_bugfix.patch
按正常編譯內(nèi)核流程,進(jìn)入makemenuxonfig階段,除了《2.6.20》文中為了支持vmware中內(nèi)核編譯必須的選項(xiàng),還需要加上如下內(nèi)容:
http://kgdb.linsyssoft.com/images/xconfig-selection.jpg
但是這張圖片有點(diǎn)老,僅供參考。最關(guān)鍵的一條,上面沒(méi)有,就是:
Serial portnumber for KGDB,默認(rèn)選項(xiàng)是1,需要改為零。(正是這一點(diǎn),折磨了我一個(gè)晚上)
接著該干嗎就干嗎,直到make bzImage完成。
下面要做的工作就相對(duì)簡(jiǎn)單一點(diǎn):
將/usr/src/linux/arch/i386/boot/bzImage和/usr/src/linux/System.map復(fù)制到server上,進(jìn)入這兩個(gè)文件所在目錄,
cpbzImage /boot/vmlinuz-2.6.15.5-kgdb
cp System.map/boot/System.map-2.6.15.5-kgdb
創(chuàng)建symbolic鏈接(為什么是symbolic,參考俺關(guān)于文件系統(tǒng)的文章吧)
ln -s /boot/vmlinuz-2.6.15.5-kgdb /boot/vmlinuz
ln -s/boot/System.map-2.6.15.5-kgdb /boot/System.map
下面就該修改啟動(dòng)項(xiàng)啦:
vim/boot/grub/grub.conf
我的給大家做個(gè)參考吧:
default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
titleFedora Core (2.6.15.5-kgdb)
root (hd0,0)
kernel/vmlinuz-2.6.15.5-kgdb ro root=/dev/VolGroup00/LogVol00kgdb8250=0,115200 kgdbwait
title Fedora Core(2.6.15-1.2054_FC5)
root (hd0,0)
kernel/vmlinuz-2.6.15-1.2054_FC5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
initrd/initrd-2.6.15-1.2054_FC5.img
OK, reboot就等著重啟吧。
系統(tǒng)引導(dǎo)到
"Uncompressing Linux... OK, booting the kernel."
所有的資料上都說(shuō)看到
"Waiting for connection fromremote gdb..."
才是等待調(diào)試狀態(tài),可我看到的只是前面一句。再加上默認(rèn)得串口選項(xiàng)沒(méi)有看到資料提醒需要修改,所以總是無(wú)法連接。這兩個(gè)綜合起來(lái),就一直折騰了整整一天。好在最后耐心的看patch的README才有所啟發(fā)。
就可以用client去連接了。在client上:
cd /usr/src/linux
gdb ./vmlinux
GNUgdb Red Hat Linux (6.0post-0.20040223.17rh)
Copyright 2004 FreeSoftware Foundation, Inc.
GDB is free software, covered by the GNUGeneral Public License, and you are
welcome to change it and/ordistribute copies of it under certain conditions.
Type "show copying"to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as"i386-redhat-linux-gnu"...Using host libthread_db library"/lib/tls/libthread_db.so.1".
(gdb) set remotebaud 115200
(gdb)target remote /dev/ttyS0
Remote debugging using /dev/ttyS0
breakpoint() at kernel/kgdb.c:1212
1212 atomic_set(&kgdb_setting_breakpoint, 0);
warning: shared libraryhandler failed to enable breakpoint
(gdb)
下面就隨心所欲,去折騰你的內(nèi)核吧。
參考文檔:
http://kgdb.linsyssoft.com/quickstart.htm
patch源碼中README
《在VmWare Workstation中編譯Linux 2.6.20內(nèi)核》
聯(lián)系客服