摘要:本文详细介绍了基于合众恒跃原厂 HZ-EVM-RK3506_MINI_SDK_v1.1.0 为 RK3506 Cortex-A7 32 位 ARM 平台定制 Buildroot 根文件系统的完整流程。内容涵盖编译主机环境搭建、SDK 导入与配置、Buildroot 系统裁剪(包括目标架构选择、系统组件裁剪、业务依赖预装)、业务文件 overlay 打包、三种编译方式(整体/单独/清理)、固件烧录与板端验证,并总结了针对 32 位 A7 工控网关的专属踩坑点。本方案专为工业 PLC 采集网关场景设计,实现系统极致轻量化与业务程序一键预装,满足工控产品量产交付需求。
一、前言
本文基于合众恒跃原厂 HZ-EVM-RK3506_MINI_SDK_v1.1.0 完整 SDK,针对RK3506 Cortex-A7 32 位 armhf 架构,完整讲解 Buildroot 根文件系统编译、定制、固件打包全流程。本方案面向自研工业 PLC 采集网关场景,系统极致裁剪,预装 Python3、snap7、MQTT 相关依赖,适配 S7-200-Smart 数据采集 + 自研物联网平台上云业务。 开发板:合众恒跃 HZ-RK3506-MiniEVM(3×A7 32 位 + M0 实时核、双百兆以太网、Linux5.10 内核) SDK 版本:HZ-EVM-RK3506_MINI_SDK_v1.1.0 根文件系统:Buildroot(放弃 Yocto/Debian,轻量化、编译速度快、适合工控量产)
二、编译主机环境搭建
2.1 软硬件要求
- 宿主机系统:Ubuntu 22.04 x86_64(64 位,推荐,Ubuntu18.04 可兼容但需微调依赖)
- 硬件:硬盘空闲≥40G,CPU 多核(i5-12400 及以上编译效率更佳)
- 网络:全程联网,SDK 编译需在线拉取第三方源码包
2.2 一键安装全部编译依赖
复制整条命令执行,补齐 SDK 编译、设备树、Buildroot、交叉编译全套工具:
bash
运行
sudo apt-get update && sudo apt-get install git ssh make gcc libssl-dev liblz4-tool expect expect-dev g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support qemu-user-static live-build bison flex fakeroot cmake gcc-multilib g++-multilib unzip device-tree-compiler ncurses-dev libgucharmap-2-90-dev bzip2 expat gpgv2 cpp-aarch64-linux-gnu libgmp-dev libmpc-dev bc python-is-python3 python2
安装提示already the newest version直接忽略;若编译时报缺失库,根据报错补充对应包。
三、SDK 导入与目录结构说明
3.1 SDK 上传与解压
- 通过 SFTP 将
HZ-EVM-RK3506_MINI_SDK_v1.1.0.tar.gz上传至 Ubuntu/home/HZHY工作目录; - 进入目录解压 SDK 压缩包:
bash
运行
cd /home/HZHY
tar -zxvf HZ-EVM-RK3506_MINI_SDK_v1.1.0.tar.gz
cd HZ-EVM-RK3506_MINI_SDK_v1.1.0
解压完成生成完整 SDK 工程目录,核心文件夹说明:
表格
| 目录 | 功能说明 |
|---|---|
| buildroot | Buildroot 根文件系统源码,本次教程核心 |
| kernel | Linux5.10 内核源码、RK3506 设备树 dts |
| u-boot | v2017.09 版本引导程序 |
| device/rockchip | 板级配置、编译打包脚本 |
| prebuilts | 官方预编译 armhf 交叉工具链,无需手动编译 |
| rkbin | 瑞芯微固件二进制、ddr/loader 固件 |
| rockdev | 固件软链接目录,映射 output/firmware |
| output | 编译输出:镜像、中间文件、固件包 |
| tools | Windows/Linux 烧写、调试工具 |
| app | 官方 Demo,可存放自研 PLC 采集 Python 程序 |
| external | 第三方库:网络、安全、音视频驱动 |
四、SDK 全局配置(选择 Buildroot 根文件系统)
4.1 打开全局配置界面
在 SDK 根目录执行全局配置命令:
bash
运行
make menuconfig
界面提供全平台组件选择,核心配置项说明:
- Rootfs:必须选择
Buildroot(不要选 Yocto/Debian); - Loader(u-boot):默认原厂配套 u-boot,无需修改;
- Kernel:使用 RK3506 原厂 Linux5.10 defconfig;
- AMP:32 位 A7 工控网关可按需开启多核异构,普通采集业务关闭;
- Boot/Firmware/Update:保持默认,用于完整 update.img 打包;
- Extra partitions:可自定义分区,存放业务配置文件、本地缓存。
操作快捷键:
Y:选中启用;N:取消;/:搜索配置项;- 配置完成选择
Save保存,两次ESC退出配置界面; - 持久化保存配置:
make savedefconfig,防止配置丢失。
4.2 内核单独配置(开启以太网、TCP/IP、网络工具)
如需自定义内核网络、外设驱动,执行内核配置命令:
bash
运行
./build.sh kernel-config
工控网关必开内核选项:
- 完整 TCP/IP 协议栈、百兆以太网驱动;
- tmpfs 内存文件系统;
- 关闭声卡、MIPI 显示、摄像头等无关外设;
- 放行 102 端口(S7-200-Smart PLC 通信端口)。
五、Buildroot 内部定制配置(32 位 ARM-A7 关键设置)
5.1 进入 Buildroot 配置界面
两种方式:
- 全局编译时自动调用;
- 单独进入 buildroot 目录配置:
bash
运行
cd buildroot
make menuconfig
5.2 Target Options 目标架构(重中之重,避免 64 位段错误)
RK3506 为纯 32 位 Cortex-A7,禁止选择 AArch64:
- Target Architecture:
ARM - Target Architecture Variant:
armv7-a - Floating point strategy:
Hardware (NEON)硬件浮点 - ARM EABI version:
EABIhf - Target CPU:cortex-a7
- C 库推荐:musl(体积小、内存占用低,适配低内存工控网关)
5.3 System 系统裁剪(工控极简方案)
- Hostname:rk3506-gateway
- Init system:BusyBox init(舍弃 systemd,节省内存)
- /dev 管理:devtmpfs + mdev
- 开启 dropbear 轻量 SSH,用于远程调试网关;
- 关闭 X11/Wayland 图形桌面、蓝牙、音频等无用组件。
5.4 Target packages 预装业务依赖(PLC 采集网关必备)
- Python3 环境
- 开启 python3、python3-threading、python3-json、python3-struct;
- 关闭 Python 多余编译模块,缩减固件体积;
- 仅编译主机保留 pip,开发板运行环境删除 pip(无编译器,禁止板端 pip 安装)。
- 网络与加密
- openssl、ca-certificates(MQTT TLS 加密上云必备);
- iproute2、ping、telnet 网络调试工具。
- 第三方底层库 snap7 将 snap7 源码添加为 Buildroot 本地 package,交叉编译输出 armhf 架构
libsnap7.so,自动部署至/usr/lib。
5.5 业务文件 overlay 打包(一键预装采集程序)
在buildroot目录新建overlay文件夹,所有文件编译时自动合并到 rootfs:
plaintext
buildroot/overlay/
├── usr/bin/main.py # PLC采集+MQTT上报主程序
├── etc/config/.env # 自研云平台MQTT密钥
├── etc/config/config.json # PLC全局配置
├── etc/config/points.json # PLC点位映射表
└── etc/init.d/S99gateway # 网关开机自启脚本
开机自启脚本S99gateway示例:
bash
运行
#!/bin/sh
case "$1" in
start)
echo "Start RK3506 Industrial Gateway Service"
python3 /usr/bin/main.py &
;;
stop)
killall -9 python3
;;
restart)
$0 stop
$0 start
;;
esac
添加可执行权限:
bash
运行
chmod 755 overlay/etc/init.d/S99gateway
六、SDK 三种编译方式(整体编译 / 单独编译 / 清理)
6.1 一键整体编译(推荐,自动打包完整 update.img)
SDK 根目录直接执行,自动编译 u-boot、kernel、buildroot 根文件系统、打包固件:
bash
运行
./build.sh
编译耗时参考:i5-12400 6 核 12 线程完整编译约 2 小时;首次编译会在线下载源码包,保证网络稳定。 编译完成固件输出路径:output/firmware/update.img(整机烧录完整镜像)。
6.2 单独分项编译
- 仅编译 U-Boot
bash
运行
./build.sh uboot
输出镜像:u-boot/uboot.img 2. 仅编译 Kernel 内核
bash
运行
./build.sh kernel
输出镜像:kernel/boot.img 3. 仅编译 Buildroot 根文件系统
bash
运行
./build.sh rootfs
输出 rootfs 镜像:output/buildroot/images/rootfs.ext4
6.3 清理编译缓存(慎用,全部重编译耗时久)
bash
运行
./build.sh cleanall
该命令删除所有中间文件、固件镜像,非必要不要执行;仅修改架构、工具链时清理。
七、固件烧录与板端环境验证
- 烧写工具:SDK
tools/windows目录提供瑞芯微烧写工具,将update.img完整烧入 RK3506 开发板; - 上电 SSH 登录网关,验证 32 位环境与依赖库:
bash
运行
# 校验Python+snap7库
python3 -c "import snap7;print(snap7.__version__)"
# 网口连通PLC测试
ping 192.168.2.1
# 查看网关自启进程
ps aux | grep python3
- 运行采集程序,验证 S7-200-Smart 数据读取、MQTT 上报自研物联网平台功能。
八、RK3506 32 位 A7 平台专属踩坑总结
- 架构选错直接段错误 SDK 全局配置 + Buildroot 双处必须选择 ARM32 armv7-a,误选 AArch64 会生成 64 位库,Python、libsnap7 运行闪退 segment fault。
- 开发板无法在线 pip 安装第三方库 Buildroot 固件无 gcc、cmake 编译工具链,所有底层库(snap7、paho-mqtt)必须在 Ubuntu 宿主机交叉编译,提前放入 overlay 打包进固件。
- musl libc 编译兼容问题 若使用 musl 轻量 C 库,编译 snap7 需添加适配 patch,否则出现链接未定义符号报错。
- ARM32 内存资源限制 Buildroot 裁剪 Python 无用组件,业务代码 MQTT 消息队列设置最大缓存上限,长时间断网避免内存溢出。
- SDK 完整编译耗时巨大 调试阶段优先使用
./build.sh rootfs单独编译根文件系统,无需每次全量编译 u-boot、kernel,大幅节省调试时间。
九、总结
本文基于合众恒跃原厂 RK3506 完整 SDK,完整覆盖环境搭建、SDK 全局配置、Buildroot 32 位系统裁剪、业务程序预装、固件编译烧录全流程。整套系统面向工业 PLC 采集网关定制,轻量化、无冗余组件,完全满足工控产品量产交付标准;上层 Python 业务代码与硬件架构解耦,后续更换其他 ARM32 工控硬件仅替换内核与设备树配置即可复用。
1413

被折叠的 条评论
为什么被折叠?



