嵌入式Linux:嵌入式系统软件的机遇和挑战
■ 何小庆
--------------------------------------------------------------------------------
引言
嵌入式Linux正在并越来越多地受到人们的关注,嵌入式系统设计工程师正在尝试从自己编写的或专用的实时操作系统(RTOS)转移到嵌入式Linux。半导体厂商,系统机、单板机的厂商也纷纷向人们展示采用嵌入式Linux的方案,如机顶盒、家庭网关、移动智能终端和以太网交换机等最新产品。同时各类市场分析报告也显示,到2003年将有50%的嵌入式RTOS选择Linux。嵌入式Linux对中国电子设计业来讲是机遇,但是由于它一改传统设计方式和商业模式,也同时面临着巨大的挑战。
嵌入式Linux的优势
Linux是Unix的一个变种,在过去的10多年中已经成功地应用于服务器和桌面系统。使用Linux可以大大发挥软件工程师在Unix系统上的开发经验,国内外大学的教学也逐渐从Unix转到Linux,并且开设嵌入式Linux软件课程。比起其它专用的RTOS开发系统来说,软件工程师学习嵌入式Linux会相当容易,资料、信息和交流的机会也丰富得多。
嵌入式Linux与Linux一样,是开放源代码软件。与专用的RTOS或自行开发的RTOS比较起来,还有以下的优势: 使用嵌入式Linux与供应商无关.
当然,有多家供应商提供嵌入式Linux产品、服务、培训和应用工程,但是可以说开放的Linux技术来源是一致的,而且是标准的,这将会避免传统的单一供应商所带来的产品不连续发展的风险。
新硬件的支持
目前Linux是硬件制造商首选支持的OS,一般硬件支持是从微处理器开始的,Linux是支持微处理器种类最多的OS,还有更多的I/O设备驱动程序。嵌入式Linux与厂家无关性也保证了这种硬件系统支持的平滑过渡,从一个厂家嵌入式Linux移植到另外一家也是很容易的。
更早地获取新技术
最新的技术的实现一般是在Linux软件平台上。如果你希望直接获取这些资源并使用它,那么嵌入式Linux比传统专用RTOS要容易的多。
更低的成本
嵌人式Linux是一种没有版税的RTOS,使用Linux开发系统可以减少雇用和培训工程师熟悉专用RTOS的费用。
Linux社区的广阔资源
在辽阔的开放源码的世界和Linux社区有数万名自由软件爱好者,数百家Linux发行版的公司和服务商以及几乎所有硬件制造商都在一个开放的,标准的软件平台上工作,有百余种公开源码的项目,如机顶盒、ATM和IPV6项目等。
应用嵌入式Linux在技术层面的几个问题
实时性问题
Linux继承了传统Unix的公平调度机制即分时调度策略,它提供了一个稳定的操作系统的管理系统,但是它不能解决实时系统要求的纳秒级的中断延迟、任务切换时间。 同时,传统的Linux是不可以被抢占的。目前解决Linux实时性的方法有两类。第一是改造内核,写一个专用的实时微内核,让传统的Linux做为一个优先级最低的进程,这种方法的优点是可以提供象专用RTOS一样的硬实时性,缺点是不能保证Linux应用和设备驱动程序的完全兼容,代表产品是RTLINUX。第二是写一个可抢占的Linux内核,这种可抢占的Linux内核是使用SMP(对称多处理器)技术在单个X86、PPC、ARM等RISC CPU以补丁形式加在内核上,这种方法的优点是与任何Linux应用和设备驱动程序兼容。缺点,不是严格意义的硬实时,代表产品是MontaVista公司的Linux。
从另外一种意义上,所有的嵌入式应用都有实时性的要求,但并非所有应用都有实时性的要求,有关资料显示:60%应用是非实时的,30%是软实时性,只有约10%是硬实时,只有4.2%用户认为Linux完全不能满足它的应用。
内核代码大小
在考虑选择嵌入式Linux时的一个重要因素就是Linux内核代码尺寸, 一般来讲它比传统的RTOS要大,这就是说需要用更多的程序存储器(如Flash或电子硬盘)和数据存储器(如SDRAM),目前Linux内核的机制是把压缩后的内核(一般安放在Flash或电子硬盘上)解压到SDRAM上然后执行,肯定是需要更多的FLash和SDRAM。但是,经过专用库优化器处理的内核压缩后最小只有0.5MB,解压后包含文件和网络系统也只有2~3MB。当然这里只是基本的Linux内核(含网络和文件系统),不包含某些应用比如路由协议和图形系统。虽然比较起传统的RTOS 50KB的内核,Linux内核是大了不少,但是今天市场上的各类信息家电,通信设备(除了很低端的产品)很多的系统都有超过2MB的Flash和4MB的SDRAM,而且内存器件的价格也相当的便宜。
设备驱动程序和编程接口
我们知道Linux有比传统的RTOS更多的、更新的设备驱动程序。对于绝大多数的嵌入式系统应用,只要不是专用接口部分,用户是不需要自己写设备驱动程序的,例如以太网、LCD和USB,Linux都有现成的设备驱动程序。设备驱动程序和内核在一起为应用提供一个编程接口,但是如果用户专用的外设是需要自己按Linux设备驱动规范写一个标准的驱动程序,Linux应用是无法直接控制外设(Linux内核只提供给应用程序一个简单直接访问内存或I/O方式),可以说所有外设、I/O、中断一般都是在设备驱动程序中处理,这与传统RTOS完全不同,因为传统的RTOS没有象Linux的进程保护机制。
嵌入式Linux多任务的编程接口目前推荐的是Pthread(即POSIX线程),它在功能上与传统的RTOS的任务很接近,比较简单的方法是在一个进程下建立若干个线程,这样就像使用任务一样进行系统调度,Pthread目前还在继续发展,现在已经可以支持高分辨率的定时器。
嵌入式Linux的可靠性
许多人简单地认为开放源码就是没有人负责任只能用在可靠性要求比较低的设备和环境上。事实并不是这样的:
· Linux起源于Unix,有十多年的历史。基于Linux的Apache Web服务器占56.81%市场份额,每天当你在计算机上 键入 WWW 的时候, 你已经在和许多Linux系统在打交道,它是非常安全可靠的。
· Linux使用硬件MMU单元为多个进程建立自己虚拟内存空间。一个进程内的程序和线程,看不见其它进程代码和数据空间,对外设的访问也是通过内核共享进程和设备驱动实现的;而传统的RTOS整个地址空间是线性的,对任何任务(线程)都可以随意访问,一旦某个任务跑飞, 就可能干扰其它任务的运行。
· 冗余和高可靠性
传统冗余是由硬件实现的,软件主要起监视作用,如2余度或 3余度冗余系统是由备份的2套或3套硬件系统组成。Linux在内核和设备驱动程序中已经包含了相当的软件冗余和高可靠性特性,还有热切换。嵌入式Linux支持PCI工业组织的PICMIG2.12热拔插标准。
对于中国这个十分需要引进RTOS的市场,嵌入式Linux是一个机遇。软件设计工程师可以轻而易举地从网上下载一个Linux内核,如ARMLinux在某ARM板上试一试,免费运行一个 WebServer。但是问题又来了,如果硕士生撰写论文,在1~2年的时间如没有产品期限和完整测试,这是一个很好的方法。如果这是一个商业项目,6个月的时间内完成完整功能、性能和可靠性的测试,将会有许多问题。
中国的软件工程师缺少Linux经验,习惯了单片机开发,以及直接用C或汇编语言访问物理地址驱动外设,只有简单的RTOS任务的概念,不习惯进程和线程的POSIX接口,此外不可否认还有成本的考虑,这些都为嵌入式Linux在中国的普及带来了一些困难。
开放式计算机系统(包含嵌入式)和开放式嵌入式Linux结合,必将为下一代通信设备,消费电子、控制系统、信息家电以及军事设备产品的研制和开发带来一种全新设计思想,也会以更低的价格,更快产品上市速度赢得人们的信赖。 ■