Ubuntu下使用arm-linux-gdb调试开发板的步骤

本文介绍了一种通过GDB进行嵌入式远程调试的方法。使用Ubuntu LTS 14.04作为宿主机,并以IMX6开发板为目标机。详细说明了如何在目标机上启动gdbserver以及在宿主机上配置gdb进行远程调试的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 宿主机与目标机

宿主机:PC(ubuntu LTS 14.04)
目标机:IMX6开发板(IAC-IMX6-Kit)

◆采用ARM® Cortex™-A9内核,主频高达1.2GHZ,兼容单核、双核、四核;
◆带2D/3D/VG加速器,1080P的h.264视频硬件编解码,支持双720P视频编码;
◆带1MBL2缓存,32KB指令和数据缓存,NEON SIMD媒体加速器;
◆ 1x 20位并行,MIPI-CSI2 (4通道),支持三路同时输入摄像头接口;
◆ 高可靠引导,加密引擎,随机数生成器和篡改检测;
◆集成1路工业用千兆以太网MAC(10/100/1000MHz);
◆ 集成2路CAN,每路可达1Mbps,支持CAN2.0协议;
◆ 扩展3路串口、HDMI接口、LVDS显示接口;
◆ 完美支持Linux、Android嵌入式操作系统

2 安装gdb

该部分略过,可参考:
使用GDB进行嵌入式远程调试

3 调试命令

先在目标机上执行:
./gdbserver 192.168.1.188:2345 fw_aptop.elf
gdbserver 要与宿主机的gdb版本一致
192.168.1.188——宿主机IP
2345——监听端口
fw_aptop.elf——目标进程

然后在宿主机上执行:
./arm-linux-gdb fw_aptop.elf
fw_aptop.elf——与目标机进程为同一进程
设置模式:
handle SIGUSR1 pass noprint nostop
远程:
target remote 192.168.1.71:2345
192.168.1.71——目标机IP
运行:
c

harry@ubuntu:~$ find / -name "arm-linux-gnueabihf-gdb" 2>/dev/null /opt/rv1126_rv1109_v2.2.0_20210825/buildroot/output/rockchip_rv1126_rv1109_recovery/host/bin/arm-linux-gnueabihf-gdb /opt/rv1126_rv1109_v2.2.0_20210825/buildroot/output/rockchip_rv1126_rv1109/host/bin/arm-linux-gnueabihf-gdb /opt/rv1126_rv1109_v2.2.0_20210825/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gdb /opt/rv1126_rv1109_v2.2.0_20210825/prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gdb /opt/rv1126_rv1109_linux_sdk_v1.8.0_20210224/buildroot/output/rockchip_rv1126_rv1109_spi_nand/host/bin/arm-linux-gnueabihf-gdb /opt/rv1126_rv1109_linux_sdk_v1.8.0_20210224/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gdb /opt/rv1126_rv1109_linux_sdk_v1.8.0_20210224/prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gdb /opt/RV1126_RV1109_LINUX_SDK_V2.1.0_20210512/buildroot/output/rockchip_rv1126_rv1109_recovery/host/bin/arm-linux-gnueabihf-gdb /opt/RV1126_RV1109_LINUX_SDK_V2.1.0_20210512/buildroot/output/rockchip_rv1126_rv1109_spi_nand/host/bin/arm-linux-gnueabihf-gdb /opt/RV1126_RV1109_LINUX_SDK_V2.1.0_20210512/buildroot/output/rockchip_rv1126_rv1109/host/bin/arm-linux-gnueabihf-gdb /opt/RV1126_RV1109_LINUX_SDK_V2.1.0_20210512/buildroot/output/rockchip_rv1126_rv1109_spi_nand_recovery/host/bin/arm-linux-gnueabihf-gdb /opt/RV1126_RV1109_LINUX_SDK_V2.1.0_20210512/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gdb /opt/RV1126_RV1109_LINUX_SDK_V2.1.0_20210512/prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gdb harry@ubuntu:~$ 有这么多,复制哪个到板子
最新发布
06-19
<think>根据用户的问题,用户想要确定适用于RV1126板子的arm-linux-gnueabihf-gdb版本及其路径。结合引用内容,我们可以总结如下:1.引用[1]提到需要准备arm格式的gdbgdbserver工具,一般SDK或交叉编译工具链中都有提供。2.引用[3]给出了在Ubuntu上为RK1126(即RV1126)设置交叉编译工具链环境变量的示例,其中路径指向了gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf工具链。因此,正确的`arm-linux-gnueabihf-gdb`路径应该位于RV1126SDK提供的交叉编译工具链目录中。具体步骤如下:###步骤1:定位RV1126SDK中的GDB工具在主机(PC)上,RV1126SDK通常位于用户指定的目录中(如`sdk_rv1126`)。根据引用[3],工具链路径示例为:```xx/sdk_rv1126/1126/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin```在该目录下,可以找到`arm-linux-gnueabihf-gdb`可执行文件。###步骤2:验证工具链版本-打开终端,进入工具链的`bin`目录:```bashcdxx/sdk_rv1126/1126/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin```-运行以下命令检查GDB版本:```bash./arm-linux-gnueabihf-gdb--version```输出应显示适用于ARM架构的GDB版本(如8.3),并且目标平台为`arm-linux-gnueabihf`(即ARM硬浮点Linux环境),这与RV1126的ARMCortex-A7处理器兼容。###步骤3:复制gdbserver到RV1126板子**注意**:`arm-linux-gnueabihf-gdb`是运行在主机上的调试器,而**gdbserver**需要复制到RV1126板子上运行。-在工具链目录中查找`gdbserver`:```bash#在工具链的根目录下搜索(非bin目录)findxx/sdk_rv1126/1126/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf-namegdbserver```通常,`gdbserver`位于工具链的`arm-linux-gnueabihf/debug-root/usr/bin/`子目录中。-将找到的`gdbserver`复制到RV1126板子的`/usr/bin/`目录:```bashscp{路径}/gdbserverroot@开发板IP:/usr/bin/```-在板子上赋予执行权限:```bashchmod+x/usr/bin/gdbserver```###为什么选择这个工具链?-RV1126官方SDK提供的工具链(如`gcc-arm-8.3-2019.03`)已针对Rockchip处理器优化,确保与板载系统(通常是基于glibc或uclibc的Linux)兼容。-自行编译GDB可能因库依赖问题导致不兼容,因此**强烈建议使用SDK自带的工具链**。###验证调试环境1.**板子端**:运行gdbserver```bashgdbserver:2345./your_app```2.**主机端**:在VSCode的`launch.json`中配置:```json{"miDebuggerPath":"xx/sdk_rv1126/.../bin/arm-linux-gnueabihf-gdb","miDebuggerServerAddress":"开发板IP:2345"}```3.启动调试,观察是否正常连接。###常见问题处理-**问题:主机GDB无法连接gdbserver**检查防火墙是否开放端口(如2345):```bashsudoufwallow2345#Ubuntu主机```-**问题:gdbserver提示内存不足**参考引用[1]的建议:关闭板子上非必要进程,或优化程序内存占用。>**关键点**:务必确保主机GDB与板子gdbserver**来自同一工具链版本**,避免兼容性问题。---###§§相关问题§§1.如何为RV1126交叉编译带调试信息的可执行文件?2.当gdbserver报错`内存不足`时有哪些优化策略?3.如何通过设备树配置为RV1126的特定硬件(如GPIO中断)添加调试支持?4.VSCode调试RV1126程序时出现`Timeout`错误应如何排查?</think>### 如何选择正确的 arm-linux-gnueabihf-gdb 版本用于 RV1126 调试 #### 1. **定位正确的 GDB 路径** 根据引用内容[3],RV1126 SDK 中的交叉编译工具链路径是: ```bash xx/sdk_rv1126/1126/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin ``` 在这个路径中,你需要找到: - **主机端调试器**:`arm-linux-gnueabihf-gdb` (用于 PC 端) - **板端调试服务**:`gdbserver` (复制到 RV1126) #### 2. **验证工具链版本** ```bash # 进入工具链目录 cd xx/sdk_rv1126/1126/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin # 检查 GDB 版本 ./arm-linux-gnueabihf-gdb --version ``` **关键验证点**: - 输出应包含 `arm-linux-gnueabihf` 标识 - 版本号应与 SDK 匹配(示例中是 8.3) #### 3. **获取 gdbserver** 在工具链目录中查找 gdbserver: ```bash # 在工具链目录中搜索 find . -name gdbserver # 典型路径(根据引用[1]): ./arm-linux-gnueabihf/debug-root/usr/bin/gdbserver ``` #### 4. **复制到开发板** ```bash # 复制到 RV1126 scp {路径}/gdbserver root@开发板IP:/usr/bin/ # 在板端添加执行权限 ssh root@开发板IP chmod +x /usr/bin/gdbserver ``` #### 5. **配置环境变量(主机端)** 根据引用[3]配置环境变量: ```bash vim ~/.bashrc # 添加: export PATH=xx/sdk_rv1126/1126/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin:$PATH # 使配置生效 source ~/.bashrc ``` ### 版本选择关键点 1. **架构匹配**: - RV1126 是 ARMv7 架构,选择 `arm-linux-gnueabihf` 版本(支持硬件浮点) - 避免使用 `aarch64` 或 `armeb` 版本 2. **SDK 兼容性**: - **必须使用 SDK 自带的工具链**(如示例中的 gcc-arm-8.3) - 自行编译的 GDB 可能导致兼容性问题(引用[1]中提到的库依赖问题) 3. **调试符号支持**: ```bash # 编译程序时添加调试选项 arm-rockchip830-linux-uclibcgnueabihf-g++ -g -o my_app my_app.cpp ``` ### 验证调试环境 ```bash # 板端启动调试服务 gdbserver :2345 ./my_app # 主机端连接测试 arm-linux-gnueabihf-gdb ./my_app (gdb) target remote 开发板IP:2345 (gdb) break main ``` 成功设置断点表示环境配置正确[^1]。 ### 常见问题解决 - **库缺失问题**(引用[1]): ```bash # 在主机端将缺失的库复制到 /lib sudo cp {工具链路径}/lib/libxxx.so /lib/ # 或创建符号链接 sudo ln -s {完整路径}/libxxx.so /lib/libxxx.so ``` - **寄存器读取失败**(引用[2]): 确保使用 **相同工具链版本** 编译程序和调试,避免 `Couldn't find general-purpose registers` 错误[^2]。 > **重要提示**:调试时 RV1126 板端和主机端的 GDB/gdbserver **必须来自同一工具链版本**,否则会出现兼容性问题。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值