瑞芯微实时 Linux 开发环境搭建指南
本文介绍在 x86 主机上搭建瑞芯微(RK3568/RK3588)实时 Linux 交叉开发环境的完整流程。涵盖硬件软件清单、Linaro 工具链安装、Repo 拉取 SDK、内核 PREEMPT_RT 配置编译、镜像烧录及 SSH 无密登录。通过 Hello RT 模块验证驱动链,并给出常见问题解决方案与最佳实践建议,适用于边缘视觉检测等低延迟场景。

本文介绍在 x86 主机上搭建瑞芯微(RK3568/RK3588)实时 Linux 交叉开发环境的完整流程。涵盖硬件软件清单、Linaro 工具链安装、Repo 拉取 SDK、内核 PREEMPT_RT 配置编译、镜像烧录及 SSH 无密登录。通过 Hello RT 模块验证驱动链,并给出常见问题解决方案与最佳实践建议,适用于边缘视觉检测等低延迟场景。

| 关键词 | 一句话说明 | 本文出现形式 |
|---|---|---|
| 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 |
| 设备 | 最低配置 | 备注 |
|---|---|---|
| 开发板 | RK3568 EVB / RK3588 SBC | 内存 ≥ 2 GB,eMMC ≥ 16 GB |
| 电源 | 12 V/2 A | 劣质电源会导致随机重启 |
| USB-Type-C 线 | 1 根 | 烧录 & 串口两用 |
| 网线 | 1 根 | 千兆交换机 |
| 组件 | 版本 | 获取地址 |
|---|---|---|
| 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 命令见下文 |
#!/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
某食品包装产线,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 主站,最终交付一站式边缘视觉控制器。
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.sh
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 减小体积
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j8 Image dtbs modules
# 产出:arch/arm64/boot/Image
# arch/arm64/boot/dts/rockchip/rk3568-evb.dtb
cd ../buildroot
make rockchip_rk3568_defconfig
make -j$(nproc)
# 产出:output/images/rootfs.ext4
# 板子 Type-C 连 PC,按住 maskrom 键上电
sudo upgrade_tool uf Image rk3568-evb.dtb rootfs.ext4
# 重启后串口可见 Linux 5.10.XX-rt-rk3568 启动
板端串口登录:
# 设置静态 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 [email protected]
# 默认密码 rockchip
# 3. 一键登录
ssh [email protected]
成功标志:无需密码进入 shell。
/* 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");
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) clean
make
scp hello_rt.ko [email protected]:/root/
ssh [email protected]
insmod hello_rt.ko
dmesg | tail -5
输出:
[ 58.123456] Hello RT World! jiffies=4294937295
→ 证明内核模块编译链、符号表、rt_mutex 均正常。
| 问题 | 现象 | 解决 |
|---|---|---|
| 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,确保半年后仍能复现同一套源码。export USE_CCACHE=1 && ccache -M 50G,二次编译从 20 min 降到 3 min。rockchip/linux-build:debian-10 已含工具链,CI 直接 docker run 避免污染主机。cyclictest -p99 -i100 -d60s 把 Max 延迟写进 README,后续任何驱动提交若抖动 > 50 μs 立即回退。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 插入成功

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online