gdbserver 交叉编译
背景
项目:开发智能家居项目
chip:IMX6
host:Ubuntu16.04
eclipse IDE:version 2018-09(4.9.0)
搭建gdb+gdbserver+eclipse远程调试环境
记录搭建过程遇到的坑
gdbserver交叉编译
下载gdb源代码,官网:http://ftp.gnu.org/gnu/gdb/
下载最新的版本gdb-10.1版本,解压目录到/home/gateway/gdb下
新建build目录
$ mkdir bulid
再build目录下执行configure
$ ../gdb-10.1/configure --target=arm-poky-linux --host=arm-poky-linux --prefix=/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gdb/
configure报错,提示:
checking build system type... x86_64-pc-linux-gnu
checking host system type... arm-poky-linux-gnu
checking target system type... arm-poky-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether ln works... yes
checking whether ln -s works... yes
checking for a sed that does not truncate output... /bin/sed
checking for gawk... no
checking for mawk... mawk
checking for gdbserver support... yes
checking for arm-poky-linux-gcc... arm-poky-linux-gcc
checking whether the C compiler works... no
configure: error: in `/home/gateway/gdb/build10.1':
configure: error: C compiler cannot create executables
See `config.log' for more details
打开 bulid目录下的config.log日志文件,查看到错误信息:
gcc version 7.3.0 (GCC)
configure:4336: $? = 0
configure:4325: arm-poky-linux-gcc -V >&5
arm-poky-linux-gcc: error: unrecognized command line option '-V'
arm-poky-linux-gcc: fatal error: no input files
compilation terminated.
configure:4336: $? = 1
configure:4325: arm-poky-linux-gcc -qversion >&5
arm-poky-linux-gcc: error: unrecognized command line option '-qversion'; did you mean '--version'?
arm-poky-linux-gcc: fatal error: no input files
compilation terminated.
configure:4336: $? = 1
configure:4356: checking whether the C compiler works
configure:4378: arm-poky-linux-gcc conftest.c >&5
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/real-ld: cannot find crt1.o: No such file or directory
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/real-ld: cannot find crti.o: No such file or directory
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/real-ld: cannot find crtbegin.o: No such file or directory
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/real-ld: cannot find -lgcc
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/real-ld: cannot find -lgcc_s
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/real-ld: cannot find -lc
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/real-ld: cannot find -lgcc
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/real-ld: cannot find -lgcc_s
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/real-ld: cannot find crtend.o: No such file or directory
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/real-ld: cannot find crtn.o: No such file or directory
查阅资料,需要添加CC字段,添加c compiler command,指明cross compiler的路径和sysroot的路径;再次执行configure命令
$ ../gdb-10.1/configure --target=arm-poky-linux --host=arm-poky-linux --prefix=/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gdb/ CC="/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux/arm-poky-linux-gcc --sysroot=/opt/fsl-imx-fb/4.14-sumo/sysroots/cortexa7hf-neon-poky-linux-gnueabi"
还是报错,打开config.log日志文件,查看到错误信息:
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/real-ld: error: a.out uses VFP register arguments, /tmp/ccZCkn0C.o does not
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/real-ld: failed to merge target specific data of file /tmp/ccZCkn0C.o
查阅资料,说需要添加浮点运算处理方式,最开始是添加CFLAGS="-mfloat-abi=softfp"
$ ../gdb-10.1/configure --target=arm-poky-linux --host=arm-poky-linux --prefix=/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gdb/ CC="/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux/arm-poky-linux-gcc --sysroot=/opt/fsl-imx-fb/4.14-sumo/sysroots/cortexa7hf-neon-poky-linux-gnueabi" CFLAGS="-mfloat-abi=softfp"
编译还是报错,查看config.log,发现错误信息
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/real-ld: error: a.out uses VFP register arguments, /tmp/ccVSaX3d.o does not
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/7.3.0/real-ld: failed to merge target specific data of file /tmp/ccVSaX3d.o
然后修改使用CFLAGS="-mfloat-abi=hard"
$ ../gdb-10.1/configure --target=arm-poky-linux --host=arm-poky-linux --prefix=/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gdb/ CC="/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux/arm-poky-linux-gcc --sysroot=/opt/fsl-imx-fb/4.14-sumo/sysroots/cortexa7hf-neon-poky-linux-gnueabi" CFLAGS="-mfloat-abi=hard"
configure执行成功,生成Makefile文件
接下来执行make,编译报错,错误为:
make[2]: Entering directory '/home/gateway/gdb/build10.1/gdbsupport'
make all-am
make[3]: Entering directory '/home/gateway/gdb/build10.1/gdbsupport'
CXX agent.o
In file included from ../../gdb-10.1/gdbsupport/common-defs.h:86:0,
from ../../gdb-10.1/gdbsupport/agent.cc:20:
../gnulib/import/stdio.h:43:15: fatal error: stdio.h: No such file or directory
#include_next <stdio.h>^~~~~~~~~
compilation terminated.
Makefile:503: recipe for target 'agent.o' failed
查阅资料,说可以屏蔽掉这一句,找到这个文件屏蔽后,还是报错
后续还有报错,重复定义变量,查阅资料说屏蔽掉,继续编译,后面继续报错说有变量未定义,放弃编译
换成gdb7.10版本编译
编译通过
在make install 过程中报错
说是权限不够,使用
$ sudo make install
报错找不到runlib命令,说原因是切换到root权限后,没有把cross编译路径加入到环境变量来,后面修改/etc/profile,将我本地的cross编译路径
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux
加入到环境变量中去,并且运行
$ source /etc/profile
安装成功
在输出路径下生成了
gcore
gdb
gdbserver
run
4个文件,再用cross编译器自带的 arm-poky-linux-strip 裁剪大小
$ arm-poky-linux-strip gdbserver
最终文件大小400多KB
搭建调试
首先切换工程为debug模式编译
- 在Project->Properties->C/C++ Build 中确保Configuration是Debug的,如果不是切换到debug模式
- 在Run->Debug Configuration->C/C++ Remote Application中,创建对应工程的debug调试工程
注意点,刚开始我用的是GDB(DSF)Automatic Remote Debugging Laucher,但是gdb+gdbserver一直建立不起来通讯
后面还是换成GDB(DSF)Manaul Remote Debugging Laucher
在红框这里修改
切换到Debugger,修改GDB debugger对应的输出框内容为你的交叉编译器gdb版本的所在路径,我这里就是
/opt/fsl-imx-fb/4.14-sumo/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux/arm-poky-linux-gdb
切换到Debugger->Shared Libraries,将交叉编译环境的lib路径包含进来,我这里是
/opt/fsl-imx-fb/4.14-sumo/sysroots/cortexa7hf-neon-poky-linux-gnueabi/lib
切换到Debugger->Connection,Type选TCP,IP改为目标机IP地址,端口子定义,与在目标机上运行gdbserver时输入的端口号相同即可,我这里设置为2000
当然也可以选串口相连,我这里选了TCP连接方式
3. 将生成的gdbserver拷贝到目标机上,我把gdbserver宝贝到和要调试的程序同一路径,cd到该路径下,运行
$ gdbserver localhost:2000 yourpogram_path
成功的会显示
process yourpogram_path created; pid=xxx
Listening on port 2000
这时在eclipse点击debug,就可以开始调试了
gdbserver 交叉编译相关推荐
- Linux下交叉编译gdb和gdbserver
平台:tq2440 GCC: gcc version 4.3.3 (Sourcery G++ Lite 2009q1-176) 这里过程中参考了下面两篇博文: http://blog.csdn.ne ...
- gdb+gdbserver
内容摘要 远程调试环境由宿主机GDB和目标机调试stub共同构成,两者通过串口或TCP连接.使用 GDB标准程串行协议协同工作,实现对目标机上的系统内核和上层应用的监控和调试功能.调试stub是嵌入式 ...
- 【GDB】gdbserver的使用,远程调试开发板
0.将gdbserver拷贝到目标板子上 注:gdbserver在交叉编译工具目录/debug-root/usr/bin下 可用file命令查看 --------------------------- ...
- 【Android 安装包优化】使用 lib7zr.a 静态库处理压缩文件 ( 交叉编译 lib7zr.a 静态库 | 安卓工程导入静态库 | 配置 CMakeLists.txt 构建脚本 )
文章目录 一.修改 7zr 交叉编译脚本 Android.mk 二.完整的 7zr 交叉编译脚本 Android.mk 三.交叉编译 lib7zr.a 静态库 四.Android Studio 导入 ...
- 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 修改 7zr 交叉编译脚本 Android.mk | 交叉编译 lib7zr.so 动态库 )
文章目录 一.修改 7zr 交叉编译脚本 Android.mk 二.完整的 7zr 交叉编译脚本 Android.mk 三.交叉编译 lib7zr.so 动态库 四.参考资料 一.修改 7zr 交叉编 ...
- 【Android 安装包优化】p7zip 源码交叉编译 Android 平台可执行程序 ( 下载 p7zip 源码 | 交叉编译 Android 中使用 7z 可执行程序 )
文章目录 一.下载 p7zip 源码 二.交叉编译 Android 中使用 7z 可执行程序 三.参考资料 一.下载 p7zip 源码 下载 7zip 源码 , 下载页面 https://source ...
- vs linux 交叉编译,VS结合VisualGDB搭建OpenWrt交叉编译远程调试开发环境
由于此开发环境涉及3设备协同工作,因此先说明一下整体开发环境的配置以及每部分所负责的功能: 1.Windows PC 这里我用的是64位Win7,作为VS的安装环境Windows自然是必不可少的,本机 ...
- 使用gdbserver远程调试
使用gdbserver远程调试 1.默认crosstool交叉编译器没有自带gdbserver,需要自行编译 到GNU官方FTP下载,目前最新版的是gdb-6.7.1 下载地址:http://ft ...
- 交叉编译和交叉调试环境的搭建及使用
1. 交叉编译器 1.1 交叉编译器介绍 在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译.这个编译过程就叫交叉编译.简单地说,就是在一个平台上生成 ...
- php5.6 交叉编译,Cross-compile - 龙芯开源社区
★ 龙芯交叉编译器 龙芯交叉编译器有gs464核版本和ls232核版本两类,其中gs464核版本适用于loongson3a/3b.loognson2h.loongson2k.ls232核版本适用于lo ...
最新文章
- 前端开发必备的 5 个「高薪」技能
- MySQL 5.6 手册 第三章 目录
- 安装composer以及laravel框架
- 浅谈JavaScript中forEach与each
- bcscale php,【PHP开发】bcscale timezone charset的设定说明
- 95-134-114-源码-维表-Hbase维表关联:LRU策略
- LINUX文件的压缩与打包
- win10 x64下安装oracle 12c出现[INS-30131]报错的解决方案
- java Array入门
- Redis缓存组件开发规范
- 服务器挂软件系统,云服务器挂软件用什么系统
- linux cximage动态库,64位Linux编译cximage手记
- 算法与数据结构——百度笔试题(一)
- odi连接oracle数据库,通过ODI接口把数据从Oracle数据库抽到HIVE数据库怎么解决
- 关于请求报文和响应报文的详解
- 为何要配置环境变量?带你一探究竟
- Chapter 3 (Determinants): Cramer‘s rule, volume, and linear transformations (克拉默法则、体积和线性变换)
- 量子计算:当前阶段仍属于热炒概念
- ftp连接失败问题的解决
- Python 调用 Outlook 发送邮件
热门文章
- Apache Hive 垃圾回收
- 10款必装软件,让Windows使用效率飞起!
- MATLAB学习(一)——————format 命令
- Python运算(四)random模块secrets模块
- 四象限时间管理有多好用?
- P5208-[WC2019] I 君的商店【交互,二分】
- 守望轮回谷等待服务器响应,《守望轮回谷》即将接班自走棋?Dota2新地图再次掀起热潮...
- 饭后Android 第二餐-复选框CheckBox+开关按钮Switch+单选按钮RadioButton
- BPI 流程优化和BPR流程重组
- 大数据、云计算、人工智能的融合应用分析