一.预处理(否则MAKE时候有错误)
sudo apt-getinstall texinfo
sudo apt-getinstall libncurses5-dev
sudo apt-getinstall m4
sudo apt-getinstall flex
sudo apt-getinstall bison
如果不做预处理,MAKE可能会出现下述错误
1、error: no termcap library found
2、error: makeinfo is required for compilation
二.搭建过程
在虚拟机Linux下ubuntu11.10,arm为华天正Real6410
0.下载gdb-7.4.tar.gz(http://www.gnu.org/software/gdb/download/)
手动到网页下载
1、将gdb-7.4.tar.gz拷贝到任意的位置
2、解压gdb-7.4.tar.gz
tar -zxvf gdb-7.4.tar.gz
3、编译arm-linux-gdb(下面/usr/local是安装目录,可自行更改)
到目录gdb-7.4下
cd gdb-7.4
$./configure --target=arm-linux--prefix=/usr/local/arm-gdb -v
target指明编译生成的GDB用于调试ARM-LINUX程序,prefix指明安装目录
$make
#make install
#sudo gedit /etc/profile
export PATH=$PATH:/usr/local/arm-gdb/bin --把arm-linux-gdb加入环境变量
这样就可以在/usr/local/arm-gdb/bin目录下看到如下三个可执行文件
arm-linux-gdb arm-linux-gdbtui arm-linux-run
4、编译GDB Client
#cd ./gdb/gdbserver (进入gdb-7.4目录里执行该句)
#export PATH=$PATH:/usr/local/arm-gdb/bin
#./configure --target=arm-linux--host=arm-linux
#sudo gedit config.h
//#define HAVA_SYS_REG_H //注释此句
#make CC=arm-linux-gcc //编译用于目标机的stub程序生成gdbserver是GDB客户端程序,在板子上运行。
5、将gdbserver通过你搭建的环境下载到开发板(我的环境是nfs)
三,使用例程
1.编辑文件
# geditgdbtest.c
#include <stdio.h>
int
func(int n){
int sum=0, i;
for (i=0; i<n; i++){
sum += i;
}
return sum;
}
int
main(void)
{
int i;
long result = 0;
for (i=0; i<=100; i++){
result += i;
}
printf("result[1-100] = %d \n",result);
printf("resutl[1-225] = %d \n",func(255));
return 0;
}
# arm-linux-gcc-g gdbtest.c -o gdbtest // 交叉编译
2.下载文件到目标板: gdbtest和gdbserver
假设 host pc ip:192.168.1.178
board ip:192.168.1.20
将文件拷贝到目标板上(通过NFS或其他工具)
检查目标板上是否有gdbtest和gdbserver两个文件。(最好从共享文件夹把这两个文件移到目标板的其他一个目录下面)
3.运行调试
client board:
#./gdbserver 192.168.1.178:1234 gdbtest //目标板上运行gdbtest监听端口1234
host pc:
#cd/usr/local/arm-gdb/bin/ (就是arm-gdb的目录)
#copy gdbtest/usr/local/arm-gdb/bin/ //将前面编译的文件gdbtest拷贝到此目录
测试
#./arm-linux-gdbgdbtest
(gdb)target remote 192.168.0.232:1234 // 连接到开发板 成功后就可以进行调试
(gdb)list or l
(gdb)break func
(gdb)break 22
(gdb)info br
(gdb)continue orc // 这里不能用 run
(gdb)next or n
(gdb)print or presult
(gdb) finish // 跳出func函数
(gdb) next
(gdb) quit