赞
踩
概述
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补丁文件。
将文件拷贝到虚拟机,并解压至kernel_xinx目录。
执行命令:sodu patch –p1 < patch-4.9-rt1.patch,打入补丁。
执行命令:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig,打开图形配置窗口,进行相关配置。
进入“Kernel Features -> Preemption Model”路径, 选中“Fully Preemptible Kernel (RT)”选项,即可配置为 Linux-RT 内核,此时菜单选项前面变为( X )。
配置完毕后,选中<Save>,按Enter键保存配置选项。然后选中<Exit>,按Enter键退出。
执行命令:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- UIMAGE_LOADADDR=0x0 2080000 uImage -j 16。编译内核。
等待编译完成,目录arch/arm/boot下uImage即为目标文件。
Linux内核移植(非RT)过程
执行命令:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig,打开图形配置窗口,进行相关配置。
进入“Kernel Features -> Preemption Model”路径, 选中“Preemptible Kernel (Low-Latency Desktop)”选项,即可配置为 非RT 内核,此时菜单选项前面变为( X )。
配置完毕后,选中, 按 Enter 键保存配置选项。然后选中, 按 Enter 键退出。
执行命令:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- UIMAGE_LOADADDR=0x0 2080000 uImage -j 16。编译内核。
等待编译完成,目录arch/arm/boot下uImage即为目标文件。
Cyclictest
Cyclictest 常用于实时系统的基准测试,是评估实时系统相对性能的最常用工具之一。Cyclictest 反复测量并精确统计线程的实际唤醒时间,以提供有关系统的延迟信息。它可测量由硬件、固件和操作系统引起的实时系统的延迟。
为了测量延迟, Cyclictest 运行一个非实时主线程( 调度类 SCHED_OTHER) ,该线程以定义的实时优先级( 调度类 SCHED_FIFO) 启动定义数量的测量线程。测量线程周期性地被一个到期的计时器( 循环报警) 所定义的间隔唤醒, 随后计算有效唤醒时间,并通过。
编译 Cyclictest 工具
将产品资料rt-tests.tar.gz 压缩包复制到 Ubuntu 系统, 执行如下命令将其解压。
进入解压生成的 rt-tests 源文件目录,执行 source 命令加载平台 PetaLinux 环境变量。命令中的 PetaLinux 路径请根据实际情况修改。加载完成后,在案例编译时即可依赖PetaLinux 开发包自带的开发环境和运行库。
等待编译完成后,目录下cyclictest为目标文件,将其拷贝到目标机。
cyclictest命令说明
参数
解析
T(Thread)
线程索引和线程
P(Priority)
ID线程的优先级
I(Interval)
延迟,测量线程的预期唤醒周期
C(Count)
测量延迟的次数
Min(Minimum)
测量的最小延迟(单位 us)
Act(Actual)
最近一次测量的延迟( 单位 us)
Avg(Average)
平均延时(单位 us)
Avg(Average)
测量的最大延迟(单位 us)
测试
标准linux测试
启动目标板,加载镜像选择标准linux内核镜像。
进入Cyclitest文件目录。
执行命令:./cyclictest -t5 -p98 -m -n -D10m,进行实时性性能测试。
RT_linux测试
启动目标板,加载镜像选择RTlinux内核镜像。
进入Cyclitest文件目录。
执行命令:./cyclictest -t5 -p98 -m -n -D10m,进行实时性性能测试。
结论:对比测试数据,可看到基于 Linux-RT-4.9.0 内核的系统的延时更加稳定,最大延时更低,系统实时性更佳。
往期 · 推荐
实时系统vxWorks - zynq7020移植vxWorks
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。