电子产业一站式赋能平台

PCB联盟网

搜索
查看: 177|回复: 0
收起左侧

嵌入式系统采用linux系统,怎样保证实时性?

[复制链接]

404

主题

404

帖子

5090

积分

四级会员

Rank: 4

积分
5090
发表于 2025-3-11 11:01:00 | 显示全部楼层 |阅读模式
  • 前言
  • 本篇环境
  • 实时内核
  • 主要特性
  • 补丁做了哪些事情
  • 安装和使用实时补丁
  • 验证实时内核
  • 不打实时内核补丁空载跑效果
  • 不打实时内核补丁满载跑CPU压力效果
  • 打实时内核补丁空载跑效果
  • 打实时内核补丁满载跑CPU压力效果
  • 实时内核的应用场景
  • 总结
    前言 Linux 内核实时补丁(Real-Time Patch,通常称为 PREEMPT-RT 或 RT 补丁)是一项旨在为 Linux 内核提供实时性能的补丁。它通过降低内核延迟、提高可预测性和响应速度,使得 Linux 系统能够满足对时间敏感的应用需求,如工业控制、音频处理、机器人技术等。
    本篇环境 硬件平台:飞凌OK3588开发板
    内核源码:5.10.66-rt53
    编译环境:Ubuntu 20.04 LTS
    编译工具链:aarch64-linux-gnu-
    实时内核 主要特性
  • 低延迟:RT 补丁使得内核能够更快速地响应外部事件,减少了系统响应时间和处理延迟。
  • 高优先级调度:为实时任务提供了更高的优先级调度,确保关键任务能够在预期的时间内完成。
  • 抢占支持:通过增强内核的抢占能力,允许实时任务在任何时刻打断其他任务,尤其是长时间运行的内核代码。
  • 锁的优化:对内核锁的使用做了优化,减少了锁竞争和临界区的时间。
  • 更好的线程处理:针对实时线程的调度策略进行了改进,以更好地支持高优先级任务。
    [/ol]补丁做了哪些事情
  • 高分辨率定时器:减少精度误差,精确纳秒级延时。Linux驱动基础 | 高分辨率定时器的使用
  • 中断线程化:采用内核线程执行中断处理函数,实时任务不会被中断抢占
  • 自旋锁 spinlock_t 改为实时互斥锁 rt_mutex :自旋锁 spinlock_t保护的临界区是不可抢占的,导致实时进程不能被及时调度,实时内核使用实时互斥锁 rt_mutex实现自旋锁,临界区是可以抢占的,所以可以实现优先级继承,避免优先级反转问题,从而更适合实时应用。[/ol]补充下优先级继承和优先级反转的概念
    什么是优先级反转问题
    假设进程1的优先级低,进程2的优先级高。进程1持有互斥锁,进程2申请互斥锁,因为进程1已经占有互斥锁,所以进程2必须睡眠等待,导致优先级高的进程2等待优先级低的进程1,如果进程2是实时进程,就会影响进程2的实时性
    如果存在进程3,优先级在进程1和进程2之间,那么情况更糟糕。假设进程1仍然持有互斥锁,进程2正在等待。进程3开始运行,因为它的优先级比进程1高,所以它可以抢占进程1,导致进程1持有互斥锁的时间延长,进程2等待的时间延长
    什么是优先级继承
    优先级继承可以解决优先级反转问题。如果低优先级的进程持有互斥锁,高优先级的进程申请互斥锁,那么把持有互斥锁的进程的优先级临时提升到申请互斥锁的进程的优先级。在上面的例子中,把进程1的优先级临时提升到进程2的优先级,防止进程3抢占进程1,使进程1尽快执行完临界区,减少进程2的等待时间。
    实时互斥锁(rt_mutex)实现了优先级继承。锁的等待者按优先级从高到低排序,如果优先级相等,那么先申请锁的进程的优先级高。持有锁的进程,如果它的优先级比优先级最高的等待者低,那么把它的优先级临时提升到优先级最高的等待者的优先级
    安装和使用实时补丁要使用实时补丁,您通常需要:
  • 下载内核源代码:获取您希望补丁的内核版本的源代码。[/ol]wget https://www.kernel.org/pub/linux/kernel/vX.Y/linux-X.Y.Z.tar.xz
  • 下载 RT 补丁:从官方的 RT 补丁网站下载与您内核版本匹配的补丁。
    RT 补丁通常可以在 https://www.kernel.org/pub/linux/kernel/projects/rt/ 找到
  • 应用补丁
    [/ol]tar -xf linux-X.Y.Z.tar.xz
    cd linux-X.Y.Z
    patch -p1
  • 配置内核
    在内核源代码目录中运行以下命令,以配置内核选项:
    [/ol]make menuconfig
    在配置菜单中,您可以启用实时选项。确保启用了 Preemption Model 选项,并选择适当的实时选项。
  • 编译和烧录内核:[/ol]编译内核
    make
    烧录内核
    ./upgrade_tool di -b boot.img
  • 重启系统:重启系统以使用新的内核。[/ol]验证实时内核 您可以使用 uname 命令检查当前运行的内核版本:
    uname -r
    如果内核是实时内核,版本号中通常会包含 -rt 后缀。
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表