• 正文
  • 相关推荐
申请入驻 产业图谱

全志T113交叉编译gdb工具

07/28 09:22
1521
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

交叉编译GDB工具

全志T113是一款面向嵌入式应用的处理器,属于全志科技(Allwinner)T系列产品线。该芯片采用双核Cortex-A7 CPU架构,主频可达1.2GHz,集成ARM Mali400 MP2 GPU,支持1080p视频编解码,适用于工业控制智能家居物联网低功耗场景。

做开发工作离不开调试工具,我不习惯用gdbserver,习惯直接在板子上运行gdb,这里就需要交叉编译一个板子上运行的gdb。

下载GDB源码

从GNU官网下载GDB源码包,推荐使用稳定版本以确保兼容性,我这边用的是10.2版本。可以通过以下命令下载:

wget https://ftp.gnu.org/gnu/gdb/gdb-10.2.tar.gz
tar xzf gdb-10.2.tar.gz
cd gdb-10.2
../gdb-7.9/configure     CC=arm-htnice-linux-gnueabihf-gcc --enable-static     CFLAGS="-g -O2 -I /home/users/xxx/code/gdb/termcap"     LDFLAGS="-L/home/users/wuwei/xxx/gdb/termcap"     --prefix=`pwd`/install     --target=arm-htnice-linux-gnueabihf     --host=arm-htnice-linux-gnueabihf     --program-prefix=arm-htnice-linux-gnueabihf

make

由于gdb会依赖termcap库,上面我制定了termcap的路径。

编译错误解决

编译过程中,报如下错误:

In file included from ../../gdb-10.2/gdbserver/gdb_proc_service.h:22,
                 from ../../gdb-10.2/gdbserver/linux-low.h:27,
                 from ../../gdb-10.2/gdbserver/linux-aarch32-low.cc:21:
../../gdb-10.2/gdbserver/../gdbsupport/gdb_proc_service.h:179:12: 错误: ‘ps_get_thread_area’ was not declared in this scope; did you mean ‘target_thread_name’?
  179 | PS_EXPORT (ps_get_thread_area);
      |            ^~~~~~~~~~~~~~~~~~
../../gdb-10.2/gdbserver/../gdbsupport/gdb_proc_service.h:177:51: 附注: in definition of macro ‘PS_EXPORT’
  177 |   __attribute__((visibility ("default"))) typeof (SYM) SYM
      |                                                   ^~~
../../gdb-10.2/gdbserver/../gdbsupport/gdb_proc_service.h:182:12: 错误: ‘ps_lgetfpregs’ was not declared in this scope; did you mean ‘ps_lgetregs’?
  182 | PS_EXPORT (ps_lgetfpregs);
      |            ^~~~~~~~~~~~~
../../gdb-10.2/gdbserver/../gdbsupport/gdb_proc_service.h:177:51: 附注: in definition of macro ‘PS_EXPORT’
  177 |   __attribute__((visibility ("default"))) typeof (SYM) SYM
      |                                                   ^~~
../../gdb-10.2/gdbserver/../gdbsupport/gdb_proc_service.h:184:12: 错误: ‘ps_lsetfpregs’ was not declared in this scope; did you mean ‘ps_lgetfpregs’?
  184 | PS_EXPORT (ps_lsetfpregs);
      |            ^~~~~~~~~~~~~
../../gdb-10.2/gdbserver/../gdbsupport/gdb_proc_service.h:177:51: 附注: in definition of macro ‘PS_EXPORT’
  177 |   __attribute__((visibility ("default"))) typeof (SYM) SYM
      |                                                   ^~~
make[2]: *** [Makefile:542:linux-aarch32-low.o] 错误 1
make[2]: 离开目录“/home/users/xxxx/code/gdb/gdbserver”
make[1]: *** [Makefile:10001:all-gdbserver] 错误 2
make[1]: 离开目录“/home/users/xxxx/code/gdb/”```

编译完成后,GDB可执行文件将生成在指定的安装路径下。

解决方法:

在Ygdb-10.2gdbsupportgdb_proc_service.h中增加如下代码:

// 添加缺失的声明
EXTERN_C_PUSH
extern ps_err_e ps_get_thread_area(struct ps_prochandle*, lwpid_t, int, psaddr_t*);
extern ps_err_e ps_lgetfpregs(struct ps_prochandle*, lwpid_t, prfpregset_t*);
extern ps_err_e ps_lsetfpregs(struct ps_prochandle*, lwpid_t, const prfpregset_t*);
EXTERN_C_POP
#endif

验证交叉编译结果

将生成的GDB二进制文件拷贝到全志T113开发板上运行,检查是否正常工作:

./gdb test

r启动程序后输入“r”,test程序能够正常运行,然后用"b"设置断点,能够停下来,说明gdb可以正常使用。

全志科技

全志科技

全志科技以客户为中心,凝聚卓越团队,坚持核心技术长期投入,在超高清视频编解码、高性能CPU/GPU/AI多核整合、先进工艺的高集成度、超低功耗、全栈集成平台等方面提供具有市场突出竞争力的系统解决方案和贴心服务,产品广泛适用于工业控制、智能家电、智能硬件、平板电脑、汽车电子、机器人、虚拟现实、网络机顶盒以及电源模拟器件、无线通信模组、智能物联网等多个产品领域。

全志科技以客户为中心,凝聚卓越团队,坚持核心技术长期投入,在超高清视频编解码、高性能CPU/GPU/AI多核整合、先进工艺的高集成度、超低功耗、全栈集成平台等方面提供具有市场突出竞争力的系统解决方案和贴心服务,产品广泛适用于工业控制、智能家电、智能硬件、平板电脑、汽车电子、机器人、虚拟现实、网络机顶盒以及电源模拟器件、无线通信模组、智能物联网等多个产品领域。收起

查看更多

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录