1. 程式人生 > >Linux嵌入式開發偵錯程式的搭建和使用(mips)

Linux嵌入式開發偵錯程式的搭建和使用(mips)

1
下載偵錯程式原始碼偵錯程式的原始碼可以在GNU的網站上下載到:
http://www.gnu.org/software/gdb/download/


本文件以網站上最新的版本7.0.1為編譯物件。
2
編譯偵錯程式原始碼2.1
伺服器環境在編寫本文件的時候,所使用的伺服器環境如下:
CPU
: Intel(R) Pentium(R) D CPU 2.80GHz
MEM
: 1.5GB
OS
: Fedora 9 x86_64位版本

2.2
原始碼檔案結構下載的原始碼包檔名是gdb-7.0.tar.tar,需要在Linux下解壓縮:
# tar xzvf gdb-7.0.tar.tar


解壓縮後會生成一個新的目錄gdb-7.0,目錄結構如下:


2.3

編譯gdb在編譯gdb之前,首先需要建立一個資料夾。我們建立一個跟gdb-7.0平行的資料夾:



進入資料夾buildgdb

# cd buildgdb

然後執行configure指令:

# ../gdb-7.0/configure --target=mips-linux --prefix=/home/wangtq/test/buildgdb

注:--target是指目標機器的cpu架構,我們現在用的是mips架構的cpu,所以使用mips-linux。如果你用的是ARM架構的cpu,則target的值設為arm-linux--prefix指定了將檔案安裝在什麼地方,示例中將檔案安裝在buildgdb所在的目錄。


指令執行的效果如下圖所示:


Configure執行後,會去檢測Linux系統中是否安裝了執行所需要的工具以及當前系統的配置,並根據這些資訊生成Makefile檔案。
執行完成後,依次執行下列的指令:

# make
# make install

這時,我們看到在buildgdb目錄下有如下的目錄結構:


bin/目錄下,有三個檔案:

這三個檔案就是我們所需要的檔案。將這三個檔案複製到/bin目錄下:

# cp mips-linux-* /bin

gdb的編譯到此完成。
2.4
編譯gdbserver跟編譯gdb一樣,編譯gdbserver時,我們也需要建立一個資料夾,比如:
# mkdir buildgdbserver

這時,目錄結構如下:





我們進入目錄buildgdbserver,然後執行gdbserverconfigure檔案:

# cd buildgdbserver

# ../gdb-7.0/gdb/gdbserver/configure --host=x86_64-linux --target=mips-linux CC=/cross_compile_path/cross_compile_gcc

注:--host是指Linux ServerCPU架構。我們使用的是x8664位機,所以指定為x86_64-linux,如果是32位的x86,則為x86-linux --target的含義跟編譯gdb時的定義一樣。CC定義了交叉編譯工具,請輸入實際所使用的交叉編譯工具gcc

gdb的編譯一樣,configure會檢測系統配置,然後生成Makefile檔案。



下圖是configure的一個示例:



執行完成後,執行make指令:

# make



這時,在buildgdbserver下會生成gdbservergdbreplay兩個工具。將這兩個工具copy到你的NFS目錄下的bin資料夾裡,比如在我們的Linux Server下的目錄/var/lib/tftpboot/rootfs.liqh/bin/,或者通過工具把它們下載到板子上。
3
開始除錯下圖是基本的除錯架構:

目標開發板和主機通過網路連線在一起,目標板上執行gdbserver,開發板上執行gdb
首先,在開發板啟動u-boot並等進入了NFS後,輸入命令:

# gdbserver HostIPort prog
其中HostIP是指Linux ServerIPPort可以隨意指定為大於1024的值。prog是你需要除錯的程式碼。注意,在編譯prog的時候,必須加上-g選項。
比如在除錯PVRDemo的時候,等板子啟動完成後,將驅動等裝載後,輸入:

# gdbserver 10.2.100.251:2222 PVRDemo
這時會出現”Listening on port 2222”的提示,如下圖:


接著在Linux Server上依次輸入:
# mips-linux-gdbtui /nfs_path/prog

#(gdb) target remote TargetIPort

mips-linux-gdbtui是一個帶除錯程式碼的工具,可以在執行到斷點的時候,顯示出斷點處的程式碼。如下圖所示:

/nfs_path/prog”是指你當前執行的帶除錯資訊的程式。這個程式必須跟我們在板子上啟動的程式是同一個。

target remote TargetIPort”:target remote使得我們在Host端偵錯程式和板子上的gdbserver建立TCP/IP通訊,TargetIP是板子的IP地址,Port跟板子上使用gdbserver時使用的Port相同。
通訊成功以後,我們能夠在Host端的偵錯程式上看到類似於如下的資訊:
(gdb) target remote 10.2.100.249:2222
Remote debugging using 10.2.100.249:2222

這時,在Linux Server上輸入:

(gdb) c
程式開始執行。

這個時候,你可以設定斷點,觀察變數,檢視函式呼叫堆疊等等。

文章出處:http://bbs.chinaunix.net/thread-1940280-1-1.html