时间:2022-08-18 08:06:15
摘要:基本的LFS已经可以投入使用,如果要实现更加专业的要求就要深入到Linux的内核内部进行改造或构建以实现自己的需求。在嵌入式领域这种需求尤为突出,所以将深入到内核内部进行更专业的系统构建和改造。
关键词:Linux的内核;系统构建;RTOSFS系统
中图分类号:TP316 文献标识码:A 文章编号:1009-3044(2013)18-4249-02
1 RTOSFS基本概念和实现方案
1.1 RTOSFS系统概述
RTOSFS系统涉及到以下几个概念:
1)RT(Real Time)
所谓实时,就是一个特定任务的执行时间必须是确定的,可预测的,并且在任何情况下都能保证任务的时限(最大执行时间限制)。实时又分软实时和硬实时。
2)RTOS (RT Operating System)即实时操作系统。
这里指能满足实时应用需求的计算机操作系统。
3)Linux的实时性限制
内核不可抢占;中断关闭;自旋锁(spinlock);大内核锁;中断总是最高优先级的;调度算法和调度点 。
4)RTOSFS(RTOS From Scratch)即从零构建实时操作系统。RTOSFS是在LFS的基础上通过对内核进行实时化改造,使得构建的系统满足一定的实时性要求。
1.2 RTOSFS实现方案简介
这里采用两种不同的方式对LFS进行实时化改造,这两种不同的方式体现了对内核进行改造的两种方法。
方案1: RTAI 3.6.2+ Linux kernel 2.6.23.1+LFS基础环境
RTAI(RealTime Application Interface)即实时应用程序接口,是由意大利米兰理工大学开发的开源的Linux实时方案,它是通过向Linux内核和硬件之间加入一个小的实时内核来达到实时目的的。
Linux内核作为实时内核的一个进程而不再直接同硬件进行通信,同时,实时进程直接由实时内核进行处理,而普通进程由普通内核进行处理,并且实时内核是可抢占的,实时进程的优先级要高于普通进程和普通Linux内核,所以在按方案1进行搭建实时平台时关键是正确安装内核。
方案2: RT- Preempt Patch 2.6.23.1-rc1 + Linux kernel 2.6.23.1+LFS基础环境
RT- Preempt Patch是由Ingo Molnar和Thomas Gleixner开发的完全开源的Linux内核实时补丁,是通过改写内核源代码来解决Linux的实时性限制。这些实时实现技术包括:中断线程化(包括IRQ和softirq)、用rtMutex取代自旋锁(spinlock)、优先级继承和死锁检测、等待队列优先级化、大内核锁(BKL-Big Kernel Lock)可抢占等。
其他可选的方案有诸如:RTLinux,KURT,资源核等。
2 两种方案实现RTOSFS
2.1 RTAI方案实现RTOSFS
下载最新的RTAI,RTAI的使用是有条件的,RTAI不仅要和相对应的内核版本一起使用,而且还要求内核代码是纯净的内核源代码包,即没有打过任何补丁的包。RTAI如果和这些内核想配合的话会产生不兼容的问题。而LFS是不存在这方面的问题的。RTAI的RTOSFS实现步骤如下:
1)启动LFS,并解压内核源代码包,和RTAI源代码包。
2) 编译安装加入HAL的Linux内核
命令清单:
make menuconfig
make
make modules_install
注意:在内核配置时取消所有APCI选项。否则会编译出错。
3)重新启动系统,选实时内核。
4)编译安装RTAI
5) 前面说过RTAI分为两个部分提供实时功能,在安装完基本RTAI后,可以有选择的安装Service部分。
2.2 RT- Preempt Patch方案实现RTOSFS
和RTAI相比,由于RT- Preempt Patch是采用的直接修改Linux内核方式提供的实时支持,所以RT- Preempt Patch的安装更加的简单。RT- Preempt Patch的安装步骤如下:
1)下载源代码
2)给内核打上实时补丁
3)编译配置和安装打过补丁的内核
命令此略。
3 RTOSFS实时性验证
在此只是验证系统功能,不对实时性强弱做比较。
3.1 实时性验证方案
这里的实时性验证采用RT- Preempt Patch的作者之一的Thomas Gleixner开发的cyclictest测试工具,该测试工具通过创建一个至多个线程来测试系统的延迟时间,该测试工具可以测试SMP系统的实时性,并且有相应的可视化工具,可以转换为更为直观的波形图。这里只用文字模式的检测方式。
方案设计:该文将采用构造的基于LFS的三个操作系统进行验证,这四个操作系统分别为:
1)基础LFS系统,采用普通2.6.23.1内核的LFS系统。
2)加入rt-preempt补丁的LFS系统。
3)加入rtai-3.6.2的LFS系统,内核未裁剪。
3.2 实验结果与比较
实验命令为:./cyclictest -t2 -p 80 -n -i 10000 -l 10000
参数意义为:-t2表示两个线程 ,-p 80表示最高优先级为80 ,-i 10000表示线程间隔时间10000纳秒,-l 10000表示循环10000次。
实验结果见表1,延迟单位为纳秒。
从表中可以看出rt-preempt和rtai的实时性都比普通的Linux内核要好,并且rtai所采用的实时内核的方式的效果更加的明显,但是也可以明显看出,这样的延迟在很多实时应用也还是无法接受的,该文的实时性检测主要目的是验证系统的实时性,对实时性的提高不做讨论。
4 总结
随着互联网的逐渐深入人们的日常生活,现代的个人计算机的操作系统已经无法满足越来越多的人的需求,无论是普通用户还是专业人员的需求必将呈多样化发展,作为通用的操作系统如何满足这些需求就成为亟待解决的问题。
参考文献:
[1] 邹勇,王青,李明树.Linux内核的实时支持的研究与实现[J].计算机研究与发展, 2002(4).
[2] William Stallings.操作系统——精髓与设计原理[M].5版.北京:电子工业出版社,2007.