RK3506 Buildroot无gcc/sudo?SDK工具链3步搞定C程序编译运行

电子说

1.4w人已加入

描述

 

 

 

一、痛点直击:Buildroot 系统的 两难困境

 

打开 RK3506 Buildroot 终端,执行编译命令常出现如下报错:

 

 

  •  
  •  
  •  
  •  
root@myd-yr3506:/# gcc -vbash: gcc: command not foundroot@myd-yr3506:/# sudo apt install gccbash: sudo: command not found

这是嵌入式开发中的高频场景——Buildroot 为实现轻量化,采用极致精简设计,核心限制包括:

 

 

1.无本地编译工具:未预装 gccmake 等开发套件,无法直接在板端完成编译;

 

 

2.无包管理与 sudo:默认以 root 用户登录,无 apt/yum 等包管理工具,无法在线安装软件;

 

 

3.文件系统只读:rootfs 分区默认以只读模式挂载,文件传输与运行需手动切换权限。

 

 

结合test.c程序与 RK3506 SDK 工具链,通过 “PC 端编译、板端运行” 的三步流程可全程规避上述问题。

 

 

二、核心原理:SDK 工具链的适配优势

 

交叉编译是嵌入式开发的标准解决方案:在 x86 架构 PC 端,通过适配 ARM 架构的编译器,生成可在 RK3506 上直接运行的二进制文件。

 

 

瑞芯微官方 SDK 自带的交叉工具链,相比通用工具链具备三大核心优势:

 

 

1.硬件深度适配:与 SDK 内核源码、驱动模块同源,可原生支持 RK3506 的 GPIOCAN 等硬件接口调用;

 

 

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压缩包名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)

第二步:编译目标 test.c 程序(PC 端)

 

1.创建 test.c 程序

 

 

保存为test.c,示例代码如下:

 

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
#include   // 包含标准输入输出库(printf 函数依赖)
// 程序入口函数(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_gatewayfile testtest: ELF 32-bit LSB executable, ARMEABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3for GNU/Linux 3.2.0, with debug_info, not stripped

第三步:推送程序到板端并运行

 

关键前提:切换板端文件系统为读写模式

 

  •  
  •  
# 板端执行(通过串口或SSH登录)mount -o remount,rw /  # 重新挂载根目录为读写模式(这一步不是必须的)
方法 1ADB 推送(常用方法,需板端开启 ADB

 

1.PC 端推送文件至板端可读写分区(如/userdata/root):

 

 

  •  
adb push F:sharerk3506_gatewaytest /

1.板端运行程序:

 

 

  •  
  •  
  •  
cd /userdata/chmod +x test  # 赋予执行权限./test
方法 2SCP 网络传输(无 ADB 时适用)

 

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-server2. 确认 PC 与板卡处于同一局域网

 

 

五、进阶技巧:将程序集成到 SDK 固件(批量部署)

 

若需批量烧录设备,可将程序纳入 SDK 编译体系,生成固件时自动集成该程序:

 

 

1. SDK 中创建应用目录:

 

 

  •  
  •  
cd ~/rk3506_sdk/packagemkdir my_test && cd my_test

1.编写Config.inmy_test.mk配置文件(需符合 Buildroot 包管理规范);

 

 

2.编译新固件:

 

 

  •  
  •  
  •  
cd ~/rk3506_sdk./build.sh lunch  # 选择板型配置./build.sh buildroot  # 编译包含程序的根文件系统

1.烧录新固件后,可直接在板端执行test命令调用程序。

 

 

六、总结

 

RK3506 Buildroot 的 无 gcc、无 sudo” 特性是轻量化设计的必然结果,通过 SDK 自带交叉工具链,遵循 激活工具链编译程序推送运行” 三步流程,即可实现 程序的快速板端部署。核心逻辑在于利用工具链的硬件适配性,结合静态编译与读写模式切换,规避嵌入式系统精简特性带来的限制。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分