a)编译一个简单的程序helloworld.c
arm-linux-gcc –g helloworld.c –o helloworld
cp helloworld /nfsboot
*记得编译时,加-g选项
b)库问题
需要注意的是运行gdbserver还需要libthread_db库,如果你做的文件系统里没有相应的库,需要从交叉编译器内拷贝一个过去。
cp –avf /usr/local/arm/4.2.2-eabi/lib/libthread_db* /nfsboot/lib
注意:若不知道少了什么库,可以根据运行时错误提示拷贝。
c)到超级终端上启动gdbserver
./gdbserver 192.168.1.10:2345 helloworld
注意:我用的HOST IP是192.168.1.10,2345是监听端口,可以随便设定
然后会出现:
d)然后在主机上启动gdb:
cd /nfsboot
arm-linux-gdb helloworld
会出现:
链接到开发板上:
target remote 192.168.1.128:2345
注意:192.168.1.128是开发板的IP,2345是监听端口,要与上面设置的相同
这是超级终端会出现:
e)设置一下gdb环境变量
show solib-absolute-prefix
set solib-absolute-prefix /usr/local/arm/4.2.2-eabi/lib/
usr/local/arm/4.2.2-eabi/lib/ 是交叉编译器的库路径
show solib-search-path
set solib-search-path /nfsboot/lib/
/nfsboot/lib是文件系统的库路径
注:红色部分为执行的指令。
到此环境已经搭建好,现在可以像在Linux下用GDB调试程序了。
2.4 GDB的使用
OK,现在就可以开始交叉调试了。
a) 把之前的helloworld修改一下:
#include <stdio.h>
int main(void)
{
int a, b, i;
a = 3;
b = 4;
i = a + b;
printf("i = %d\n", i);
return 0;
}