开源的嵌入式实时Linux: XtimesLinux

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内核等。
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与其他嵌入式操作系统的比较也列入其中,如下:
二、 xtimes的架构表格 xtimeslinux与其他基础软件平台的比较
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

PCB布局的关键:SW节点的电场和磁场?(4)
三星Note7失利,让LG G6捡了便宜,外形大曝光!
实现直线度测量的三种方法
Linux系统中的FBE实现方案和特点
焊接机器人编程入门与编程技巧介绍
开源的嵌入式实时Linux: XtimesLinux
2016年AR和VR市场总投资额高达23亿美元
什么是FTTN?
镀银层氧化失效分析
Linux中shell编程的使用
这十大半导体技术真的会火起来吗?
电动拖把哪个牌子好?一个顶五个最实用!
如何在树莓派上运行Ubuntu
菜鸟总裁万霖:互联网进入下半场,物流是最典型会被升级的行业
Realme刚刚在印度推出了两个新的音频产品
科技老兵的旅行中的技术失误,泪流干了
Xilinx FPGA提供DDR4内存接口解决方案
高位码垛机,高位码垛机适合工业需求性逐步提高
诺基亚8、诺基亚9什么时候上市最新消息:机皇回归,配置升级的高端旗舰,你不期待吗?
基于钙钛矿量子点的光传感和显示双功能LED器件的制作