DM8168(385)GDB交叉調試環境搭建
1.交叉調試器製作(利用gdb-7.7.tar.gz)
1.1 下載GDB源代碼
http://ftp.gnu.org/gnu/gdb/
安裝gdb-7.7,實際測試 gdb-6.5和gdb-7.5編譯過不去,看來選擇高版本比較省事.
1.2 解壓並配置環境變量
1.3 修改代碼 /gdb-7.7/gdb/remote.c
1.4 配置編譯環境+make+make install
root@ma-ThinkPad-T430:/home/gdb-7.7# ./configure –target=arm-arago-linux-gnueabi –prefix=/usr/local/arm-a8/bin
……
checking whether to enable maintainer-specific portions of Makefiles… no
configure: creating ./config.status
config.status: creating Makefile
root@ma-ThinkPad-T430:/home/gdb-7.7# make
root@ma-ThinkPad-T430:/home/gdb-7.7# make install
在/usr/local/arm-a8/bin下查看
至此我們在PC端使用的GDB交叉調試器製作完成
2. 調試服務器製作
2.1 進入
cd /home/gdb-7.7/gdb/gdbserver
2.2 配置
chmod u+x configure
./configure –target=arm-arago-linux-gnueabi –prefix=/usr/local/arm-a8/bin –host=arm-linux
2.3 編譯
make CC=arm-arago-linux-gnueabi-gcc (完了在當前目錄生成 gdbserver、gdbreplay 等)
編譯過程中出現error: 表示沒有頭文件reg.h
進入/usr目錄查找
第一個即爲我們所找。於是:找到源文件linux-arm-low.c 129行修改如下:
include “/usr/include/i386-linux-gnu/sys/reg.h”
然後再次編譯
注:如果編譯不過去,make clean一下再試,此時出現如下兩個文件:
至此在開發板上運行的調試服務器製作完成。
3. 調試實戰
3.1 nfs掛載,下載到開發板上(gdbserver與gdbreplay)
3.2 PC端寫一個小程序,進行調試
源文件:
#include <stdio.h>
int sum(int n)
{
int res=0;
(n>0)&&(res=n+sum (n-1));
return res;
}
int main(int argc, char *argv[])
{
printf("sum(10)=%d\n",sum(10));
return 0;
}
Makefile文件:
#
sum:sum.o
arm-arago-linux-gnueabi-gcc -g -o $@ $^
%.o:%.c
arm-arago-linux-gnueabi-gcc -g -c $^
clean:
rm -rf *.o *~
rm -rf sum
3.3 登錄開發板與PC nfs共享目錄,執行
root@ti81xx:/mnt/gdb_debug# gdbserver 192.168.1.3:1234 sum
注意:gdbserver和gdbreplay必須放於此目錄,運行正確會提示監聽端口(如下圖)。
3.4 在PC端共享目錄執行
root@ma-ThinkPad-T430:/home/dm385_sdk/bsp_share/gdb_debug# arm-arago-linux-gnueabi-gdb sum
我擦,居然提示有錯誤,發現是Python2.6的庫找不到。
然後去/usr/lib中查找,發現確實沒有2.6的,之後2.7的,怎麼破?對,軟連接,如下圖:
然後再次執行gdb,發現OK。遠程連接目標板:
target remote 192.168.1.8:1234
整個調試過程如下: