移植gdb到DM368 IPNC中 linux arm gdb
From: http://blog.csdn.net/ghostyu/article/details/8081897
移植gdb到嵌入式的ipnc中,大多數(shù)人習(xí)慣使用printf調(diào)試,但是遇到像”segment fault“這的錯(cuò)誤也是后就很難定位,這時(shí)候gdb的作用就體現(xiàn)出來(lái)了
在pc使用gdb調(diào)試應(yīng)用程序前,應(yīng)用程序編譯是需帶上 gcc -g參數(shù),就是編譯帶有調(diào)試信息的程序,不然使用gdb是找不到程序的symbol的
在arm中使用gdb也不例外,也要加上arm_v5t_le-gcc -g參數(shù),只不過(guò),arm上linux不同于pc,嵌入式的gdb采用這樣的調(diào)試方式:
在arm中運(yùn)行g(shù)dbserver
在pc上運(yùn)行g(shù)dbserver對(duì)應(yīng)的arm-linux-gdb,這樣的方式來(lái)調(diào)試程序。
所以的調(diào)試操作均在pc上完成,但是程序的輸出還是在arm上。
現(xiàn)在來(lái)移植gdb到dm368上
1、下載gdb源碼,目前的最高版本的gdb-7.5,下載地址:http://www.gnu.org/software/gdb/download/
2、解壓到合適的文件夾下,注意不要放到window與linux共享的目錄下即可:tar -xvzf?gdb-7.5.tar.gz
3、進(jìn)入gdb-7.5源碼目錄,然后配置編譯arm-linux-gdb
我的配置是這樣的:./configure --target=arm-linux --prefix=/opt/dm36x/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le/gdb-7.5 -v
target是指編譯的目標(biāo)平臺(tái)
prefix是指安裝編譯好的程序目錄,我將它安裝到arm_v5t_le工具鏈的目錄。
這里注意了,現(xiàn)在配置編譯的不是gdbserver,而是gdbserver對(duì)應(yīng)的需要運(yùn)行在主機(jī)pc上的arm-linux-gdb,雖然linux上已經(jīng)有g(shù)db命令,但是這個(gè)gdb命令式?jīng)]法跟gdbserver交互的。
編譯成功后會(huì)在prifix設(shè)定的目錄下產(chǎn)生arm-linux-gdb可執(zhí)行程序,如圖
target_board 和readme是我自己創(chuàng)建的。
4、進(jìn)入gdb-7.5/gdb/gdbserver目錄,配置,然后交叉編譯運(yùn)行在arm上的gdbserver
4.1在交叉編譯gdbserver之前,先進(jìn)行一些設(shè)置:
添加剛才編譯好的arm-linux-gdb到PC linux的PATH中
PATH="/opt/dm36x/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le/gdb-7.5/bin:$PATH"
4.2配置
./configure --target=arm-linux --host=arm-linux
4.3修改config.h
編譯是會(huì)產(chǎn)生一個(gè)錯(cuò)誤,說(shuō)找不到sys/reg.h
所以這里修改一下config.h,不要去使用reg
#vim config.h
//#define HAVA_SYS_REG_H //注釋此句
4.4交叉編譯
make CC=arm_v5t_le-gcc
5、將交叉編譯好的gdbserver復(fù)制到目標(biāo)文件系統(tǒng)的/usr/locaol/bin目錄下,其他地方也可以,只要能在shell中找到gdbserver即可
測(cè)試:
1、隨便寫(xiě)一個(gè)c文件,然后編譯
arm_v5t_le-gcc -g test.c
得到a.out,復(fù)制到目標(biāo)文件系統(tǒng)中
2、在目標(biāo)板上執(zhí)行
gdbserver 192.168.1.227:1234 a.out
192.168.1.227為目標(biāo)板ip地址,1234是沒(méi)有被占用的tcp端口
意思就是創(chuàng)建一個(gè)調(diào)試服務(wù)器,一邊主機(jī)pc上的arm-linux-gdb能夠連接這個(gè)服務(wù)器來(lái)調(diào)試a.out
3、在主機(jī)pc上執(zhí)行
arm-linux-gdb a.out
然后在gdb的shell中輸入
target remote 192.168.1.227:1234
連接成功后目標(biāo)板上會(huì)打印連接信息,如圖
至此,就可以按照通常gdb的命令調(diào)試程序啦
附錄1:調(diào)試時(shí)出現(xiàn)的警告
warning: `/lib/libc.so.6': Shared library architecture unknown is not compatible with target architecture arm.
warning: Could not load shared library symbols for /lib/ld-linux.so.3.
Do you need "set solib-search-path" or "set sysroot"?
忽略,目前沒(méi)有發(fā)現(xiàn)影響什么。
附錄2:gdb調(diào)試手冊(cè)和gdb調(diào)試命令的pdf下載,這兩篇是我在網(wǎng)上找的,覺(jué)得比較好
gdb調(diào)試手冊(cè):http://www.kuaipan.cn/file/id_48923272389085122.html
gdb調(diào)試命令:http://www.kuaipan.cn/file/id_48923272389085121.html
總結(jié)
以上是生活随笔為你收集整理的移植gdb到DM368 IPNC中 linux arm gdb的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java实现Excel文件导出或者下载
- 下一篇: linux下配置samba服务器(以Ce