一、痛点直击:Buildroot系统的“两难困境”
打开RK3506 Buildroot终端,执行编译命令常出现如下报错:
root@myd-yr3506:/# gcc -vbash:gcc:commandnotfoundroot@myd-yr3506:/# sudo apt install gccbash:sudo:commandnotfound
这是嵌入式开发中的高频场景——Buildroot为实现轻量化,采用极致精简设计,核心限制包括:
1.无本地编译工具:未预装gcc、make等开发套件,无法直接在板端完成编译;
2.无包管理与sudo:默认以root用户登录,无apt/yum等包管理工具,无法在线安装软件;
3.文件系统只读:rootfs分区默认以只读模式挂载,文件传输与运行需手动切换权限。
结合test.c程序与RK3506 SDK工具链,通过“PC端编译、板端运行”的三步流程可全程规避上述问题。
二、核心原理:SDK工具链的适配优势
交叉编译是嵌入式开发的标准解决方案:在x86架构PC端,通过适配ARM架构的编译器,生成可在RK3506上直接运行的二进制文件。
瑞芯微官方SDK自带的交叉工具链,相比通用工具链具备三大核心优势:
1.硬件深度适配:与SDK内核源码、驱动模块同源,可原生支持RK3506的GPIO、CAN等硬件接口调用;
2.预编译免安装:工具链集成于SDK的prebuilts目录,无需额外下载与配置,开箱即可用;
3.环境一致性:编译参数与板端固件完全匹配,从源头规避架构不兼容、库依赖缺失等问题。
三、实操3步曲:从编译到运行全流程
前置准备
•硬件:RK3506开发板(需处于联网状态)、PC(建议采用Ubuntu 22.04系统);
•软件:RK3506官方SDK(含prebuilts交叉工具链)、test.c程序。
第一步:激活SDK交叉编译工具链(PC端)
1.解压SDK并进入目录
为避免编译异常,建议将SDK存放于非中文、非共享目录:
mkdir-p ~/rk3506_sdk &&cd~/rk3506_sdktar -zxf rk3506_linux6.1_sdk.tar.gz # 替换为实际SDK压缩包名cdrk3506_linux6.1_sdk
1.配置环境变量(关键步骤)
SDK工具链默认位于prebuilts目录,通过环境变量激活:
# 32位ARM工具链路径(RK3506主流配置)TOOLCHAIN_PATH=$(pwd)/prebuilts/gcc/linux-x86/arm/gcc-arm-10.3-2021.07-x86_64-arm-linux-gnueabihf/bin# 导出架构与编译器前缀exportARCH=armexportCROSS_COMPILE=$TOOLCHAIN_PATH/arm-linux-gnueabihf-exportPATH=$TOOLCHAIN_PATH:$PATH
1.验证工具链激活
执行以下命令,输出版本信息即表示激活成功:
$CROSS_COMPILEgcc -v# 成功示例:gcc version 10.3.0 (GCC)
第二步:编译目标test.c程序(PC端)
1.创建test.c程序
保存为test.c,示例代码如下:
// 程序入口函数(C 程序必须有且仅有一个 main 函数)intmain(void){// 输出 "Hello World!" 到终端,n 表示换行printf("Hello World!n");printf("rk3506 buildroot: Rockchip Linux 6.1 SDKn");return0; // 程序正常退出,返回 0(非 0 表示异常)}
1.执行交叉编译
需添加-static参数实现静态编译,避免板端因缺失依赖库报错:
$CROSS_COMPILEgcc test.c -otest-static -Wall#或者使用绝对路径/home/sc/MYD-YR3506/prebuilts/gcc/linux-x86/arm/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-gcc test.c -otest
各参数功能:
◦-o test:指定输出可执行文件名为test;
◦-static:将所有依赖库打包进程序,实现独立运行;
◦-Wall:开启全部编译警告,辅助排查代码语法问题。
1.验证编译结果
通过file命令确认程序适配ARM架构:
sc@sc:/mnt/hgfs/rk3506_gateway$file testtest:ELF32-bitLSBexecutable,ARM,EABI5version1(SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3,forGNU/Linux3.2.0, with debug_info,notstripped
第三步:推送程序到板端并运行
关键前提:切换板端文件系统为读写模式
# 板端执行(通过串口或SSH登录)mount-o remount,rw / # 重新挂载根目录为读写模式(这一步不是必须的)
方法1:ADB推送(常用方法,需板端开启ADB)
1.PC端推送文件至板端可读写分区(如/userdata或/root):
adb push F:sharerk3506_gatewaytest/
1.板端运行程序:
cd/userdata/chmod+xtest# 赋予执行权限./test
方法2:SCP网络传输(无ADB时适用)
1.PC端通过SSH推送(替换board_ip为板卡实际IP):
scp test root@board_ip:/userdata/# 符合SDK文件传输标准
1.板端运行流程同上,最终输出结果:

四、避坑指南:5个高频问题解决方案
|
问题现象
|
原因分析
|
解决方法
|
|
工具链激活失败:command not found
|
环境变量路径错误
|
1.执行echo $PATH确认工具链bin目录已加入;2.检查SDK解压路径是否含中文/空格
|
|
编译报错:undefined reference to xxx
|
动态库依赖缺失
|
编译时添加-static参数,或在Makefile中指定库路径
|
|
板端运行:exec format error
|
编译器架构不匹配
|
确认工具链前缀为arm-linux-gnueabihf-(32位ARM),而非aarch64-linux-gnu-(64位)
|
|
推送文件:Read-only file system
|
未切换读写模式
|
板端执行mount -o remount,rw /,或推送至/userdata等默认可读写分区
|
|
ADB推送失败:device not found
|
板端未开启ADB
|
1.板端执行adb start-server;2.确认PC与板卡处于同一局域网
|
五、进阶技巧:将程序集成到SDK固件(批量部署)
若需批量烧录设备,可将程序纳入SDK编译体系,生成固件时自动集成该程序:
1.在SDK中创建应用目录:
cd~/rk3506_sdk/packagemkdirmy_test &&cdmy_test
1.编写Config.in和my_test.mk配置文件(需符合Buildroot包管理规范);
2.编译新固件:
cd~/rk3506_sdk./build.sh lunch # 选择板型配置./build.sh buildroot # 编译包含程序的根文件系统
1.烧录新固件后,可直接在板端执行test命令调用程序。
六、总结
RK3506 Buildroot的“无gcc、无sudo”特性是轻量化设计的必然结果,通过SDK自带交叉工具链,遵循“激活工具链→编译程序→推送运行”三步流程,即可实现C程序的快速板端部署。核心逻辑在于利用工具链的硬件适配性,结合静态编译与读写模式切换,规避嵌入式系统精简特性带来的限制。
-
程序
+关注
关注
117文章
3848浏览量
85459 -
命令
+关注
关注
5文章
759浏览量
23917 -
SDK
+关注
关注
3文章
1111浏览量
52003
发布评论请先 登录
Buildroot MQTT-Modbus 网关开发,实现设备远程监控方案-米尔RK3506
米尔瑞芯微多核异构低功耗RK3506核心板重磅发布
【米尔RK3506国产开发板评测试用】1、硬件介绍、SDK开发环境和QT开发环境搭建
【米尔RK3506国产开发板评测】3、实时补丁以及EtherCAT IGH移植
fireflyAIO-3399J编译Buildroot固件简介
瑞芯微RK3506开发板必备攻略之Qt应用开发手册(下),触觉智能工控嵌入式方案商
RK3506开发板Linux开发板极致性价比之选
RK3506开发板QT Creator开发手册,交叉编译工具链与QT应用示例,入门必备
基于米尔RK3506 Buildroot的MQTT-Modbus网关开发:实现设备远程监控新方案
技术分享 | RK3506如何交叉编译frp wireguard
触觉智能RK3506 SDK2.0发布,20余项升级优化与bug修复
RK3506 Buildroot无gcc/sudo?SDK工具链3步搞定C程序编译运行
评论