核心内容摘要
5分钟搞定!用Docker+Wiki.js搭建个人知识库(附cpolar内网穿透配置)
简介为什么是PREEMPT_RT 瑞芯微市场背景边缘视觉缺陷检测、人脸识别要求帧到帧延迟≤30ms抖动5ms工业机器人对伺服环≤1ms传统Linux调度无法满足。
芯片选型 瑞芯微RK3568/RK3588提供4×A55/A76G52 GPU国产化率95%成本比x86低40%但官方SDK仅提供通用内核。
方案价值 通过集成PREEMPT_RT实现全抢占式调度将Linux中断延迟从ms级降到μs级为后续实时视觉算法、EtherCAT主站打下地基。
掌握本篇移植流程拿到国产化“硬实时”入场券。
核心概念5个关键词先搞懂关键词一句话说明本文出现场景PREEMPT_RT将Linux变成“硬实时”的补丁集支持全抢占源码级集成ARM64 GICv3瑞芯微中断控制器需关闭LPI以降延迟内核configdefconfig瑞芯微默认配置含大量安卓模块裁剪对象module_init()驱动入口RT补丁后可能sleep报错兼容性修复cyclictest测试调度延迟工具帧到帧抖动标尺验收标准
环境准备10分钟搭好移植机
硬件RK3568/RK3588 开发板≥4GB LPDDR4USB-TypeC 串口线1500000波特率32GB SD-CardClass-10以上
软件组件版本获取地址官方SDKRK Linux v
10-rkr3瑞芯微GitHubRT补丁patch-
10-rt
patch.xzkernel.org/projects/rt交叉工具链gcc-linaro-
1
3-
2
06-x86_64_aarch64-linux-gnuLinaro主机OSUbuntu
2
04 x86_64安装依赖包见下一键安装依赖sudo apt update sudo apt install -y build-essential libncurses5-dev \ bison flex libssl-dev bc xz-utils curl
创建工作目录mkdir -p ~/rk-rt cd ~/rk-rt export RT_DIR$PWD
应用场景300字示例边缘视觉缺陷检测工位RK3568USB
0工业相机采集1920×108060fps图像通过GigE视觉协议送入OpenCV实时处理。
产线速度1m/s要求单帧检测IO剔除信号总延迟≤25ms传统Linux调度抖动高达18ms导致漏检率
3%。
采用PREEMPT_RT后中断响应80μs用户态任务调度抖动400μs配合用户态帧缓存机制总延迟稳定在20ms以内漏检率降至
05%达到客户SIL 2安全指标同时保留Linux丰富生态缩短算法迭代周期40%。
实际案例与步骤从源码到boot.img
1 下载并打补丁可复制#
获取官方内核 cd $RT_DIR git clone https://github.com/rockchip-linux/kernel -b v
10-rkr3 rockchip-
10 cd rockchip-
10 #
下载RT补丁 wget https://www.kernel.org/pub/linux/kernel/projects/rt/
10/patch-
10-rt
patch.xz xzcat patch-
10-rt
patch.xz | patch -p1 --dry-run ../dry.log # 确认无冲突后再正式打 xzcat patch-
10-rt
patch.xz | patch -p
1
2 生成并裁剪defconfig# 使用瑞芯微默认配置 make ARCHarm64 CROSS_COMPILEaarch64-linux-gnu- rockchip_linux_defconfig # 开启RT核心功能 ./scripts/config --enable CONFIG_PREEMPT_RT ./scripts/config --disable CONFIG_LPI_CPUIF # GICv3 LPI增加延迟 ./scripts/config --disable CONFIG_ANDROID # 关闭安卓模块 ./scripts/config --disable CONFIG_DEBUG_PREEMPT # 关闭DEBUG减小开销
3 禁用高延迟模块menuconfig可视化make ARCHarm64 CROSS_COMPILEaarch64-linux-gnu- menuconfig # 路径 # - Kernel Features # - Preemption Model (Fully Preemptible (Real-Time)) # - Device Drivers # - Graphics support # - Rockchip Video Decoder (disable) # - Kernel hacking # - printk time stamp (disable) 减少printk抖动保存为.config。
4 编译内核与模块make ARCHarm64 CROSS_COMPILEaarch64-linux-gnu- -j$(nproc) Image dtbs modules # 输出arch/arm64/boot/Image
5 打包boot.imgRK专用# 使用瑞芯微mkimage sudo cp arch/arm64/boot/Image kernel.img sudo cp arch/arm64/boot/dts/rockchip/rk3568-evb.dtb rk
dtb # 创建resource.img含dtb与logo python3 $SDK_DIR/tools/mkimage/mk-resource.sh rk
dtb logo.bmp resource.img # 合成boot.img python3 $SDK_DIR/tools/mkimage/mk-bootimg.py \ --kernel kernel.img \ --resource resource.img \ -o boot.img
6 安装到SD卡并验证实时性# 假设SD为/dev/sdb sudo umount /dev/sdb* sudo dd ifboot.img of/dev/sdb1 bs1M sudo make modules_install ARCHarm64 INSTALL_MOD_PATH/media/$USER/rootfs/插入开发板上电串口登录# 检查RT是否开启 dmesg | grep PREEMPT_RT # 预期PREEMPT_RT
5.
1
71-rt72运行cyclictest# 运行1分钟优先级80 cyclictest -p80 -i100 -d60s -n结果示例T: 0 (
P:80 I:100 C: 600000 Min: 8 Act: 18 Avg: 21 Max: 38Max38μs远低于非RT的
ms移植成功。
六、
常见问题与解答问题现象解决打补丁失败hunk FAILED确认官方SDK与补丁版本差手动合入冲突文件启动卡在Starting kernel未打包resource.img确保dtb已放入resource.imgcyclictest Max200μsCPU节能导致内核cmdline加nohz_full
intel_pstatedisableUSB相机掉帧中断亲和性差将对应IRQ绑定到big核echo 2 /proc/irq/xx/smp_affinity驱动编译报错“might sleep”RT下调度API限制使用rt_mutex代替普通mutex避免在atomic上下文sleep
实践建议与最佳实践版本锁定把RT补丁、defconfig、交叉链哈希写入《软件配置清单》任何升级走MR。
CI自动化GitLab Runner每夜自动跑cyclictestMax100μs即报警。
分区裁剪关闭CIFS/BT/NFC等非产线模块内核体积减30%编译时间减半。
IRQ亲和性视觉帧中断绑定big核控制环任务放little核减少上下文切换抖动。
预留JTAG生产板保留SWD接口便于后期故障注入与SIL认证调试。
文档同步用PlantUML画“启动流程中断路径”图随代码提交auditor点赞。
八、
总结一张脑图带走全部要点瑞芯微PREEMPT_RT移植 ├─ 下载官方SDK RT补丁 ├─ 配置开启PREEMPT_RT裁剪非实时模块 ├─ 编译Image dtbs modules → boot.img ├─ 验证cyclictest Max50μs ├─ 优化IRQ亲和、锁拆分、CI门禁 └─ 认证文档矩阵 故障注入 → SIL 2实时性不是“跑得快”而是“跑得准”。
完成本篇移植后你的瑞芯微平台已具备硬实时基础可放心叠加OpenCV、EtherCAT、ROS 2等实时应用。
下一步请把cyclictest结果贴进Git开启你的国产化边缘视觉/工业控制产品之旅