一、简介:国产化 + 实时 = 下一个风口
政策背景:信创、工业 2025、边缘计算主推国产 SOC。
瑞芯微优势:RK3568(4×A55)/ RK3588(4×A76+4×A55)自带 PCIe 3.0、Mali GPU、NPU,价格 < 国外同级 50%。
实时需求:
视觉检测:相机触发 → 算法推理 → 控制气缸,链路程 ≤ 4 ms。
数控系统:插补周期 1 ms,抖动 < 50 μs。
本文目标:从 0 搭好“x86 开发机 ↔ 瑞芯微板”实时 Linux 交叉环境,为后续内核优化、驱动适配、边缘落地奠基。
二、核心概念:4 个关键词先搞懂
| 关键词 | 一句话说明 | 本文出现形式 |
|---|---|---|
| PREEMPT_RT | 官方实时补丁,将自旋锁变互斥锁,降低调度延迟 | 内核.config中CONFIG_PREEMPT_RT=y |
| 交叉编译 | 在 x86_64 主机编译 → ARM64 板运行 | aarch64-linux-gnu-gcc |
| Rockchip Linux SDK | 瑞芯微官方 BSP,含 uboot/kernel/rootfs | repo管理,每日同步 |
| SSH 无密登录 | 开发机一键 ssh 板端,无需串口 | 公钥写入~/.ssh/authorized_keys |
三、环境准备:10 分钟搭好“交叉工作台”
1. 硬件清单
| 设备 | 最低配置 | 备注 |
|---|---|---|
| 开发板 | RK3568 EVB / RK3588 SBC | 内存 ≥ 2 GB,eMMC ≥ 16 GB |
| 电源 | 12 V/2 A | 劣质电源会导致随机重启 |
| USB-Type-C 线 | 1 根 | 烧录 & 串口两用 |
| 网线 | 1 根 | 千兆交换机 |
2. 软件清单
| 组件 | 版本 | 获取地址 |
|---|---|---|
| Ubuntu 主机 | 20.04 LTS | 官方 ISO |
| 交叉工具链 | gcc-linaro-11.3-2022.06-x86_64_aarch64-linux-gnu | Linaro |
| Rockchip Linux SDK | stable-4.19-rt / 5.10-rt 分支 | repo命令见下文 |
3. 一键安装依赖(可复制)
#!/bin/bash # install_deps.sh set -e sudo apt update sudo apt install -y git repo curl python3 python3-pip \ build-essential libncurses5-dev libssl-dev flex bison \ android-tools-mkbootimg bc lz4 # 安装交叉工具链 TOOLCHAIN=gcc-linaro-11.3-2022.06-x86_64_aarch64-linux-gnu wget https://releases.linaro.org/components/toolchain/binaries/latest-11/aarch64-linux-gnu/${TOOLCHAIN}.tar.xz sudo tar -xf ${TOOLCHAIN}.tar.xz -C /opt/ echo "export PATH=/opt/${TOOLCHAIN}/bin:\$PATH" >> ~/.bashrc source ~/.bashrc验证:
aarch64-linux-gnu-gcc --version # aarch64-linux-gnu-gcc (Linaro GCC 11.3-2022.06) 11.3.0四、应用场景(300 字):边缘视觉缺陷检测
某食品包装产线,1.2 m 宽传送带速度 30 m/min,每包标签须在线喷码 + OCR 验证。
相机帧率 60 fps,触发信号经光电传感器 → RK3568 GPIO → 实时线程捕获;
PREEMPT_RT 内核保证中断到用户态 ≤ 80 μs;
推理使用 RKNN Lite,在 NPU 上运行 YOLOv5-Prune,单帧 18 ms;
若识别失败,立即通过 EtherCAT 总线驱动气缸剔除,闭环延迟 < 200 ms。
传统 Windows 方案抖动大,剔除位置漂移 ±15 cm;换瑞芯微 + RT Linux 后抖动 ±2 cm,废品率下降 0.7%,年节省 30 万元。
本系列第一篇先搭环境,后续逐步适配 GPIO 实时驱动、RKNN Runtime、EtherCAT 主站,最终交付“一站式边缘视觉控制器”。
五、实际案例与步骤:从 repo 到 ssh 无密登录
5.1 获取 Rockchip Linux SDK(含 RT 补丁)
mkdir ~/rk3568-rt && cd ~/rk3568-rt repo init -u https://github.com/rockchip-linux/manifests -b linux-5.10-rt repo sync -j$(nproc) # 约 6 GB,耗时 10-15 min目录结构:
rk3568-rt/ ├── u-boot/ ├── kernel/ # 已含 PREEMPT_RT 补丁 ├── buildroot/ ├── device/rockchip/ └── envsetup.sh5.2 配置实时内核参数
cd kernel make ARCH=arm64 rockchip_linux_defconfig ./scripts/config --disable CONFIG_SMP_DEFAULT ./scripts/config --enable CONFIG_PREEMPT_RT ./scripts/config --enable CONFIG_HIGH_RES_TIMERS ./scripts/config --set-str CONFIG_LOCALVERSION "-rt-rk3568" make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig # 可选:关闭 DEBUG_FS 减小体积5.3 多线程编译(8 核示例)
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j8 Image dtbs modules # 产出:arch/arm64/boot/Image # arch/arm64/boot/dts/rockchip/rk3568-evb.dtb5.4 生成 Debian 根文件系统(可选 buildroot 快速验证)
cd ../buildroot make rockchip_rk3568_defconfig make -j$(nproc) # 产出:output/images/rootfs.ext45.5 烧录到开发板(maskrom 模式)
# 板子 Type-C 连 PC,按住 maskrom 键上电 sudo upgrade_tool uf Image rk3568-evb.dtb rootfs.ext4 # 重启后串口可见 Linux 5.10.XX-rt-rk3568 启动5.6 网络 & SSH 无密登录
板端串口登录:
# 设置静态 IP(示例) ifconfig eth0 192.168.1.100 netmask 255.255.255.0 echo "nameserver 114.114.114.114" > /etc/resolv.conf开发机:
# 1. 生成密钥 ssh-keygen -t rsa -N "" # 2. 拷贝公钥 ssh-copy-id root@192.168.1.100 # 默认密码 rockchip # 3. 一键登录 ssh root@192.168.1.100成功标志:无需密码进入 shell。
六、驱动开发环境验证:Hello RT Module
6.1 编写最简单的内核模块
/* hello_rt.c */ #include <linux/module.h> #include <linux/rtmutex.h> static int __init hello_init(void) { pr_info("Hello RT World! jiffies=%lu\n", jiffies); return 0; } static void __exit hello_exit(void) { pr_info("Goodbye RT\n"); } module_init(hello_init); module_exit(hello_exit); MODULE_LICENSE("GPL");6.2 Makefile(交叉编译)
ARCH := arm64 CROSS_COMPILE := aarch64-linux-gnu- KSRC := ~/rk3568-rt/kernel obj-m := hello_rt.o all: $(MAKE) -C $(KSRC) M=$(PWD) modules clean: $(MAKE) -C $(KSRC) M=$(PWD) clean6.3 编译 & 插入
make scp hello_rt.ko root@192.168.1.100:/root/ ssh root@192.168.1.100 insmod hello_rt.ko dmesg | tail -5输出:
[ 58.123456] Hello RT World! jiffies=4294937295
→ 证明内核模块编译链、符号表、rt_mutex 均正常。
七、常见问题与解答(FAQ)
| 问题 | 现象 | 解决 |
|---|---|---|
| repo sync 失败 | 443 time out | 换国内镜像repo init -u https://mirrors.ustc.edu.cn/rockchip/... |
| make 报错“aarch64-linux-gnu-gcc not found” | 未导出 PATH | 重新source ~/.bashrc或写绝对路径 |
| 烧录提示“No device found” | maskrom 未触发 | 按住按键再上电,或换 Type-C 线 |
| insmod 报错“Invalid module format” | 版本魔术字不一致 | 确保模块与板端内核同一次编译产出 |
| ssh 连接被拒绝 | 网络不通 | 先ping 192.168.1.100,检查防火墙 / 交换机 |
八、实践建议与最佳实践
版本锁定
把repo manifest导出manifest.lock.xml存 Git,确保半年后仍能复现同一套源码。ccache 加速
export USE_CCACHE=1 && ccache -M 50G,二次编译从 20 min 降到 3 min。Docker 交叉编译(可选)
官方镜像rockchip/linux-build:debian-10已含工具链,CI 直接docker run避免污染主机。串口 & SSH 双保险
网络调崩时还能串口抢救;串口线选 FT232 芯片,兼容性好。实时性提前验证
每次编译完顺手跑cyclictest -p99 -i100 -d60s把 Max 延迟写进 README,后续任何驱动提交若抖动 > 50 μs 立即回退。备份 boot
烧录前dd if=/dev/mmcblk0 of=/boot/boot_backup.img bs=1M count=16,秒级回滚。
九、总结:一张脑图带走全部要点
瑞芯微实时 Linux 环境搭建 ├─ 主机:Ubuntu 20.04 + Linaro 交叉链 ├─ SDK:repo 拉取 rockchip linux-5.10-rt ├─ 内核:make menuconfig 开启 PREEMPT_RT ├─ 烧录:upgrade_tool 一键到 eMMC ├─ 网络:静态 IP + ssh 无密登录 └─ 验证:hello_rt.ko 插入成功