#include
int main()
{
printf(“hello word!\n”);
return 0;
}
程序输好以后确认无误,保存。进入程序文件所在目录
# arm-linux-gcc hello.c –o hello
gdb的源代码包可以从http: //ftp.cs.pu.edu.tw/Linux/sourceware/gdb/releases/下载,我下载的是gdb-6.6。下载到某个目录,笔者下载到自己的用户目录
下载完后,进入该目录,配置编译步骤如下:
#tar jxvf gdb-6.6-tar-bz2
#cd gdb-6.6
#./configure --target=arm-linux --prefix=/usr/local/arm-gdb -v
#make
/root/tools/gdb-6.6/bfd/elf32-arm.c: In function 'find_thumb_glue':
/root/tools/gdb-6.6/bfd/elf32-arm.c:2452: error: ignoring return value of 'asprintf', declared with attribute warn_unused_result
/root/tools/gdb-6.6/bfd/elf32-arm.c: In function 'find_arm_glue':
/root/tools/gdb-6.6/bfd/elf32-arm.c:2485: error: ignoring return value of 'asprintf', declared with attribute warn_unused_result
bfd/Makefile:185:WARN_CFLAGS = -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror
opcodes/Makefile:175:WARN_CFLAGS = -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror
#export PATH=$PATH:/usr/local/arm-gdb
进入gdbserver目录(在gdb目录下):
#./configure --target=arm-linux –host=arm-linux
#make CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc
(这一步要指定arm-linux-gcc的位置,可能跟你的不一样)
linux-arm-low.c:35:21: sys/reg.h: No such file or directory
因为sys/reg.h在ubuntu中 /usr/include/sys/reg.h目录中,所以可以加上 -I/usr/include
然后单独运行:/usr/local/arm/3.4.1/bin/arm-linux-gcc -c -Wall -g -O2 -I. -I. -I./../regformats -I./../../include -I../../bfd -I./../../bfd -I/usr/include linux-arm-low.c
OK!!!!!
再运行一遍
#make CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc
没有错误的话就在gdbserver目录下生成gdbserver可执行文件,把它烧写到flash的根文件系统分区,或通过nfs mount的方式都可以。只要保证gdbserver能在开发板上运行就行。
5、安装必要的库libthread_db-1.0.so
如果你的嵌入式linux没有安装libthread_db-1.0.so这个库的话,在板子中运行gdbserver会提示错误。解决方法如下:
将你的arm-linux-gcc的交叉编译环境中的/usr/local/arm/3.4.1/arm-linux/lib下的libthread_db-1.0.so文件拷贝到下位机TE2440开发板的根目录下的/lib中去(可以先放入nfs共享文件夹中然后再在串口终端中输入拷贝命令)。并在/lib目录建立一个一个指向libthread_db-1.0.so的软链接libthread_db.so.1。
命令如下:#ln -s libthread_db-1.0.so libthread_db.so.1
执行完之后,再次运行gdbserver ./gdbserver之后不会再提示找不到库了。
6、调试hello程序
要进行gdb调试,首先要在目标系统上启动gdbserver服务。在gdbserver所在目录下输入命令:(串口终端中)
#cd /tmp
#./gdbserver 192.168.2.57:2345 hello
192.168.2.57为宿主机IP,在目标系统的2345端口开启了一个调试进程(避免使用1024以下的端口号),hello为要调试的程序。
出现提示:
Process /tmp/hello created: pid="80"
Listening on port 2345
在虚拟机ubuntu中的终端里面输入
#cd /
#arm-linux-gdb hello
(gdb) target remote 192.168.2.223:2345
(192.168.2.223为开发板IP)
出现提示:
Remote debugging using 192.168.2.223:2345
[New thread 80]
[Switching to thread 80]
0x40002a90 in ??()
同时在串口中终端下提示:
Remote debugging from host 192.168.2.100
(gdb)
连接成功,这时候就可以输入各种gdb命令如list、run、next、step、break等进行程序调试了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!