#include
int main()
{
printf(“hello word!\n”);
return 0;
}
程序輸好以后確認無誤,保存。進入程序文件所在目錄
# arm-linux-gcc hello.c –o hello
gdb的源代碼包可以從http: //ftp.cs.pu.edu.tw/Linux/sourceware/gdb/releases/下載,我下載的是gdb-6.6。下載到某個目錄,筆者下載到自己的用戶目錄
下載完后,進入該目錄,配置編譯步驟如下:
#tar jxvf gdb-6.6-tar-bz2
#cd gdb-6.6
#./configure --target=arm-linux --prefix=/usr/local/arm-gdb -v
#make
/root/tools/gdb-6.6/bfd/elf32-arm.c: In function 'find_thumb_glue':
/root/tools/gdb-6.6/bfd/elf32-arm.c:2452: error: ignoring return value of 'asprintf', declared with attribute warn_unused_result
/root/tools/gdb-6.6/bfd/elf32-arm.c: In function 'find_arm_glue':
/root/tools/gdb-6.6/bfd/elf32-arm.c:2485: error: ignoring return value of 'asprintf', declared with attribute warn_unused_result
bfd/Makefile:185:WARN_CFLAGS = -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror
opcodes/Makefile:175:WARN_CFLAGS = -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror
#export PATH=$PATH:/usr/local/arm-gdb
進入gdbserver目錄(在gdb目錄下):
#./configure --target=arm-linux –host=arm-linux
#make CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc
(這一步要指定arm-linux-gcc的位置,可能跟你的不一樣)
linux-arm-low.c:35:21: sys/reg.h: No such file or directory
因為sys/reg.h在ubuntu中 /usr/include/sys/reg.h目錄中,所以可以加上 -I/usr/include
然后單獨運行:/usr/local/arm/3.4.1/bin/arm-linux-gcc -c -Wall -g -O2 -I. -I. -I./../regformats -I./../../include -I../../bfd -I./../../bfd -I/usr/include linux-arm-low.c
OK!!!!!
再運行一遍
#make CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc
沒有錯誤的話就在gdbserver目錄下生成gdbserver可執行文件,把它燒寫到flash的根文件系統分區,或通過nfs mount的方式都可以。只要保證gdbserver能在開發板上運行就行。
5、安裝必要的庫libthread_db-1.0.so
如果你的嵌入式linux沒有安裝libthread_db-1.0.so這個庫的話,在板子中運行gdbserver會提示錯誤。解決方法如下:
將你的arm-linux-gcc的交叉編譯環境中的/usr/local/arm/3.4.1/arm-linux/lib下的libthread_db-1.0.so文件拷貝到下位機TE2440開發板的根目錄下的/lib中去(可以先放入nfs共享文件夾中然后再在串口終端中輸入拷貝命令)。並在/lib目錄建立一個一個指向libthread_db-1.0.so的軟鏈接libthread_db.so.1。
命令如下:#ln -s libthread_db-1.0.so libthread_db.so.1
執行完之后,再次運行gdbserver ./gdbserver之后不會再提示找不到庫了。
6、調試hello程序
要進行gdb調試,首先要在目標系統上啟動gdbserver服務。在gdbserver所在目錄下輸入命令:(串口終端中)
#cd /tmp
#./gdbserver 192.168.2.57:2345 hello
192.168.2.57為宿主機IP,在目標系統的2345端口開啟了一個調試進程(避免使用1024以下的端口號),hello為要調試的程序。
出現提示:
Process /tmp/hello created: pid="80"
Listening on port 2345
在虛擬機ubuntu中的終端里面輸入
#cd /
#arm-linux-gdb hello
(gdb) target remote 192.168.2.223:2345
(192.168.2.223為開發板IP)
出現提示:
Remote debugging using 192.168.2.223:2345
[New thread 80]
[Switching to thread 80]
0x40002a90 in ??()
同時在串口中終端下提示:
Remote debugging from host 192.168.2.100
(gdb)
連接成功,這時候就可以輸入各種gdb命令如list、run、next、step、break等進行程序調試了。