交叉编译和交叉调试环境搭建及使用(3)

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;
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://127.0.0.1/wyysdf.html