国内开源的嵌入式实时Linux:XtimesLinux

Sina WeiboBaiduLinkedInQQGoogle+RedditEvernote分享




作者email:guohui703@163.com

引言:

Linux实时化研究是业界一个很老的话题,自从RTLinux在1999年采用独创的双内核方式实现Linux实时化以后,采用双内核方式一直是Linux实时研究的一个重要方向。在2005年左右,MontaVista公司在Linux2.6内核上使用抢占补丁的方式实现了linux的软实时,使得Linux内核的实时响应性能大为提升。目前桌面版本的Linux内核大多使用了抢占功能。

采用抢占补丁的方式比双内核方式的一个最大优点在于其编程接口的统一性。在抢占补丁方式中,实时应用与非实时使用可以使用统一的Linux API接口,他们之间的通信方式仍然采用传统的进程间通信方式即可。抢占补丁方式可以实现软实时,在硬实时方面仍然能力不足。MontaVista公司为了实现硬实时,在抢占补丁的基础上使用较为复杂的技术比如将自旋锁改成互斥量、高精度定时器、中断线程化等机制,这些机制的修改涉及到驱动程序已有的运行机理,因此会影响到Linux内核的稳定性,这对于稳定性要求高的场合,比如无线通信以及电信级应用,并不合适。经过业界测试表明,MontavistaLinux对于硬实时系统并不合适。

RTLinux引领的双内核方式通过中断虚拟化的方式能够很好地实现硬实时,虽然其需要为实时任务专门设计一套编程接口,而且实时任务与非实时任务的通信也要使用的专门通信机制,但由于其硬实时性,在一些工业控制等实时要求高地领域有重要的应用之地。在双内核方式中,实时内核接管中断,而非实时内核(即Linux)使用一个软件标志位作为其虚拟中断,虚拟中断的方式把中断控制器完全交给了实时内核,因而能达到很好地实时响应性能。双内核方式除了编程接口的不统一之外,也还有其他不足之处,比如实时内核没有自己的内存管理功能,在内存的分配仍然依赖于Linux; 实时内核虽然接管了中断,但中断的现场仍然是Linux来保存和恢复的。可以说实时内核和非实时内核是紧密耦合的,这对于系统的维护以及稳定性非常不利。

RTLinux在07年被WindRiver收购后,在开源社区就变得不活跃了。不过RTLinux的变种RTAI仍然活跃于开源社区。RTAI是完全免费,开放的,不受RTLinux专利的限制。RTAI代表“Real-Time Application Interface”,它必须与Adeos补丁一起工作。Adeos实现了一个硬件抽象层,其最重要的功能仍然是中断虚拟化,不过它比RTlinux时代的中断虚拟化功能更加完善。硬件抽象层的存在以及其功能完善,使得实时内核和非实时内核之间由紧耦合关系变为松耦合关系,这对于系统的稳定性以及代码维护是非常重要的。硬件抽象层使得Linux所需的物理资源或者从硬件抽象层获得,或者直接访问硬件(针对于Linux专属设备),套用虚拟化术语,Linux已作为实时内核的客户操作系统被调度运行。

RTAI/ADEOS 将Linux作为客户操作系统运行于实时内核之上的方式实际上是嵌入式虚拟化的内容。嵌入式虚拟化(embedded virtualization,又名Hypervisor)是最近几年热门的研究内容,它是为了弥补传统操作系统在实时性、安全性、多核扩展方面的不足而提出的。针对系统实时性的Hypervisor的方案目前主要有WindRiver hypervisor,OKL4,Lynx OS,Xenomai等。嵌入式虚拟化代表了解决Linux实时问题的目前最为先进的方法,但目前正处于推广阶段,开源的方案也比较少,上述方案中只有Xenomai是开源的,但Xenomai一般这针对某个芯片平台提供一个参考的源代码版本,如果要应用到具体平台中,还需要深入的源代码阅读才能完成移植工作,这对于一些设备厂商而言,无疑是一项高的门槛。

针对Xeonmai在平台支持方面的欠缺,笔者所在团队用了近2年半时间开发了XtimesLinux,专门针对ARM平台,而且针对特定开发板提供板级的实时方案,降低使用门槛,而且代码完全开放,希望能被工业控制,信号处理、通信等领域试用,以图在国外厂商所占据的实时基础软件市场中取得立足之地。

一、XtimesLinux的介绍

XtimesLinux是面向嵌入式领域的实时基础软件环境,它由微内核虚拟机Xtimes和Linux操作系统组成。Xtimes采用微内核架构,支持实时进程调度,同时将Linux作为一个超级进程进行调度,目的是利用Linux作为服务进程,提供文件系统、网络等服务。

Xtimes为自主设计,在设计时参考业界流行的各种实时微内核结构,同时对其进行扩展,使之能支持操作系统的虚拟化,能调度操作系统作为一个进程运行。所支持的虚拟化方式为半虚拟化,即要求修改操作系统的源代码,对其重新编译。这种方式在性能上损失更小,更适合嵌入式环境。Xtimes目前版本号为1.0, 现在所能支持的客户操作系统为Linux,所支持的Linux内核版本为2.4以及2.6.28,2.6.29, 2.6.32内核等。

Xtimes的网站为:www.xtimes.org

1.1 XtimesLinux的目的

XtimesLinux定位于嵌入式领域的实时基础软件环境,首先它是实时的基础软件,通过中断虚拟化技术,它可以达到与实时操作系统(Vxworks, uCos等)比拟的实时性要求,以中断响应时间来衡量,其最差的中断响应时间小于50μs,可以用于要求硬实时的工业控制、通信等场合。

其次XtimesLinux能提供丰富的API,涉及到文件系统,网络等,能满足复杂的实时应用要求。XtimesLinux通过调度客户操作系统Linux作为其服务进程,能够提供Linux兼容的API,API的Linux兼容性使得XtimesLinux能够兼容众多已有的嵌入式linux应用,并且使应用程序的开发门槛降低。

1.2 Xtimes与其他虚拟机之比较

业界比较流行的虚拟化方案有VMware,Xen,Virtual Logic等,VMware属于全虚拟化方案,能够运行不经修改的Guest OS,但其结构复杂,对硬件要求非常高,不适合应用于嵌入式。Xen有半虚拟化方案,Guest OS经过修改后能运行于Xen之上,但它主要面向PC以及服务器领域,在嵌入式领域尚未推出成熟的产品。

面向嵌入式领域的虚拟机需要效率高、实时性好、易于移植等特点,Virtual Logic公司推出了应用于嵌入式领域的虚拟机VLX,VLX的目的是将RTOS与RichOS(比如linux)运行于一个处理器上,以节省成本,一个典型的应用即是在手机芯片中,将通信协议栈部分运行于RTOS中,而手机应用部分运行于RichOS之中,RTOS与RichOS都运行于虚拟机VLX之上,只需要使用一个处理器即可。而在现有的大多数手机芯片中,通信协议栈部分和手机应用部分一般是运行于不同处理器上的。下图是VLX的一个应用方案。

图 VirtualLogic的嵌入式虚拟化方案

Xtimes与VLX一样,目的也是在一个处理器上整合RTOS应用与RichOS应用,不过Xtimes并不需要支持RTOS在其上运行,因为Xtimes本身就是由实时微内核扩展而来的,它可以直接支持实时应用。

Xtimes是基于实时微内核的虚拟机,在这一点上,它和L4Linux比较相似。L4 是德国德累斯顿理工大学开发的第二代微内核操作系统,因为其性能比第一个微内核操作系统有了大幅提高,使其得到了学术界与工业界的广泛关注,其中高通公司(QualComm)已经用L4作为基础来研发通信芯片搭载的操作系统。[5]

L4在微内核中提供了线程调度以及线程通信机制,而在微内核之上支持Guest OS(Linux)运行,由Guest OS提供系统服务(见下图),这些与Xtimes都是一致的。但有一个根本的区别:在L4中,Guest OS内核(包括文件系统,网络,内存管理等)是运行在非特权级别的;而在Xtimes中,Guest OS内核是运行在特权级别的。Xtimes将Guest OS运行于特权级别的方式有利有弊,好处是Guest OS能更加高效与微内核通信,而弊端则是Guest OS、以及实时线程可能会相互破坏属于对方的数据,从而影响系统稳定。这个弊端将在后续采取一定办法解决。

图 L4的系统架构
Xtimes虽然作为虚拟机,但是由于它从实时微内核架构演变过来,具备了嵌入式操作系统的某些功能,因此它跟嵌入式操作系统一样,也可以作为嵌入式平台的底层基础软件环境,从这一点来看,它与L4Linux最为相似。 因此在下面同类产品的比较中,不局限于Xtimes与其他虚拟机的比较,而将Xtimes与其他嵌入式操作系统的比较也列入其中,如下:

表格 XtimesLinux与其他基础软件平台的比较

二、 Xtimes的架构

Xtimes作为虚拟机(VMM)能够支持操作系统的虚拟化,运行于虚拟机上的操作系统称为客户操作系统(Guest OS)。虚拟机的结构如下图所示。客户操作系统作为一个超级进程被VMM调度,同时虚拟机支持实时线程调度,实时线程可以处理VMM的输入输出以及硬件抽象层(HAL)的相关工作。 GuestOS一般作为最低优先级的进程,只有当Xtimes中实时线程都运行完毕(阻塞)时,Guest OS才有机会运行。

图 Xtimes的结构,典型情况下,包含一个GuestOS(Linux)以及多个实时线程

关于架构的进一步细节,在网站ww.xtimes.org可下载详细文档。

三、Xtimes在具体平台上的移植

XtimesLinux已经在友善之臂的Mini6410,友坚的utv210平台(S5PV210主芯片)上移植并成功启动了Linux内核,并搭载了busybox文件系统,当然也试验过成功搭载Android文件系统。具体步骤请参考网站:www.xtimes.org

(1个打分, 平均:5.00 / 5)

雁过留声

“国内开源的嵌入式实时Linux:XtimesLinux”有17个回复

  1. gg 于 2012-08-14 4:17 下午

    没有意思,本身这个方向对工业界的影响很小,且技术上不成熟,玩不长

  2. 七棵大树 于 2012-08-14 6:57 下午

    干得不错,准备研究研究

  3. spike 于 2012-08-14 7:51 下午

    Xtimes是否实现了xenomai里面domain的概念?能否在用户空间部署实时任务?之前在x86上做过xenomai的项目,xenomai的好处之一是可以保证用户空间上的线程具备硬实时性,这个对于开发调试以及应用的闭源都有很大便利。

  4. guohui 于 2012-08-14 8:00 下午

    目前xtimes只支持在内核空间部署实时任务,xtimes的实时任务可以与Linux用户态的任务通过FIFO接口通信。
    对于Xenomai的用户态线程的实时支持能力,我们研究了相关代码,在用户态,xenomai其实只支持软实时,如果要硬实时,还是要放到内核态。

  5. kevint 于 2012-08-15 1:29 上午

    个人感觉。。。这个RT除了火星车其他地方没啥用处。。。对于工业界,因为RT反倒拖了其他地方的后腿

  6. matrix 于 2012-08-15 2:09 上午

    最近上火星的好奇,用的我司vxworks,不懂不要在这里乱说,楼上

  7. tonyhu 于 2012-08-15 7:33 下午

    看看。
    虚拟化的概念很有意思。
    前段时间搞linux的RT补丁和xenomai,鼻青脸肿还没跑起来。
    我发现实时linux移植还是有些难度的,如果有专业团队移植或者提供服务那是最好了,平台的难度降低很多,毕竟最终目的是为了做应用,最好不要在这个上面花费太多时间。
    不过我一直有个疑问,有必要系统搞的这么复杂么?难道不可以使用上下位机分布系统来做么?那么复杂,用的人放心么?

  8. beans 于 2012-08-15 7:49 下午

    火星车用的你司写的注释么?

  9. gg 于 2012-08-15 8:08 下午

    写这个文章的人一看,就是在学校里刚混出来的,对于竟争对手的信息,VLX,vmware和OKL4的商业产品知之甚少,估计就是网上抄抄。

  10. matrix 于 2012-08-15 10:49 下午

    beans 大神始终在那里不怎么服气,haha

  11. matrix 于 2012-08-15 10:49 下午

    beans 大神始终在那里不怎么服气,haha

  12. spike 于 2012-08-15 11:32 下午

    “对于Xenomai的用户态线程的实时支持能力,我们研究了相关代码,在用户态,xenomai其实只支持软实时,如果要硬实时,还是要放到内核态。”

    呵呵,请问你们是根据什么判断的?从Xenomai的文档和以及实际使用情况来看,在primary domain的用户空间实时任务是可以做到硬实时的

  13. guohui 于 2012-08-15 11:52 下午

    能否请spike留个QQ或者email,想请教一些xenomai的问题。谢谢。

  14. spike 于 2012-08-16 7:09 下午

    spike.linATgmail.com
    欢迎来信交流

  15. 2b青年. 于 2012-08-16 7:09 下午

    楼上的,你们改动太大的话,估计没人敢用的。
    没什么牛B用户给你们广告,不行的。
    降低了中断延迟和任务抢占延迟,不能用 linux的其它资源,也很痛苦的。 实时的话,有很多需求也必须在规定时间内完成,这个你们有办法吗?

  16. 2b青年. 于 2012-08-16 7:18 下午

    这个东西也算不上 那种KVM类似的虚拟机,只是中断捕获在做分发而已,并不是中断采集和注入。
    如果不用你们的产品,能交流交流实时性的问题吗?

  17. guohui 于 2012-08-16 7:43 下午

    欢迎加我QQ:93884939 交流实时性问题。