news 2026/10/28 20:19:21

【瑞芯微平台实时Linux方案系列】第二篇 - 瑞芯微芯片PREEMPT_RT补丁集成与内核移植

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【瑞芯微平台实时Linux方案系列】第二篇 - 瑞芯微芯片PREEMPT_RT补丁集成与内核移植

一、简介:为什么是PREEMPT_RT + 瑞芯微?

  • 市场背景:

    • 边缘视觉(缺陷检测、人脸识别)要求帧到帧延迟≤30ms,抖动<5ms;

    • 工业机器人对伺服环≤1ms,传统Linux调度无法满足。

  • 芯片选型: 瑞芯微RK3568/RK3588提供4×A55/A76+G52 GPU,国产化率>95%,成本比x86低40%,但官方SDK仅提供通用内核。

  • 方案价值: 通过集成PREEMPT_RT实现全抢占式调度,将Linux中断延迟从ms级降到μs级,为后续实时视觉算法、EtherCAT主站打下地基。 掌握本篇移植流程=拿到国产化“硬实时”入场券。


二、核心概念:5个关键词先搞懂

关键词一句话说明本文出现场景
PREEMPT_RT将Linux变成“硬实时”的补丁集,支持全抢占源码级集成
ARM64 GICv3瑞芯微中断控制器,需关闭LPI以降延迟内核config
defconfig瑞芯微默认配置,含大量安卓模块裁剪对象
module_init()驱动入口,RT补丁后可能sleep报错兼容性修复
cyclictest测试调度延迟工具,帧到帧抖动标尺验收标准

三、环境准备:10分钟搭好移植机

1. 硬件

  • RK3568/RK3588 开发板(≥4GB LPDDR4)

  • USB-TypeC 串口线(1500000波特率)

  • 32GB SD-Card(Class-10以上)

2. 软件

组件版本获取地址
官方SDKRK Linux v5.10-rkr3瑞芯微GitHub
RT补丁patch-5.10-rt72.patch.xzkernel.org/projects/rt
交叉工具链gcc-linaro-11.3-2022.06-x86_64_aarch64-linux-gnuLinaro
主机OSUbuntu 20.04 x86_64安装依赖包见下

一键安装依赖:

sudo apt update sudo apt install -y build-essential libncurses5-dev \ bison flex libssl-dev bc xz-utils curl

3. 创建工作目录

mkdir -p ~/rk-rt && cd ~/rk-rt export RT_DIR=$PWD

四、应用场景(300字示例)

边缘视觉缺陷检测工位:
RK3568+USB3.0工业相机,采集1920×1080@60fps图像,通过GigE视觉协议送入OpenCV实时处理。产线速度1m/s,要求单帧检测+IO剔除信号总延迟≤25ms,传统Linux调度抖动高达18ms,导致漏检率0.3%。采用PREEMPT_RT后,中断响应<80μs,用户态任务调度抖动<400μs,配合用户态帧缓存机制,总延迟稳定在20ms以内,漏检率降至0.05%,达到客户SIL 2安全指标,同时保留Linux丰富生态,缩短算法迭代周期40%。


五、实际案例与步骤:从源码到boot.img

5.1 下载并打补丁(可复制)

# 1. 获取官方内核 cd $RT_DIR git clone https://github.com/rockchip-linux/kernel -b v5.10-rkr3 rockchip-5.10 cd rockchip-5.10 # 2. 下载RT补丁 wget https://www.kernel.org/pub/linux/kernel/projects/rt/5.10/patch-5.10-rt72.patch.xz xzcat patch-5.10-rt72.patch.xz | patch -p1 --dry-run > ../dry.log # 确认无冲突后再正式打 xzcat patch-5.10-rt72.patch.xz | patch -p1

5.2 生成并裁剪defconfig

# 使用瑞芯微默认配置 make ARCH=arm64 CROSS_COMPILE=aarch64-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减小开销

5.3 禁用高延迟模块(menuconfig可视化)

make ARCH=arm64 CROSS_COMPILE=aarch64-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。

5.4 编译内核与模块

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc) Image dtbs modules # 输出:arch/arm64/boot/Image

5.5 打包boot.img(RK专用)

# 使用瑞芯微mkimage sudo cp arch/arm64/boot/Image kernel.img sudo cp arch/arm64/boot/dts/rockchip/rk3568-evb.dtb rk3568.dtb # 创建resource.img(含dtb与logo) python3 $SDK_DIR/tools/mkimage/mk-resource.sh rk3568.dtb logo.bmp resource.img # 合成boot.img python3 $SDK_DIR/tools/mkimage/mk-bootimg.py \ --kernel kernel.img \ --resource resource.img \ -o boot.img

5.6 安装到SD卡并验证实时性

# 假设SD为/dev/sdb sudo umount /dev/sdb* sudo dd if=boot.img of=/dev/sdb1 bs=1M sudo make modules_install ARCH=arm64 INSTALL_MOD_PATH=/media/$USER/rootfs/

插入开发板上电,串口登录:

# 检查RT是否开启 dmesg | grep "PREEMPT_RT" # 预期:PREEMPT_RT 5.10.71-rt72

运行cyclictest:

# 运行1分钟,优先级80 cyclictest -p80 -i100 -d60s -n

结果示例:

T: 0 ( 1234) P:80 I:100 C: 600000 Min: 8 Act: 18 Avg: 21 Max: 38

Max=38μs,远低于非RT的2-3ms,移植成功。


六、常见问题与解答

问题现象解决
打补丁失败hunk FAILED确认官方SDK与补丁版本差,手动合入冲突文件
启动卡在Starting kernel未打包resource.img确保dtb已放入resource.img
cyclictest Max>200μsCPU节能导致内核cmdline加nohz_full=1-3 intel_pstate=disable
USB相机掉帧中断亲和性差将对应IRQ绑定到big核:echo 2 > /proc/irq/xx/smp_affinity
驱动编译报错“might sleep”RT下调度API限制使用rt_mutex代替普通mutex,避免在atomic上下文sleep

七、实践建议与最佳实践

  1. 版本锁定
    把RT补丁、defconfig、交叉链哈希写入《软件配置清单》,任何升级走MR。

  2. CI自动化
    GitLab Runner每夜自动跑cyclictest,Max>100μs即报警。

  3. 分区裁剪
    关闭CIFS/BT/NFC等非产线模块,内核体积减30%,编译时间减半。

  4. IRQ亲和性
    视觉帧中断绑定big核,控制环任务放little核,减少上下文切换抖动。

  5. 预留JTAG
    生产板保留SWD接口,便于后期故障注入与SIL认证调试。

  6. 文档同步
    用PlantUML画“启动流程+中断路径”图,随代码提交,auditor点赞。


八、总结:一张脑图带走全部要点

瑞芯微+PREEMPT_RT移植 ├─ 下载:官方SDK + RT补丁 ├─ 配置:开启PREEMPT_RT,裁剪非实时模块 ├─ 编译:Image dtbs modules → boot.img ├─ 验证:cyclictest Max<50μs ├─ 优化:IRQ亲和、锁拆分、CI门禁 └─ 认证:文档矩阵 + 故障注入 → SIL 2

实时性不是“跑得快”,而是“跑得准”。
完成本篇移植后,你的瑞芯微平台已具备硬实时基础,可放心叠加OpenCV、EtherCAT、ROS 2等实时应用。下一步,请把cyclictest结果贴进Git,开启你的国产化边缘视觉/工业控制产品之旅!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/27 8:43:12

汽车行业如何突围?天淳AI+GEO精准获客新策略

汽车行业如何突围&#xff1f;天淳AIGEO精准获客新策略 引言 汽车行业正面临前所未有的挑战。新能源与传统燃油车用户需求分化&#xff0c;客群涵盖年轻上班族、家庭用户、高端商务人士等&#xff0c;偏好差异显著&#xff0c;精准触达难度大。线上线索转化为到店试驾率低&am…

作者头像 李华
网站建设 2026/10/28 15:26:59

SGMICRO圣邦微 SGM58031XMS10G/TR MSOP10 模数转换芯片ADC

特性 单电源电压范围:3V至5.5V.PC总线电压范围:3V至5.5V 低静态电流: 连续模式:255pA(典型值) 掉电模式:0.8pA(典型值) 可选数据速率:6.25SPS至960SPS 输入多路复用器 4个单端输入或2个差分输入 内部可编程增益放大器(PGA) 内部电压参考与振荡器 可选数字比较器 2C兼容串行接口…

作者头像 李华
网站建设 2026/10/27 8:43:12

多路温度采集(有完整资料)

资料查找方式&#xff1a; 特纳斯电子&#xff08;电子校园网&#xff09;&#xff1a;搜索下面编号即可 编号&#xff1a; CP-51-2021-018 设计简介&#xff1a; 本设计是基于单片机的多路温度采集系统&#xff0c;主要实现以下功能&#xff1a; 可通过LCD1602显示温度和状…

作者头像 李华
网站建设 2026/10/27 8:43:12

AI短剧制作小程序源码系统,全智能创作系统源码全览

温馨提示&#xff1a;文末有资源获取方式当AI技术能将短剧制作成本压缩至传统方式的10%以下&#xff0c;当几个人几天内就能无拍摄完成一部剧集&#xff0c;“AI短剧”已从概念走进现实&#xff0c;成为普通人内容创业的黄金赛道。面对广阔前景与激烈竞争&#xff0c;一套功能强…

作者头像 李华
网站建设 2026/10/27 8:51:59

JS防爬虫3板斧

一、核心概念 1.1 JS防爬虫的基本原理 JS防爬虫是指通过JavaScript代码实现的反爬虫措施&#xff0c;其核心思想是&#xff1a; 浏览器执行验证&#xff1a;向客户端返回一段JavaScript代码&#xff0c;只有真实浏览器才能执行动态参数生成&#xff1a;通过JS计算生成动态token…

作者头像 李华