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

|
问题现象
|
原因分析
|
解决方法
|
|
工具链激活失败: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 编译体系,生成固件时自动集成该程序:
1.在 SDK 中创建应用目录:
cd ~/rk3506_sdk/packagemkdir my_test && cd my_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 程序的快速板端部署。核心逻辑在于利用工具链的硬件适配性,结合静态编译与读写模式切换,规避嵌入式系统精简特性带来的限制。
全部0条评论
快来发表一下你的评论吧 !