Fwd: 上周工作记录

13 views
Skip to first unread message

zhiwen hu

unread,
Apr 20, 2009, 12:22:07 AM4/20/09
to tige...@googlegroups.com


1)上周主要是了解学习RTAI,并尝试修改圆网印花机界面的架构,架构初步设想如下

将原来Qthread封装的任务(除界面任务外),修改为RTAI_task封装的任务,RTAI_task任务运行在内核空间(内核模块方式),由RTAI微内核调度,界面任务依旧运行在用户空间,由普通linux内核调度

运动控制卡任务,PLC串口转发任务,主面板串口转发任务,业务处理任务   都运行在内核空间,任务间采用mailbox(邮箱)或者MsgQueue(消息队列)通讯

用户界面任务依旧使用Qt编程,运行在普通linux用户空间

内核和用户间通信,采用(shared mem)共享内存

2)我做了个简单的串口通讯实验,串口驱动采用RTAI提供的实时串口驱动,将9针串口的RX TX绕接,往串口中写4个字节,然后看看在多长时间,串口接受到数据,根据我在RTAI用户空间的测试用例,在115200BPS速率下面,从开始发送到接受到全部数据,可以保证在1ms内完成。
此时我并没有让系统处于重负载,但是此测试还是可以说明RTAI对于我们的串口转发的实时要求来说还是基本可以使用的

3)接下来工作及可能的风险
由于RTAI系统的编程和设计实际上脱离普通linux的应用编程的,对RTAI的使用,要求有如下条件

A 熟悉内核的编程模型,RTAI模块就是内核的模块
B 对于在RTAI中使用的实时设备要求有相应的驱动,现在我手上只有一个RTAI自带的实时串口驱动,对于我扩展的PCI串口卡还不支持,另外MACH4运动控制卡的设备驱动也没有
熟悉内核编程模型和驱动取得都要求比较长的时间才可以满足。

4)对于RTAI系统的简介
普通linux内核是个巨大的混合体,它现在(2.6内核)虽然也支持高优先级任务的抢占,但是对于硬实时任务来说,还是不够快,所以对于linux的实时化,一直有2个途径
A 修改linux的内核以及应用,让他具更快的调度频率 ,这个典型的例子是MontaVista Linux
B 采用双内核,一个是实时的微内核,普通linux内核作为权限最低任务运行,例子有RTlinux 、RTAI 、xenomai


对于A来说,是个浩大的工程(修改检查内核和应用的代码),其实时性在理论上不好保证,所以它的应用场合就主要是手机和机顶盒等不要求硬实时的场合,并且此方案都是商业系统公司在提供

对于B来说,实现工作量比较小,对应用的修改也很小,而且可以实现真正的硬实时(理论上),所以主要应用在控制的场合


RTAI系统是个典型的双核心操作系统,包含RTAI本身微内核,普通linux大内核,他们都是运行在ADEOS抽象层上的,只是RTAI内核的优先级比普通linux内核优先级高,所以实时任务,都是在RTAI中优先调度,只有RTAI没有实时任务后,才轮到普通linux内核运行

ADEOS是在硬件和内核之间建立了一个层,他截获硬件的中断,并分发给内核

5)对于实时系统的思考
本来linux是没有实时的设计目的,但是由于越来越多应用向linux平台移植和靠近,而部分应用又有着实时的要求,所以就出现了上面linux实时方案,可见linux实时化是个妥协的方案,在单系统上集成实时任务和非实时任务;但是由于实时linux本身的固有的复杂度,其应用注定是复杂的,充满挑战的,而且实时linux其本身实时性能受到大内核的影响,linux大内核还是会或多或少的影响应用的最长调度时间,所以实时linux其实是性能并没有真正发挥CPU的实时性,这个是其本身的固有特征;实时linux实时个人认为最好的应用场合就是:硬实时要求时间不严格(1ms级别),要求有丰富的界面、对现存的应用改造、缩短开发周期(建立在熟悉linux和设备驱动的基础上)

对于真正严格要求的硬实时系统,如果想要合理使用CPU的能力,那么最好的方法还是将任务分割开,实时任务和非实时任务运行在不同的CPU上,这样实时任务就可以采用低档的CPU(单片机系统或者UCOS),专注于其本身的任务,非实时任务运行在高档的CPU上,跑着界面系统;两个CPU间通讯来协调处理。如果系统实时任务太多,那么可以增加更多的CPU,将各个任务放置在不同的CPU上。

当然,对于实时系统的分析,实际情况往往更为复杂,也存在单片机系统主要跑实时任务,辅助跑非实时任务的情况。这些要具体情况具体分析,决定采用那个系统来实现。

总的来说实时linux本身还是使用在对实时反应要求不高的场合,在硬实时应用上,要求使用者具备较多的系统知识积累,并反复测试,对它的使用要场合要谨慎分辨。

附件是个RTAI的学习文档,有其性能测试,大家可以参考看看!

由于刚开始接触RTAI及内核编程,错误之处,望大家指正,先谢谢了!


--

胡志文
QQ        :54219308
Mobile   :13510180486(深圳) 13918353735(上海)
座机:021-62778882-95
上海海泰克系统工程有限公司
长寿路295弄8号楼3楼D座
专注于工业自动化和工业嵌入设备



--
胡志文
QQ        :54219308
Mobile   :13510180486(深圳) 13918353735(上海)
座机:021-62778882-95
上海海泰克系统工程有限公司
长寿路295弄8号楼3楼D座
专注于工业自动化和工业嵌入设备
RTAI实时系统.rar
Reply all
Reply to author
Forward
0 new messages