浅谈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​​​​​​​​​​​​​​​​​​​​​​​​​​​​

  • 6
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 如果您在搜索 "linux-image-rt-generic" 包时没有找到结果,可能是因为您的 Linux 发行版不支持这个包。 "linux-image-rt-generic" 是 Linux 内核的一个发行版,它是专门为实时应用设计的。实时内核是一种特殊的内树,它提供了比普通内核更精确的时间响应,并且可以用于控制硬件设备或执行其他对实时性要求较高的任务。 不同的 Linux 发行版可能支持不同的内核版本,包括实时内核。因此,如果您的发行版不支持 "linux-image-rt-generic" 包,则可能无法在系统中安装这个包。如果您想要使用实时内核,建议您查看您的发行版是否提供了其他的实时内核包,或者考虑更换支持实时内核的发行版。 ### 回答2: 搜索不到"linux-image-rt-generic"包可能有以下几个原因: 1. 软件源配置错误:请先检查系统的软件源配置是否正确。可以使用命令`sudo apt update`来更新软件源,并确保已添加正确的软件源。 2. 包名错误:可能是因为包名输入错误导致搜索不到。请确保输入的包名正确,大小写及拼写是否与实际相符。 3. 软件包未在软件源中提供:Linux发行版的软件源中可能没有提供"linux-image-rt-generic"包。这种情况下,可以尝试使用其他类似的包名或在其他软件源中查找。 4. 软件源未更新:有时软件源可能未及时更新,导致新添加的软件包无法搜索到。尝试使用`sudo apt update`命令更新软件源,然后重新搜索。 5. 网络连接问题:如果网络连接存在问题,可能无法搜索到相关软件包。请确保网络连接正常,可以尝试重新连接网络或更换网络环境进行搜索。 如果以上方法仍然无法搜索到"linux-image-rt-generic"包,可能需要进一步调查确认该软件包是否可用。可以通过在搜索引擎或相关Linux社区中查询相关信息,或者咨询专业人士来获取更准确的帮助。 ### 回答3: 搜索不到linux-image-rt-generic包可能是因为该包在软件源中不存在。linux-image-rt-generic是一个针对实时操作系统RTOS)的Linux内核镜像包,用于支持实时应用程序的运行。通常情况下,标准的Linux内核中并不包含实时功能,因此需要安装该特定内核包来获得实时性能。 要解决这个问题,我们可以尝试以下几种方法: 1. 检查软件源设置:首先,确保你的软件源配置正确,并且已经添加了相应的仓库。如果软件源设置错误或者缺少必要的仓库,在搜索时就无法找到这个包。 2. 更新软件源:有时,软件源可能没有及时更新,并且缺少某些软件包。可以尝试更新软件源,然后重新搜索该包。 3. 检查包名称拼写:确保你正确输入了包名称。一个常见的错误是拼写错误,导致搜索不到包。可以通过复制粘贴包名称来避免这个问题。 4. 手动下载安装:如果上述方法都无法解决问题,可以尝试手动下载该包的安装文件,并使用包管理器进行安装。你可以在官方网站或者其他可信的软件源中找到这个包的下载链接。 无论哪种方法,都要确保你的系统和软件源设置正常,并且包名称正确。如果问题仍然存在,可能是该包在当前软件源中不可用,你可能需要寻找其他途径来获取并安装该特定的实时内核包。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不只会拍照的程序猿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值