嵌入式系统应用开发基础
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3 嵌入式操作系统

嵌入式系统的软件大致可以分为三个部分:第一部分是负责系统硬件初始化、系统自检以及操作系统引导的软件,称为Boot Loader,类似于PC中的BIOS;第二部分是操作系统,是软件系统的管理者和灵魂;第三部分是应用软件。从开发者的角度来看,这几部分与通用计算机系统的软件相比都有着许多不同的地方。其中最主要的不同点是,应用开发者必须更多地提升对操作系统的关注度。在通用计算机系统的应用开发过程中,由于硬件、软件平台的规范化和标准化,因此而呈现的各种开发环境和可共享的函数库使得开发者无须了解操作系统及硬件的更多知识,就可以在规范的编程模板指引下照猫画虎般地编写出自己的应用程序。但是嵌入式系统是一种量体裁衣式的订制开发过程,不允许出现更多的系统无用碎片及应用冗余代码,所以需要应用程序与操作系统紧密配合。这就要求应用开发者对操作系统有较深入的了解而且掌握具体的开发过程。

1.3.1 嵌入式系统应用软件的特点

  • 软件要求固态化存储;
  • 软件代码短小精悍;
  • 具体应用程序与操作系统的一体化整合;
  • 多数嵌入式应用需要操作系统具有或强或弱的的实时性;
  • 高端应用需要多任务操作系统支持;
  • 软件开发需要开发工具的支持。

由嵌入式系统应用软件的特点可以看出,一个合格的嵌入式软件开发人员,不仅需要掌握相关的程序设计方法,还需要较好地掌握硬件以及操作系统方面的知识。

1.3.2 嵌入式操作系统

1.嵌入式操作系统的特点

与通用平台上运行的操作系统相比,嵌入式操作系统具有以下一些特点:

  • 短小精悍的内核以及高度模块化结构,以利于不同应用要求的选择和剪裁;
  • 或强或若的实时性,大多数嵌入式系统都有实时性要求,且多是强实时多任务并发操作,所以要求相应的嵌入式操作系统也必须是实时操作系统(Real-Time Operation System,RTOS);
  • 控制类应用往往不需要虚拟文件系统的支持,文件系统主要用于支持驱动程序;
  • 高端应用需要多任务操作系统支持以及文件系统及显示驱动支持;
  • 目前的嵌入式操作系统按照应用的范围有适用于低端还是适用于高端之分,从当前应用现状来看,所谓的低端应用是指那些无法支持图形模式编程应用以及虚拟文件系统的应用,而高端应用则可以支持。

2.主流的嵌入式操作系统

1)VxWorks

在众多的实时操作系统和嵌入式操作系统产品中,WindRiver公司的VxWorks(2009年6月被Intel以8.84亿美元收购)是较为有特色的一种实时操作系统。VxWorks支持各种工业标准,包括POSIX、ANSI C和TCP/IP网络协议。VxWorks运行系统的核心是一个高效率的微内核,该微内核支持各种实时功能,包括快速多任务处理、中断支持、抢占式和轮转式调度。微内核设计减轻了系统负载并可快速响应外部事件。在美国宇航局的“极地登陆者号”、“深空二号”和火星气候轨道器等登陆火星探测器上,就采用了VxWorks,负责火星探测器全部飞行控制,包括飞行纠正、载体自旋和降落时的高度控制等,而且还负责数据收集和与地球的通信工作。目前在全世界装有VxWorks系统的智能设备数以百万计,其应用范围遍及互联网、电信和数据通信、数字影像、网络、医学、计算机外设、汽车、火控、导航与制导、航空、指挥、控制、通信和情报、声纳与雷达、空间与导弹系统、模拟和测试等众多领域。

2)Linux

Linux操作系统原本主要的市场定位是UNIX的应用领域,诸如桌面系统及服务器系统。但由于其模块化的内核构造机制及灵活的内核剪裁功能非常适合嵌入式系统的订制,再加上稳固的系统性能和众多的开源资源,使其不仅适合而且允许广大的开发者免费利用其进行各种类型的应用开发。这些因素共同造成了Linux在嵌入式系统领域快速而广泛的应用。根据国际上相关专业市场调查机构的调查,目前在所有的嵌入式应用中,以Linux作为操作系统的占了近乎一半,而采用其他操作系统的应用加起来才分享市场的另一半。网上的有些嵌入式开发人员甚至将当今的嵌入式系统开发技术归纳为ARM处理器+Linux操作系统。尽管此言尚存片面,但也从一个方面反映出Linux在嵌入式系统应用领域的认可度。

Linux在嵌入式系统应用的主要优势有:

  • 免费获得内核源代码;
  • 免许可费用,大多数的商业操作系统,例如VxWorks、Windows CE不仅要收取软件的使用费,另外对基于该系统开发并销售出的产品还要收取一定的许可证费用,即所谓的License费用;而Linux是一个免费软件,并且公开源代码,只要不违反GPL协议(承诺利用Linux开发的程序也开源),就可以自由使用Linux资源和发布Linux应用;
  • 有很高的稳定性;
  • 模块化结构(方便剪裁);
  • 支持多种文件系统,具有强大的网络功能以及众多的驱动程序和应用API;
  • 丰富的开发工具,Linux提供C、C++、Java以及其他很多的开发工具,更重要的是,爱好者可以免费获得,并且这些开发工具设计时已经考虑到支持各种不同的微处理器结构和调试环境,Linux基于GNU的工具包提供了完整与无缝交叉平台开发工具,从编辑器到底层调试,其C编译器可产生更有效率的执行代码;
  • 大量的文档和学习资料。

Linux由于并不是为嵌入式应用而生,因此也存在一些缺憾:

  • 实时性不够强;
  • 系统版本间差异大;
  • 用于商业软件开发时无法得到技术支持且产权不易保护。
3)基于Linux的衍生系统

由前面内容知道,Linux并不是为嵌入式应用定制的,所以必然存在一些需要改进的地方。目前主要有针对特定处理器硬件条件的衍生系统、针对实时性进行改造的衍生系统以及针对手机特殊应用支持的衍生系统。

①µCLinux。µCLinux是在Linux 2.0内核基础上去除了与MMU(Memory Management Unit,内存管理单元)硬件逻辑有关功能的减缩版Linux系统,以适应许多内部没有MMU功能的嵌入式处理器的运行。其主要优点是继承了Linux内核的可裁减性、系统的稳定性、源代码的开源性、广泛的设备支持性以及强大的网络功能,但是不支持虚拟内存管理等需要MMU支持的系统服务,而且一样不具有实时性。

②RTLinux(或RTAI、Xenomai)。RTLinux(Real Time Linux)是较早在Linux基础上衍生的实时性改造补丁,并以外加的可抢占实时内核方式使得Linux具有了强实时性。当系统中具有实时性任务请求时,实时内核(补丁)将行使系统控制权处理实时任务,而将标准的Linux作为其优先级最低的一个进程来管理,应用中的非实时任务则由Linux提供服务。RTLinux符合POSIX 1003.13/PSE51兼容的标准,并遵循GPL v2开放软件协议,可运行在x86、PowerPC、Alpha及部分ARM处理器上。RTLinux有开源的RTLinux和商业的RTLinux/PRO两个版本,早期由FSMLabs公司维护,但该公司在2007年被风河(WindRiver)公司并购,其最后一个商业化产品为RT-BSD,最后的开源版本为构建在Linux-2.4.32内核上的RTLinux/GPL-3.2版。目前该开源版由西班牙Politécnica de Valencia大学的Alfons Crespo研究小组接手维护,已推出RTLinux/GPL-4.0,但主要是配合他们自己开发的多系统虚拟环境xtratum运行。

1999年正当RTLinux将其2.2版本向Linux2.4内核升级遇到了麻烦并无法支持对称多处理SMP功能时,意大利米兰理工学院航天工程系(DIAPM)又推出了一款与RTLinux实现机制类似的实时Linux系统RTAI(Real-Time Application Interface),并且从2001年到2002年RTAI先后采用RTHAL(Real-Time Hardware Abstraction Layer,实时硬件抽象层)及Adeos(Adaptive Domain Environment for Operating Systems,操作系统自适应域环境)技术进行改造,从而摆脱了与RTLinux在技术上的专利纷争而成为一款自主实时操作系统。目前RTAI最新版本为3.8.1版,可以支持X86、ARM、PowerPC等处理器。

Xenomai是2003年并入RTAI进行合作项目开发的一个团队产品,但2005年又从RTAI分离了出来。Xenomai采用的技术路线与RTAI基本相同,性能稍逊RTAI,但所支持的处理器及API接口种类较RTAI多,目前的版本为2.5.0。

③Android(面向智能手机及手持设备的Linux增值系统)。Android一词指科幻小说中的机器人,并被一家专门开发手机操作系统的公司作为公司名,该公司2005年7月被Google公司收购。2007年11月Android被作为Google公司联合33家手机芯片厂、手机生产厂及电信运营商共同发布的新一代智能手机操作系统的名称。该系统以Linux为底层操作系统,并通过嵌入Java虚拟机以支持基于Java实现的多种网络及图形化应用。2010年的最新版本为2.3版。作为一个开放的平台,Android在2009年10月开放了所有源码。Android的主要优势在于:开放性、不受运营商束缚、丰富的硬件选择、开发商不受任何限制、无缝结合的Google应用。目前的典型产品有,摩托罗拉A1680、XT702、三星A5700、HTC G7、华为Ideos等手机。

④Meego(面向车载等移动设备及智能手机的Linux增值系统)。在2010年巴塞罗那世界移动大会上,英特尔的Moblin与诺基亚的Maemo这两款嵌入式Linux智能操作系统宣布合并,启用新名称MeeGo,并交由Linux基金会管理。MeeGo将结合诺基亚Maemo中基于Qt的用户界面及英特尔Moblin的核心软件平台,同时支持ARM和x86的处理器。其目标是促使家庭、车载、办公室和便携式等多种设备之间进行无缝通信,广泛应用于便携式笔记本电脑、上网本、平板电脑、多媒体电话、联网电视机和车载信息娱乐系统等,目前推出的产品是诺基亚N900智能手机。相比Android,MeeGo由Linux基金会管理,因此具有完全的开放性。

4)Windows CE(微软产品)

Windows CE简称为WinCE,是微软开发的面向智能家电及手持设备的操作系统。在1996年最早推出的WinCE1.0主要应用目标是交互式数字电视,但由于互联网向家庭娱乐领域的快速扩张,微软适时地调整WinCE的应用方向,并推出了基于互联网的称为WebTV的家庭数字电视方案:服务器端使用NT,机顶盒端使用WinCE。但由于在和美国有线公司争夺用户市场不断失利,微软逐渐放弃了WinCE在美国机顶盒市场的竞争,于是将应用目标转向其他方向。微软看到了中国在电子制造业的巨大潜力,于1999年3月10日,在中国发布了“维纳斯计划”,力图将WinCE推介到掌上电脑、智能家电、医疗电子等各类应用的嵌入式装置中去,希望在整个电子消费领域再现其Windows平台在个人电脑领域所创造的神话,但由于市场的接受状况不佳而隐匿于人们的视野中。

WinCE的主要特点是与Windows兼容,支持C、C++、汇编、Java等编程语言,内核较小并具有一定的实时性,能作为一种嵌入式操作系统应用到工业控制等领域。其优点在于便携性、提供对微处理器的选择以及非强行的电源管理功能。内置的标准通信能力使Windows CE能够访问Internet并收发E-mail或浏览Web。除此之外,Windows CE特有的与Windows类似的用户界面使最终用户易于使用,例如,桌面、任务栏、窗口、图标和控件等。Windows CE的缺点是速度慢、效率低、价格偏高、开发应用程序相对较难。

近几年WinCE经过有针对性的开发改造封装,推出了一些适合不同应用的解决方案,在我国应用较多的是针对手持设备,PDA(掌上电脑)和高端手机的几款嵌入式系统。

  • PocketPC 2002:是基于WinCE 3.0内核,并针对掌上设备的应用经过优化后的操作系统,主要应用于PDA及同类的其他手持设备中。
  • Windows Mobile:是基于WinCE.NET 4.2内核,并针对手机应用经过优化后的操作系统。另外还根据高端智能手机的应用需要,集成了大量手机的应用模块,如办公软件,媒体播放器,网络浏览器,对无线宽带设备支持的各种网络协议等。

PocketPC 2002和Windows Mobile由于应用定位于低功耗手持设备,所以目前暂时都只能支持ARM处理器。而通用的WinCE还能够支持X86、MIPS、SH等其他系列的处理器。

5)Palm OS(3Com公司产品)

Palm OS在国际上早期的掌上电脑和PDA市场上占有霸主地位,具有针对专用的硬件进行优化的程序模块,不需要太多的内存空间(小于12MB),并提供了开放的操作系统应用程序接口(API),以利于开发商根据需要进行二次开发,但它仍然是一个准多任务操作系统,而且硬件的互换性较差。

6)QNX(加拿大QSSL公司产品)

一种商业分布式实时操作系统,它由微内核和一组共操作的进程组成,具有高度的伸缩性,可灵活地剪裁,最小配置只占用几十KB的内存,因此可以广泛地嵌入到智能机器、智能仪器仪表、机顶盒、通信设备、PDA等应用中去。

7)Nucleus(美国ATI公司产品)

Nucleus是一个商业的可抢占式实时多任务操作系统,采用了软件组件方法设计,95%的代码是用ANSI C写成的,非常便于移植并能够支持大多数类型的处理器,提供了从局域网到广域网完整的服务组件及支持图形应用的实时化Windows模块,便利的集成开发环境和完备的动态链接库以及各类底层驱动软件。多用于网络设备、机顶盒、智能办公设备、PDA等手持设备、通信设备、汽车电子、医疗仪器、工业控制等。

8)µC/OS-II

µC/OS-II最早是一个运行于X86 CPU平台下DOS环境的实时嵌入式操作系统,目前已广泛移植于多种CPU的环境下,具有开源、短小精悍、高效、实时性好等优点。其最关键部分是实时多任务内核,内核的基本功能包括:任务管理、定时器管理、存储器管理、事件管理、系统管理、消息(队列)管理、信号量管理等,这些管理功能都是通过应用程序接口函数API由用户调用的。µC/OS-II采用占先式实时内核的任务管理机制,可以管理64个任务,其中,系统保留8个任务,应用程序最多可以使用56个任务。µC/OS-II不支持时间片轮转调度法,所以赋予每个任务的优先级必须是不同的。优先级号越低,任务的优先级越高。它的基本代码大小不到5KB,对存储器容量要求低,可满足嵌入式系统对体积的苛刻要求。但由于系统所实现的多任务并非“并发多道程序”方式,所以系统的可靠性有待考证。另外由于其系统规模小,对图形应用的支持较弱,故主要用于控制类等低端应用中,如照相机行业、医疗检测仪器、音响设施等。