您的位置首页>企业动态>

基于Linux的嵌入式RTOS的研究你了不了解

导读大家好,我是极客范的本期栏目编辑小友,现在为大家讲解基于Linux的嵌入式RTOS的研究你了不了解问题。随着信息时代的快速发展和互联网的广

大家好,我是极客范的本期栏目编辑小友,现在为大家讲解基于Linux的嵌入式RTOS的研究你了不了解问题。

随着信息时代的快速发展和互联网的广泛应用,3C(计算机、通信、消费者)一体化的趋势已经形成。

1.介绍

20世纪80年代以来,出现了各种商用嵌入式操作系统。这些操作系统大多是为特殊或通用系统开发的,如VxWorks、Windows CE、pSOS、Palm OS、OS-9、LYNXOS、QNX、Lynx等。它们的优点是为用户提供良好的开发环境,提高应用系统的开发效率,运行效率高,实时性好,但缺点是价格高,源代码多。这不仅影响了开发商的积极性,也使得整个产品的成本急剧上升。

根据国内实际,嵌入式系统需要一套简洁度高、界面友好、质量可靠、应用广泛、易于开发、多任务、价格低廉的实时操作系统。

在嵌入式产品的开发中,需要寻找一种廉价的嵌入式实时操作系统,以降低产品的开发成本和系统复杂度。由于Linux的诸多优点,将Linux改造成一个廉价的嵌入式实时操作系统是值得探讨和具有现实意义的。

2.2.Linux的特点。

Linux是天生的网络操作系统,成熟稳定。Linux是开源软件,没有黑盒技术。任何人都可以修改它或者用它来开发自己的产品。Linux系统可以定制,目前系统内核可以做得很小。一个有中文系统和图形界面的核心程序也可以小于1MB,同样稳定。作为一个可以裁减的软件平台系统,Linux是开发嵌入式产品的绝佳资源。全世界很多Linux爱好者都能给Linux开发者提供强大的技术支持。因此,Linux作为廉价嵌入式实时操作系统的选择,是非常有前景的。[2][3]

(1)与硬件芯片紧密集成。

嵌入式Linux的特点是与硬件芯片(如SOC)紧密集成。它不是一个纯软件的Linux系统,而是比一般的操作系统更接近硬件。随着嵌入式Linux的进一步发展,它具备了嵌入式RTOS的所有特点:实时性和与嵌入式处理器的紧密结合。

(2)开源代码。

嵌入式Linux的另一个主要特点是代码的开放性。代码的开放性与后PC时代智能设备的多样性相兼容。代码的开放性主要体现在源代码的可用性上,而Linux代码的开发就像是“集市”开发,根据自己的意愿随机选择并集成新产品。

对于嵌入式Linux,其实BIOS层的功能是在Linux的驱动层实现的。目前在Linux领域,已经出现了专门为Linux操作系统定制的自由软件的BIOS代码,这样的BIOS层功能已经在各种主板上实现。

3.3 .实施机制。RT-Linux。

RT-Linux对Linux内核进行了改造,对Linux内核工作环境做了一些改变,如图1所示:

从上图可以看出,在Linux内核和硬件中断的地方增加了一个RT-Linux内核。Linux控制信号要交给RT-Linux内核处理。在RT-Linux内核中实现了一种虚拟中断机制。Linux本身永远无法屏蔽中断,其中断屏蔽信号和开放中断信号被修改为向RT- Linux发送信号。例如,在Linux中使用“sTI”和“cli”宏指令屏蔽和启用中断,就是向x86处理器发送一条指令,但RT-Linux修改了这些宏指令,从而只修改了RT-Linux中的一些标签。所有中断分为Linux中断和实时中断。如果RT-Linux内核接收到的中断信号是普通的Linux中断,那么设置一个标志位。如果是实时中断,继续向硬件发送中断。在RT Linux中执行sTI打开中断后,那些设置了标志位的Linux中断将继续执行。因此,cli不能禁止RT Linux内核的操作,但可以用来中断Linux。Linux不能自己中断,但RT-Linux可以。

RT-Linux的设计原则:实时内核模块中的工作要尽量少。如果可以在不影响实时性能的情况下在Linux中完成,那么应该尽可能在Linux中完成。因此,RTLinux内核应该尽可能简单。在RT-Linux内核中,不应该等待资源,也不需要使用共享自旋锁(Spin)。

Lock),实时任务和Linux进程间的通信也是非阻塞的,从来不用等待进队列和出队列的数据。

RT-Linux将系统和设备的初始化交给了Linux完成,对动态资源的申请和分配也交给了Linux。RT-Linux使用静态分配的内存来完成硬实时任务,因为在没有内存资源的时候,被阻塞的线程不可能具有硬实时能力。

4.改变Linux内核的体系结构

Linux的内核体系采用的是Monolithic,在这种体系结构中,内核的所有部分都集中在一起,而且所有的部件在一起编译连接。这样虽然能使系统的各部分直接沟通,有效地缩短任务之间的切换时间,提高了系统的响应速度,实时性好并提高了CPU的利用率,但在系统比较大的时候体积也比较大,与嵌入式系统容量小、资源有限的特点不符合。而另外一种内核体系结构 MicroKernel, 在内核中只包括了一些基本的内核功能如创建和删除任务、任务调度、内存管理和中断处理等部分,而文件系统、网络协议栈等部分都是在用户内存空间运行。这种结构虽然执行效率不如Monolithic内核,但大大减小了内核的体积,同时也极大地方便了整个系统的升级、维护和移植,因此更能满足嵌入式系统的特点需要。为此,为使嵌入式Linux的应用更加广泛,可以考虑将Linux目前的Monolithic内核结构中的部分结构改造成MicroKernel体系结构。通过这种折中办法,可以使得到的Linux既具有很好的实时性,又能满足嵌入式系统体积小的要求。

5.RT-Linux的编程接口(API)及编程方法示例

(1)RTLinux的编程和控制接口(API)。

通过使用RTLinux的编程和控制接口(API),可以提供对实时任务的创建和删除、任务的调度和控制等功能。API函数主要有如下几类:

1)中断控制API函数;2)时钟控制和获取;3)线程的创建和删除;4)POSIX方式的驱动接口;5)FIFO设备驱动程序;6)串口驱动程序的API函数;7)mbuff驱动API函数;8)浮点运算API函数。

(2) RTLinux的编程方法示例

该程序的原理是测出在RT-Linux中进行实时任务调度过程中调度需要花费时间的多少。算法如下:

对于每500个周期

等待上一个周期的任务完成

获得当前时间和上次周期任务完成时间的差,就是调度的时间

循环

向FIFO输出500个周期中完成的最大值和最小值。

读取FIFO设备,获取最大值和最小值

在屏幕上打印出来

这种编程方法是进行RT Linux编程的通用方法,将一个任务分为实时部分和非实时部分,在实时部分完成的是实时任务;在非实时部分主要是完成显示等不需要实时的功能。

责任编辑:ct

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。