|
ARM板上構(gòu)造gdb +gdbserver調(diào)試環(huán)境
|
|
| S3C2410 ARM板上構(gòu)造gdb +gdbserver調(diào)試環(huán)境
遠(yuǎn)程調(diào)試環(huán)境由宿主機(jī)gdb和目標(biāo)機(jī)調(diào)試stub共同構(gòu)成,兩者通過串口或TCP連接。使用GDB標(biāo)準(zhǔn)程串行協(xié)議協(xié)同工作,實(shí)現(xiàn)對目標(biāo)機(jī)上的系統(tǒng)內(nèi)核和上層應(yīng)用的監(jiān)控和調(diào)試功能。調(diào)試stub是嵌入式系統(tǒng)中的一段代碼,作為宿主機(jī)GDB和目標(biāo)機(jī)調(diào)試程序間的一個(gè)媒介而存在。
就目前而言,嵌入式Linux系統(tǒng)中,主要有三種遠(yuǎn)程調(diào)試方法,分別適用于不同場合的調(diào)試工作:
用ROMMonitor調(diào)試目標(biāo)機(jī)程序、
用KGDB調(diào)試系統(tǒng)內(nèi)核
用gdbserver調(diào)試用戶空間程序。
這三種調(diào)試方法的區(qū)別主要在于,目標(biāo)機(jī)遠(yuǎn)程調(diào)試stub的存在形式的不同,而其設(shè)計(jì)思路和實(shí)現(xiàn)方法則是大致相同的。
而我們最常用的是調(diào)試應(yīng)用程序。就是采用gdb+gdbserver的方式進(jìn)行調(diào)試。在很多情況下,用戶需要對一個(gè)應(yīng)用程序進(jìn)行反復(fù)調(diào)試,特別是復(fù)雜的程序。采用GDB方法調(diào)試,由于嵌入式系統(tǒng)資源有限性,一般不能直接在目標(biāo)系統(tǒng)上進(jìn)行調(diào)試,通常采用gdb+gdbserver的方式進(jìn)行調(diào)試。Gdbserver在目標(biāo)系統(tǒng)中運(yùn)行,gdb則在宿主機(jī)上運(yùn)行。
目標(biāo)系統(tǒng)必須包括gdbserver程序,宿主機(jī)也必須安裝gdb程序。一般linux發(fā)行版中都有一個(gè)可以運(yùn)行的gdb,但開發(fā)人員不能直接使用該發(fā)行版中的gdb來做遠(yuǎn)程調(diào)試,而要獲取gdb的源代碼包,針對arm平臺作一個(gè)簡單配置,重新編譯得到相應(yīng)gdb如armv4l-unknown-linux-gdb 。
1.source compile
download from http://cygwin.mirrors.pair.com/gdb/old-releases/
$ tar jxf gdb-5.2.1.tar.bz2
$ cd gdb-5.2.1
$ mkdir obj
$ cd obj
../configure --target=armv4l-unknown-linux \
--enable-shared --prefix=/tmp/g \
--without-x --disable-gdbtk --disable-tui \
--without-included-regex --without-included-gettext
$ make
$ make install
$ mkdir gdb/gdbserver
$ cd gdb/gdbserver
$ chmod +x ../../../gdb/gdbserver/configure
$ CC=/opt/host/armv4l/bin/armv4l-unknown-linux-gcc \
../../../gdb/gdbserver/configure armv4l-unknown-linux \
--without-included-regex --without-included-gettext
$ make
$ cp -vf gdbreplay gdbserver /tmp/g/bin
2.remote debugging
o cp gdbserver from host to target machine
o target machine
gdbserver 59.69.74.87:2345 hello
出現(xiàn)
Process hello created; pid = 68
o host
/tmp/g/bin/armv4l-unknown-linux-gdb hello
(gdb) b main
(gdb) target remote 203.239.30.207:2345
出現(xiàn) Remote debugging using 59.69.75.186:2345
0x40002a00 in ?? ()
(gdb) c //相當(dāng)于主機(jī)gdb的run命令
此時(shí)目標(biāo)機(jī)上出現(xiàn)
Remote debugging from host 59.69.74.87
hello,world
連接成功后,這時(shí)候就可以輸入各種gdb命令如list、run、next、step、break等進(jìn)行程序調(diào)試了。
調(diào)試結(jié)束出現(xiàn)
Child exited with retcode = 0
Child exited with status 236
GDBserver exiting
說明:
1)目標(biāo)機(jī)上的被調(diào)試程序hello, 與主機(jī)上的程序hello, 是相同的程序, 但位置不一樣,并非是用網(wǎng)絡(luò)共享的同一個(gè)位置的同一個(gè)文件, 一個(gè)在目標(biāo)機(jī)上 ,一個(gè)在主機(jī)上, 沒有關(guān)系.
2) host ip : 59.69.74.87
target 2410 ip is 59.69.75.186
都是局域網(wǎng)ip.
|
|
|
|