ARM公司是世界最大的半导体知识产权供应商,拥有全球近200家半导体公司的客户。目前,80%的GSM手机,99%的CDMA手机,以及未来3G手机也都是采用基于ARM核的嵌入式处理器。提供研究分析信息的机构 Gartner Inc,2003年6月份统计,2002年ARM在全球半导体IP供应商中排名第一,占市场份额的19.8%,销售收入达1.8亿美圆,比2001年增长 10%。
目前,除了像TI OMAP, Intel的Xscale和Motorola的IMX系列这样的移动终端处理器采用ARM核外,也还有象Samsung, Atmel, Sharp, OKI和Philip等半导体公司设计一些通用ARM核的处理器,可以广泛应用在各种嵌入式系统,现在在市场上看到比较多的有S3C44B0, 4510,2410,AT91系列和Intel PXA255等。
ARM处理器是32位设计,同时也配置了16位指令集,软件可以以16位编码与等价32位代码相比,占用的存储器空间可以节省约35%。ARM处理器目前有ARM7, ARM9, ARM9E, ARM10, ARM11系列产品和来自合作伙伴Intel Xscale和Strong ARM系列ARM7,适合于中低端的网络设备、终端、各种通用型的嵌入式应用和工业控制等领域。ARM9适合于智能手机、PDA和先进的控制管理和仪器仪表应用。Intel Xscale系列产品提供了高性能价格比、低功耗、适用于智能无线终端、PDA、家庭网络和网络存储器设备等应用。
嵌入式操作系统是ARM CPU重要的软件基础
从8位/16位单片机发展到以ARM CPU核为代表的32位嵌入式处理器,嵌入式操作系统将替代传统的由手工编制的监控程序或调度程序,成为重要的基础组件。嵌入式操作系统可以提供ARM CPU核和外设的设备管理,如核的初始化、MMU(内存管理单元)、定时器、中断、串口、SPI、GPIO、以太网、图形接口等,嵌入式操作系统提供任务调度、内存管理、中断处理、同步互斥机制、文件系统和网络功能,更重要的一点是嵌入式操作系统对应用程序可以起到屏蔽的作用,让应用程序员面向操作系统级开发应用软件,并易于在不同的基于ARM核的嵌入式处理器上移植。
嵌入式操作系统都一般具有一定的实时性,易于裁剪和伸缩,可以适合于从ARM7 到Xscale各种ARM CPU和各种档次的应用,嵌入式操作系统可以使用广泛流行的ARM开发工具,如ARM公司的SDT/ADS和Real View、IAR EW等也可以使用开源的软件,如GCC/GDB、KDE或Eclipe开发环境,市场上还有商业厂商的专用的开发工具,如Tornado、μC /View、μC/KA、CODE/Lab、Metroworks等.
本文就目前国内在ARM CPU上广泛采用的三种嵌入式操作系统做个分析,μC/OS-II、μCLinux和嵌入式Linux。后两种同属于Linux,前者是针对没有MMU的微处理器,如ARM7 TDMI核,后者可适用于绝大多数有MMU的微处理器中,如ARM920T,当然,文章也会涉及到其它支持ARM CPU的嵌入式操作系统。
μC/OS-II嵌入式实时内核
由Jean Labrosse先生著,邵贝贝老师翻译的《嵌入式实时操作系统μC/OS-II》先后由电力出版社(第一版)和航空航天大学出版社出版(第二版)发行了近万册,相信有数以千计的学生、老师和工程师正在使用μC/OS-II,在过去的一年中(2003),在《电子产品世界》、《电子设计应用》和《单片机和嵌入式系统应用》等杂志和各种学术会议上的有μC/OS-II相关论文就有几十余篇。全世界数百种设备已经在使用μC/OS-II,包括如手机、路由器、不间断电源、飞行器、医疗设备和工业控制设备,在中国也已经有包括香港权智,首科希电,安控科技在内的10余家公司购买了产品授权。
μC/OS-II已经有ARM7TDMI、ARM9和Strong ARM等各种ARM CPU的移植,支持包含Atmel、Hynix、Intel、Motorola、Philips、Samsung、Sharp等公司的ARM核的CPU。 μC/OS-II的移植也相当容易,与CPU相关的代码包装在三个文件中,os_cpu.h,os_cpu_a.asm,os_cpu_c.c,而且 Jean Labrosse先生的应用笔记AN-1011和AN-1012对ARM7、AN-1337对ARM9的移植过程都做了详细的说明。
μC/OS-II有60余个系统调用,覆盖任务、定时器、信号量、事件标志、邮箱、队列和内存管理,已经包含了传统嵌入式操作系统内核(如PSOS,VRTX)的功能,还支持互斥型信号量(Mutual Exclusion Semaphone),这是90年代的嵌入式操作系统内核,如Vxworks和VRTXsa才有的技术。
μC/OS-II因为是可抢占的实时内核,所以μC/OS-II与商业嵌入式实时内核在性能上没有什么差异,μC/OS-II没有用户态和内核态,任务(线程)或中断和任务切换的响应可以很快,主要是和不同的ARM CPU相关的。最新的2.7x版本还增加了算法以避免在移植中修改OSINTCEXSW()中的堆栈指针。这样可以保证μC/OS-II在不同的CPU上运行更稳定,移植更方便。
总之,μC/OS-II是一个非常容易学习(有一本很好的讲解很清楚的书),结构简单,功能完备和实时性很强的嵌入式操作系统内核,适合于各种嵌入式应用以及大专院校教学和科研。
μC/OS -II目前除了内核外还有商业化文件系统μC/FS,图形系统μC/GUI以及任务调试工具μC KA和μC View,μC/OS-II自己目前也有TCP/IP。如果需要,可以购买商用的TCP/IP,如InterNiche (www.iniche.com),也可以采用免费的TCP/IP项目如LWIP (http://www.sics.se/~adam/lwip/),但无论在功能还是稳定性与商业代码无法比拟。
最后需要说明,μC/OS-II不是免费软件,任何人学习使用μC/OS-II需要购买《嵌入式实时操作系统μC/OS-II》一书,使用了μC/OS-II的产品需要购买产品生产授权,购买了此授权的还可以得到开发期间的技术支持和升级服务。
IAR PowerPAC操作系统
IAR PowerPac for ARM是老牌欧洲瑞典工具公司IAR开发的一个经过整合的32bit RTOS和中间件家族,包括一个占用存储器极少的实时操作系统和一个通用的文件系统。还有USB协议栈和TCP/IP v4网络协议栈。IAR PowerPAC适合于不同产业中各种各样的嵌入式应用,例如测试与测量、工控、电信、医疗以及消费类电子产品等。
IAR PowerPac for ARM能够与IAR Embedded Workbench无缝集成,即使面对最复杂的应用也能提供完整的开发环境。IAR PowerPac 是一个有丰富功能的实时操作系统( RTOS ),包含一个高性能的文件系统。以及附加的USB和TCP/IP,Web Server软件包。IAR PowerPac 与 IAR 嵌入式工作台无缝集成,为不同制造商的 ARM 设备提供了丰富的范例项目和板级支持包。
IAR PowerPac 及协议栈
IAR提供PowerPac实时操作系统和文件管理系统、USB协议栈以及TCP/IP协议栈,其授权方式是工程师坐席收取License费用,没有进一步的版税,降低了最终用户的风险。
μCLinux操作系统
μCLinux是Linux小型化后,适合于没有MMU的微处理器芯片而裁剪成的小型化Linux操作系统,在ARM CPU系列中,ARM7 TDMI,ARM940T等ARM核的CPU产品,如果希望使用Linux操作系统,只能用μCLinux,当然,μCLinux也支持Motorola Dragonball, Coldfire等其它中低端嵌入式处理器。
μCLinux保持了传统Linux操作系统的主要特性,包括稳定、强大的网络和文件系统的支持,μCLinux裁剪了大量的Linux内核以缩小尺寸,适合象512k RAM,1M Flash这样小容量,低成本的嵌入式系统。
μCLinux 的项目是由Linux 2.0.38内核开始的,第一个项目是Motorola 68EZ328,目前已经有2.4 Linux支持的一些移植的版本,如S3C2500, 44B0等ARM芯片,这些,你可以在μCLinux的官方网站www.uclinux.org上找到,μCLinux近期主要是在发展各种2.4.x版本的移植,以期跟上Linux社会主流的发展趋势(因为今年Linux 2.6将开始成为主流的内核)。
μCLinux系统小型化的另一个重要原因是采用了μCLib库替代 Linux的Glib库,使用μCLib可以大大减少应用程序的代码尺寸,对于中小型嵌入式应用,μCLib功能可以满足需要,所以目前即使是某些采用 Linux 2.4内核的嵌入式LINUX系统也采用μCLib库的做法。μCLinux中,由于没有内存保护机制,应用代码一般采用静态连接的方式,而且在 μCLinux中采用Flat文件执行格式(Linux是Coff或Elf格式), μCLinux和应用代码都可以支持固化,存储在Flash存储介质中,不需象Linux需要经过一次Flash到RAM的拷贝。所有这些,使得 μCLinux更象传统意义上的嵌入式操作系统。
μCLinux 主要是针对没有MMU的嵌入式处理器开发设计,那么它也失去了有MMU所带来的Linux操作系统的特色,比如,上面已经提到的静态加载(Linux支持动态应用的加载),μCLinux对内存操作是直接的物理内存,这样,任何程序的异常都可能导致内核崩溃,μCLinux采用Vfovk(),支持多进程,但需要父子进程协调同步,μCLinux的文件系统相对比较陈旧,支持的CPU和参考设计还比较少,社区的发展和维护也相对缓慢。更重要的是,在国内外没有一家软件公司有商业化的μCLinux软件产品和服务支持,目前μCLinux官方网站还很少看见象IBM、Intel这样的巨型公司身影,只有 2~3家小型的硬件或方案提供商,这对于商业化的产品开发中采用是有一定的风险。
嵌入式Linux操作系统
我们这里要讨论的是可以嵌入在ARM CPU上的,有MMU功能的Linux操作系统,也可以称是嵌入式Linux操作系统。芬兰学生Linux Torvalds在91年写完第一个Linux版本时,怎样也无法想象到今天Linux在全世界范围被广泛注目和应用。嵌入式系统作为Linux应用的一个重要领域,由于它的广泛性和多样化正在迅速发展。
和 微软的软件不一样,Linux不是由一家公司所拥有、维护开发的,Linux在市场有多种发行版本,所有发行版本都包含一样的Linux内核、基本工具和应用,不同的发行版本主要是在附加的工具链、应用、配置以及各种内核补丁上有所不同。嵌入式Linux主要是在实时性增强、内核精简和裁减、支持多种 CPU结构(如ARM CPU)等方面做了改进和提高。[page]
使用Linux在嵌入式系统中有两种途径。
第一是用户自己装配(称为DIY内核),你可以在www.kernel.org找到全部Linux代码,或直接到ARM CPU的源代码树下www.ARMLinux.org.uk找到你需要的Linux版本在ARM下的移植,或者某些半导体公司,如三星、Motorola 也在自己的网站或销售自己的ARM评估板的时候送给一张CD,里面含有一个可以支持他们评估板的最小Linux内核系统。如果这个最小内核没有包含 GCC/GDB工具链,你可能还要到GNU的网站下载全部的源代码,然后再编译生成你需要版本的ARM工具链和应用程序库,这个过程是相当耗时和困难的。还需要指出,这种DIY内核的配置,添加应用和驱动程序也是不标准的和复杂的,这是嵌入式系统的特殊性所在,比如说,有的基于ARM的应用是网络上的小型互连设备,他需要多个以太网、USB主机、小型的NOR Flash文件系统,而一个ARM手持终端,它关心的是LCD的触屏、红外或蓝牙的接口、USB用户端、快速的启动,动态的电源管理和NADA FLASH,这样,你就需要在数十家Linux相关网站下载各种补丁,应用和工具,把它们和你拿到的这个内核进行反复的编译和调试,确信它们之间以及它们在你所用的ARM CPU硬件评估板上是稳定可靠工作的,这个过程是在没有任何技术支持下完成的。当然,如果可以从某家半导体公司或开源的网站能够得到“最小内核”,它所包含的组件(如驱动、应用和文件系统)和你的应用近似,而且代码是可靠的,或者你及时正确得到Linux网友的指导,那么你是幸运的。据说,有一个著名的电信设备制造商花了2年的时间和150万美圆在一个项目中开发自己的Linux,而且最后还不得不停止了。
第二是选择一个商业的嵌入式Linux操作系统平台。商业化的嵌入式 Linux版本是针对嵌入式处理器,如ARM所优化设计的,已经支持了各种半导体厂家的评估板和主要的设备驱动,商业化的嵌入式Linux包含了文件系统、应用、实时性扩展和技术支持培训服务,现今国外著名的商业化嵌入式Linux产品有:MontaVista Linux, Bluecat Linux, Timesys Linux, Metrowork Linux(原Lineo), Vlinux(韩国)和Redhat Linux等,国内也有红旗、中软、新华嵌入式Linux。
MontaVista Linux是MontaVista软件公司于99年推出的,它是目前全球最优秀的嵌入式Linux操作系统和工具供应商,MontaVista在嵌入式 Linux的实时性、交叉开发工具、高可用性、动态电源管理等Linux技术要点方面具有世界领先地位。
MontaVista Linux最新版本是5。0,采用Linux 2.6.18,针对8种CPU系列(包含ARM和Xscale)优化定制的商业化版本,包含了最新O(1)实时调度器,可抢占的内核,微秒级的高分辨定时器,基于Eclipse的DevRocket 5开发环境,支持应用、内核和文件系统(固化)的配置和调试,以及测试和分析工具,纯Windows, Linux和Solaris开发主机,200余种评估板和应用系统的设备驱动支持。
选择象MontaVista Linux这样商业化嵌入式Linux,可以让用户把时间和资金放在应用软件和特定的硬件接口和设备驱动程序,使用商业嵌入式Linux,可以得到一定时间(一般是1年)的技术支持,升级和培训(这很重要,因为Linux是每天都在变化的)。
商业嵌入式Linux目前除国内的产品外,价格还是很昂贵的,根据配置和服务时间,大约从几千到几万美圆,多数国内用户从资金和心理上还很难承受,商业嵌入式Linux开发工具相对于Microsoft和象 Tornado/VXWORK的开发工具,在易于使用和丰富性方面还待于提高和改进。
同作为Linux操作系统,我是推荐使用带有MMU 的 Linux ,而不是μCLinux,因为绝大多数新的ARM CPU 都是AMR9核,他们都带有MMU 了,无论是开放源码的LINUX 社区还是商业的嵌入式LINUX 公司的支持和维护都比μCLinux,要好,快和丰富的多。
结束语
前面我们对三种在ARM CPU上较为流行的嵌入式操作系统作了详细的分析,在进入一个总结之前,我还想提到几个在国际上很有名气的嵌入式操作系统,它们是Windriver公司的Vxworks、ATI的Nucleus、日本人的iTron和WinCE。
Windriver 的Vxworks在两三年前曾经是最具影响力的嵌入式操作系统,几乎主要的通信设备制造商都是采用PowerPC+Vxworks这种组合,但是在ARM CPU上,Vxworks的应用并不多见;ATI的Nucleus(现在已经是Mentor的嵌入式部门)曾经作为最有名气的源代码、没有版税的嵌入式操作系统而在北美和亚洲台湾流行,最成功的设计范例是各种GSM移动电话,Nucleus只是一个实时内核,用户需要再购买它的TCP/IP,GUI,文件系统和设备驱动才能形成一个功能完整的嵌入式系统,这使它在近些年失去了优势;日本人的iTron是在日本几乎家喻户晓的嵌入式内核,标准的编程接口、低廉的价格(1~3千美圆)、没有版税、支持几乎所有的CPU(尤其是支持很多日本的CPU),但在除日本之外,iTron好象毫无建树;微软的 WinCE,几乎所有高端PDA都是采用它,它们使用的是 Xscale或ARM9这样的CPU,但微软只是关心有产量象PC一样巨大的嵌入式设备制造商,所以他并没有把自己的WinCE象Linux一样易于移植到不同的CPU和增加设备驱动程序,微软更愿意象Windows一样自己把所有事情做好,你只是拿去用好了,如果你没有相当的级别,很难获得它的个性化定制服务。
最后我们归纳一下选择一个合适的ARM CPU的嵌入式操作系统的几个重要因素。
第一是应用。如果你想开发的嵌入式设备是一个和网络应用密切相关或者就是一个网络设备,那么你应该选择用嵌入式Linux或者μCLinux,而不是μC/OS-II,因为Linux不仅为你集成了TCP/IP协议,还有很丰富的其它网络协议,如DHCP Server,PPPoe,webserver等等。
第 二是实时性。没有一个绝对的数字可以告诉你什么是硬实时,什么是软实时,它们之间的界限也是十分模糊的,这与你选择什么样的ARM CPU,它的主频,内存等参数有一定的关系,象Intel Xscale这样的处理器,即使配合普通Linux的内核,内核的抢占延时最坏情况也只有1.743毫秒,而99.9%的情况是1.42毫秒,而如果你使用加入实时补丁等技术的嵌入式Linux如MontaVista Linux(2.4.17版本内核),最坏的情况只有436微秒,而99.9%的情况是195微秒,上面的数字以及考虑到最新的Linux在实时性方面的改进(如低延时O(1)调试器,微秒级的高分辨率POSIX定时器),嵌入式Linux可以适合于90~95%的各种嵌入式系统应用。当然,你如果希望更高数量级的实时响应,如高速的A/D转换需要几个微秒以内的中断延时,要求一个毫秒级没有DMA方式的异步串行实时处理器等类似的应用,可能是采用 μC/OS-II是合适的。当然,你采用象Vxworks这样传统的嵌入式操作系统也可以满足这样的强实时性要求。
第三是开发工具。坦言说,目前μC/OS-II、μCLinux和嵌入式Linux的开发工具与商业嵌入式操作系统工具还有一些差距,目前在ARM CPU上广泛流行和使用的是ARM公司SDT/ADS工具链,产品无论在功能、稳定性和众多的第三方厂商支持方面,都很好,唯一不足的是缺少对嵌入式操作系统的支持,SDT/ADS的升级产品RealView计划支持GCC和嵌入式Linux,但目前还没有看到,μC/OS-II可以使用ARM SDT/ADS,但没有OS调试功能。如果希望支持OS调试,可以使用IAR或Nohan调试器,μCLinux的调试除GDB外还有第三方调试器,并配合Cygwin形成Windows环境下μCLinux开发环境,象Aiji的 Spider和Micetek 的Hitool。
第四是你所选择 的ARM CPU和参考板,象ARM7TDMI和ARM940T(如S3C2500/2510)核是不能使用嵌入式Linux(MMU),如果你想用Linux,只能用μCLinux,如果你想用Vxworks,你需要了解一下提供评估板的公司是否有BSP(板支持包),Vxworks自己只有少数ARM公司评估板的支持。
最后是价格和技术服务。中国工程师的薪水大约是欧美日等国的十分之一, 所以在考虑购买商业嵌入式操作系统时,会遇到是买还是自己做的问题,这是很正常的,尤其是在采用开放源代码技术时,这个问题就就更加突出。有一点需要注意的是,有些产品如Vxworks 是既按用户数(有License保护锁)收取开发费,也按你产品售出的实际数量收取每个Vxworks软件运行的版税。 μC/OS-II只是收取每种产品一次性版税(不限数量)。Nucleus和Threadx是一次性收取开发加上生产的费用。Linux无论是 μCLinux还是嵌入式Linux(即使是商业版本象MontaVista Linux)是不收版税的,商用嵌入式Linux是以服务费或订阅方式收取开发时的费用。很明显,国外产品价格是贵一些(主要是他们人力成本高),但不能不承认他们在嵌入式操作系统的技术已经远远走在了前方。值得提醒大家的是在ARM开发工具和评估板的众多国内供应商中,有不少已经做了开放源码操作系统的移植和示范性的Demo,但应该注意他们多数不具有维护和支持操作系统平台的能力和经验,过多地依赖他们是有风险的。
品种众多,价格适宜的ARM CPU加上开放源码嵌入式操作系统为中国嵌入式系统和设备制造商的发展创造了一个有利的时机,正确迅速地使用这些技术,可以加快我们具有竞争力的新一代电子产品上市的时间和提高产品的档次。
参考资料:
李善平,《Linux与嵌入式系统》
王学龙,《嵌入式Linux系统设计与应用》
马忠梅,《ARM嵌入式处理器结构与应用基础》
邵贝贝,《嵌入式实时操作系统μC/OS-II》第二版
何小庆,《嵌入式Linux:通信设备中的主流操作系统》,电子设计应用,2003年第4期。
清华大学,《嵌入式系统设计与实例开发》