浅谈linux - RT Linux解决方案

概述

RT-Linux(Real-Time Linux)亦称作实时 Linux,是 Linux 中的一种硬实时操作系统, 它最早由美国墨西哥理工学院的 V.Yodaiken 开发。产品资料提供的 Linux-RT 内核应用了开源的 RT PREEMPT 机制进行补丁。PREEMPT_RT补丁的关键是最小化不可抢占的内核代码量,同时最小化必须更改的代码量,以便提供这种附加的可抢占性。PREEMPT_RT 补丁利用 Linux 内核的 SMP 功能来添加这种额外的抢占性,而不需要完整的内核重写。

注意

Linux-RT 内核与普通 Linux 内核相比,几个主要的相同之处是:

(1) 具有相同的开发生态系统,包括相同工具链、文件系统和安装方法,以及相同的POSIX API 等。

(2) 仍然存在内核空间和用户空间的划分。

(3) Linux 应用程序在用户空间中运行。

Linux-RT 内核与普通 Linux 内核在常规编程方式上的几个主要不同之处是:

(1) 调度策略。

(2) 优先级和内存控制。

(3)基于 Linux-RT 内核的应用程序使用了调度策略后,系统将根据调度策略对其进行调优。

另外,小编所有文章均是自己亲手编写验证,由于文件太多,小编就不在公众号后台一一回复列举了,若需要小编的工程代码,请关注公众号:不只会拍照的程序猿,后台回复需要的工程文件小编看到后会第一时间回复。

移植

RT_linux移植过程

准备好Linux源码机RT补丁文件。

811938f5be39307ef2bbc5a7587bb604.png

将文件拷贝到虚拟机,并解压至kernel_xinx目录。

a0e93a350a104fe5ae8d5da86a2c8402.png

执行命令:sodu patch –p1 < patch-4.9-rt1.patch,打入补丁。

41099ab54d588f625bc7d18f99deac0d.png

执行命令:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig,打开图形配置窗口,进行相关配置。8b1101f858beee1c9f0e50d57458e6b1.png

进入“Kernel Features -> Preemption Model”路径, 选中“Fully Preemptible Kernel (RT)”选项,即可配置为 Linux-RT 内核,此时菜单选项前面变为( X )。

f2148985efb360859561e0a6025138f0.png

配置完毕后,选中<Save>,按Enter键保存配置选项。然后选中<Exit>,按Enter键退出。

84c2a86e3451d73ca01a23c8faa5e825.png

执行命令:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- UIMAGE_LOADADDR=0x0 2080000 uImage -j 16。编译内核。

df0512969a62028705a9d35d8cf8b5f3.png

等待编译完成,目录arch/arm/boot下uImage即为目标文件。

8c31f862e4a4f599099e18f192f0ef1b.png

Linux内核移植(非RT)过程

执行命令:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig,打开图形配置窗口,进行相关配置。747e0dce827537ee3a23d318ac8ee144.png

进入“Kernel Features -> Preemption Model”路径, 选中“Preemptible Kernel (Low-Latency Desktop)”选项,即可配置为 非RT 内核,此时菜单选项前面变为( X )。

300b083a1643142dce5bc664f7536247.png

配置完毕后,选中, 按 Enter 键保存配置选项。然后选中, 按 Enter 键退出。

27b0cad110cf00f3a1fef04da98119b8.png

执行命令:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- UIMAGE_LOADADDR=0x0 2080000 uImage -j 16。编译内核。

764cf42b271a637ea45bbca1adabbc71.png

等待编译完成,目录arch/arm/boot下uImage即为目标文件。

ee463be5f8a044644a0fe3c6ef03f0ff.png

Cyclictest

Cyclictest 常用于实时系统的基准测试,是评估实时系统相对性能的最常用工具之一。Cyclictest 反复测量并精确统计线程的实际唤醒时间,以提供有关系统的延迟信息。它可测量由硬件、固件和操作系统引起的实时系统的延迟。

为了测量延迟, Cyclictest 运行一个非实时主线程( 调度类 SCHED_OTHER) ,该线程以定义的实时优先级( 调度类 SCHED_FIFO) 启动定义数量的测量线程。测量线程周期性地被一个到期的计时器( 循环报警) 所定义的间隔唤醒, 随后计算有效唤醒时间,并通过。

编译 Cyclictest 工具

将产品资料rt-tests.tar.gz 压缩包复制到 Ubuntu 系统, 执行如下命令将其解压。

0a682bba4a4a8a7786c1d8e839bb7bf9.png

进入解压生成的 rt-tests 源文件目录,执行 source 命令加载平台 PetaLinux 环境变量。命令中的 PetaLinux 路径请根据实际情况修改。加载完成后,在案例编译时即可依赖PetaLinux 开发包自带的开发环境和运行库。

454d9e22adf1eebaa997cef84414e404.png

等待编译完成后,目录下cyclictest为目标文件,将其拷贝到目标机。

6573d798a255e40d5a9e4ddd4651c0ab.png

cyclictest命令说明

参数

解析

T(Thread)

线程索引和线程

P(Priority)

ID线程的优先级

I(Interval)

延迟,测量线程的预期唤醒周期

C(Count)

测量延迟的次数

Min(Minimum)

测量的最小延迟(单位 us)

Act(Actual)

最近一次测量的延迟( 单位 us)

Avg(Average)

平均延时(单位 us)

Avg(Average)

测量的最大延迟(单位 us)

测试

标准linux测试

启动目标板,加载镜像选择标准linux内核镜像。

c58776c1115a2aac729c987a3e77b04d.png

进入Cyclitest文件目录。

aed3b77789df5539df504c9b365da9c3.png

执行命令:./cyclictest -t5 -p98 -m -n -D10m,进行实时性性能测试。

f0cbd0a4a582174140a8570d5b2bbdc1.png

RT_linux测试

启动目标板,加载镜像选择RTlinux内核镜像。

6a92229fb6bac54cdc7332b61778cce8.png

进入Cyclitest文件目录。

e2f119526fc231221bcbe16b1823077e.png

执行命令:./cyclictest -t5 -p98 -m -n -D10m,进行实时性性能测试。

c298450d1b9109b7ceb30c6e153cc939.png

结论:对比测试数据,可看到基于 Linux-RT-4.9.0 内核的系统的延时更加稳定,最大延时更低,系统实时性更佳。

往期 · 推荐

实时系统vxWorks - 任务(重要)

实时系统vxWorks - 加载应用程序的方法

实时系统vxWorks - 在线调试

实时系统vxWorks - 虚拟机环境搭建

实时系统vxWorks - zynq7020移植vxWorks​​​​​​​​​​​​​​​​​​​​​​​​​​​​

### Linux-RT 实时操作系统的特性 Linux-RT 是一种通过补丁增强标准 Linux 内核实时性能的操作系统版本。它通过对调度器和中断处理机制的改进,提供更严格的实时响应能力[^1]。以下是其主要特性: #### 1. **硬实时支持** - Linux-RT 提供了硬实时的支持,这意味着它可以满足严格的时间约束条件下的任务执行需求。这种能力对于工业自动化、机器人控制和其他时间敏感型应用至关重要。 #### 2. **优先级继承协议 (PIP)** - PIP 被用于解决优先级反转问题,在多线程环境中确保高优先级的任务不会被低优先级任务阻塞过长时间[^2]。 #### 3. **可抢占内核** - 默认情况下,Linux 的某些部分是非抢占式的,这可能导致延迟增加。然而,Linux-RT 补丁允许几乎所有的内核代码都可以被更高优先级的任务打断,从而显著降低最大延迟。 ```bash # 查看当前内核是否启用 RT 补丁 uname -r | grep PREEMPT_RT ``` --- ### 配置方法 配置 Linux-RT 主要涉及以下几个方面: #### 1. **安装预编译的 RT 内核** - 对于大多数开发者来说,最简单的方法是从发行版仓库获取已经打上 RT 补丁的内核包并完成安装。 ```bash sudo apt install linux-image-realtime-amd64 ``` #### 2. **手动构建自定义 RT 内核** 如果需要特定的功能或者优化,则可以下载官方发布的稳定内核源码,并应用最新的 `-rt` 补丁系列。 ```bash wget https://www.kernel.org/pub/linux/kernel/projects/rt/<version>/patch-<kernel_version>-rt.patch.xz xzcat patch-<kernel_version>-rt.patch.xz | patch -p1 make menuconfig make -j$(nproc) sudo make modules_install install ``` #### 3. **调整实时参数** - 可以通过 `sysctl` 或者 `/etc/security/limits.conf` 文件来设置进程的最大优先级范围以及 CPU 时间片分配策略等。 --- ### 使用场景与实践 当部署 Linux-RT 系统时,通常会结合一些专门设计用来评估实时性的工具来进行调试和验证工作效果如何达到预期目标。 #### 测试工具推荐 - **Cyclictest**: 这是一款广泛使用的测量最小及平均延迟能力的应用程序。 - **Iperf**: 如之前提到过的那样,可用于模拟网络流量负载情况进而观察整个平台表现状况。 ```python import os os.system('cyclictest --priority=80') ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不只会拍照的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值