编译rv1126 recovery模式失败

报错如下

====Start build rockchip_rv1126_rv1109_recovery====
2024-06-14T09:28:54 >>> host-squashfs 3de1687d7432ea9b302c2db9521996f506c140a3 Building
Done in 6s  (error code: 2)
Command exited with non-zero status 2
you take 0:07.26 to build recovery
ERROR: Running build_recovery failed!
ERROR: exit code 2 from line 701:
    /usr/bin/time -f "you take %E to build recovery" $COMMON_DIR/mk-ramdisk.sh recovery.img $RK_CFG_RECOVERY

这是编译host-squashfs 3de1687d7432ea9b302c2db9521996f506c140a3的时候出错了,之前编译rootfs的时候遇到过,但是当时有报错的log,这次没有。

rootfs的解决办法和这个是一样的,只是没想到output目录下有rockchip_rv1126_rv1109和rockchip_rv1126_rv1109_recovery目录,
分别有一个host-squashfs-3de1687d7432ea9b302c2db9521996f506c140a3文件夹。

分别在里面找到mksquashfs.h和mksquashfs.c
在bwriter_buffer和fwriter_buffer上加上extern

extern struct cache *bwriter_buffer, *fwriter_buffer;

rootfs的报错log看这篇文章,我的log懒得找了。
https://blog.youkuaiyun.com/weixin_37933648/article/details/131461406

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格式的gdb及gdbserver工具,一般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 **必须来自同一工具链版本**,否则会出现兼容性问题。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值