1 嵌入式系统与Linux
按照电气工程师协会的一个定义:嵌入式系统是用来控制或监视机器、装置或工厂等的大规模系统的设备。具体说来,它是电脑软件和硬件的综合体;是以应用为中心,以计算机技术为基础,软硬件可裁减,从而能够适应实际应用中对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。一般来说,嵌入式系统不能使用通用型计算机,而且运行的是固化的软件,终端用户很难或者不可能改变固件。而Linux也早已成为IT界家喻户晓的一个名字。概括说来,将Linux应用于嵌入式系统的开发有如下一些优点:
① Linux自身具备一整套工具链,容易自行建立嵌入式系统的开发环境和交叉运行环境,并且可以跨越在嵌入式系统开发中仿真工具(ICE)的障碍。
② 内核的完全开放,使得可以自己设计和开发出真正的硬实时系统;对于软实时系统,在Linux中也容易得到实现。
③ 强大的网络支持,使得可以利用Linux的网络协议栈将其开发成为嵌入式的TCP/IP网络协议栈。
2 嵌入式系统设计的过程
按照嵌入式系统的工程设计方法,嵌入式系统的设计可以分成三个阶段:分析、设计和实现。分析阶段是确定要解决的问题及需要完成的目标,也常常被称为“需求阶段”;设计阶段主要是解决如何在给定的约束条件下完成用户的要求;实现阶段主要是解决如何在所选择的硬件和软件的基础上进行整个软、硬件系统的协调实现。在分析阶段结束后,通常开发者面临的一个棘手的问题就是硬件平台和软件平台的选择,因为它的好坏直接影响着实现阶段的任务完成。
通常硬件和软件的选择包括:处理器、硬件部件、操作系统、编程语言、软件开发工具、硬件调试工具、软件组件等。
在上述选择中,通常,处理器是最重要的,同时操作系统和编程语言也是非常关键的。处理器的选择往往同时会限制操作系统的选择,操作系统的选择又会限制开发工具的选择。
3 硬件平台的选择
3.1 处理器的选择
嵌入式系统的核心部件是各种类型的嵌入式处理器。据不完全统计,目前全世界嵌入式处理器的品种总量已经超过1000多种,流行体系结构有30几个系列。但与全球PC市场不同的是,没有一种微处理器和微处理器公司可以主导嵌入式系统,仅以32位的CPU而言,就有100种以上嵌入式微处理器。由于嵌入式系统设计的差异性极大,因此选择是多样化的。
调查上市的CPU供应商,有些公司如Motorola、Intel、AMD很有名气,而有一些小的公司,如QED(Santa Clara.CA)虽然名气很小,但也生产很优秀的微处理器。另外,有一些公司,如ARM、MIPS等,只设计但并不生产CPU,他们把生产权授予世界各地的半导体制造商。ARM是近年来在嵌入式系统有影响力的微处理器制造商,ARM的设计非常适用于小的电源供电系统。Apple在Newton手持计算机中使用ARM,另外有几款数字无线电话也在使用ARM。
设计者在选择处理器时要考虑的主要因素有:
① 处理性能。一个处理器的性能取决于多个方面的因素,如时钟频率,内部寄存器的大小,指令是否对等处理所有的寄存器等。对于许多需用处理器的嵌入式系统设计来说,目标不是在于挑选速度最快的处理器,而是在于选取能够完成作业的处理器和I/O子系统。如果是面向高性能的应用设计,那么建议考虑某些新的处理器,其价格相对低廉,如IBM和Motorola Power PC。
② 技术指标。当前,许多嵌入式处理器都集成了外围设备的功能,减少了芯片的数量,降低了整个系统的开发费用。开发人员首先考虑的是,系统所要求的一些硬件能否无需过多的胶合逻辑(GL,Glue Logic)就可以连接到处理器上。其次是考虑该处理器的一些支持芯片,如DMA控制器,内存管理器,中断控制器,串行设备、时钟等的配套。
③ 功耗。嵌入式微处理器最大并且增长最快的市场是手持设备、电子记事本、PDA、手机、GPS导航器、智能家电等消费类电子产品。这些产品中选购的微处理器,典型的特点是要求高性能、低功耗。许多CPU生产厂家已经进入了这个领域。今天,用户可以买到一颗嵌入式的微处理器,其速度像笔记本中的Pentium一样快;而它仅使用普通电池供电即可,并且价格很便宜。如果用于工业控制,则对这方面的考虑较弱。
④ 软件支持工具。仅有一个处理器,没有较好的软件开发工具的支持也是不行的,因此选择合适的软件开发工具对系统的实现会起到很好的作用。
⑤ 是否内置调试工具。处理器如果内置调试工具可以大大缩小调试周期,降低调试的难度。
⑥ 供应商是否提供评估板。许多处理器供应商可以提供评估板来验证理论是否正确,决策是否得当。
3.2 硬件部件选择的其它因素
① 生产规模。打算做1套?多套?还是规模生产?如果生产规模比较大,可以自己设计和制备硬件,这样可以降低成本。反之,最好从第三方购买主板和I/O板卡。
② 开发的市场目标。如果想使产品尽快发售,以获得竞争力,此时要尽可能买成熟的硬件;反之,可以自己设计硬件,降低成本。
③ 软件对硬件的依赖性。软件是否可以在硬件没有到位的时候并行设计或先行开发。
④ 只要可能,尽量选择使用普通的硬件。在 CPU 及架构的选择上,一个原则是:只要有可替代的方案,尽量不要选择 Linux 尚不支持的硬件平台。
4 软件平台的选择
嵌入式软件的开发流程,主要涉及到代码编程、交叉编译、交叉连接、下载到目标板和调试等几个步骤,因此软件平台的选择也涉及到以下几个方面。
4.1 操作系统的选择
(1)操作系统选择应考虑的因素
硬件方案确定之后,操作系统的选择就相对轻松了。硬件的不同,会影响操作系统的选择。低端无MMU(Memory Management Unit,存储器管理单元)的CPU,要使用uClinux 操作系统;而相对高端的硬件,则可以用普通的嵌入式 Linux 操作系统。uClinux 和普通的 Linux 有各自的优势和缺点。可用于嵌入式系统软件开发的操作系统很多,但关键是如何选择一个适合开发项目的操作系统。经过多年的开发实践,笔者认为应该从以下几点进行考虑:
① 操作系统提供的开发工具。有些实时操作系统(RTOS)只支持该系统供应商的开发工具,因此,还必须向操作系统供应商获取编译器、调试器等;而有些操作系统使用广泛,且有第三方工具可用,因此,选择的余地比较大。
② 操作系统向硬件接口移植的难度。操作系统到硬件的移植是一个重要的问题,是关系到整个系统能否按期完工的一个关键因素。因此,要选择那些可移植性程度高的操作系统,避免操作系统难以向硬件移植而带来的种种困难,加速系统的开发进度。
③ 操作系统的内存要求。均衡考虑是否需要额外花钱去购买RAM或EEPROM来迎合操作系统对内存的较大要求。
④ 开发人员是否熟悉此操作系统及其提供的API。
⑤ 操作系统是否提供硬件的驱动程序,如网卡等。
⑥ 操作系统的可剪裁性。有些操作系统具有较强的可剪裁性,如嵌入式Linux、Tornado/VxWorks等等。
⑦ 操作系统的实时性能。
(2)几类嵌入式Linux系统的比较
嵌入式Linux系统方面的产品主要分为三类:
第一类是专门为Linux的嵌入式应用而做的。如何让Linux更小、更容易嵌入到体积要求和功能、性能要求更高的硬件中去,是他们的产品开发方向,如MontaVista的MontaVista Linux等。第二类是专门为Linux的实时特性设计的产品。将Linux开发成实时系统尤其是硬实时系统,应用于一些关键的控制场合(不仅仅是信息电器)。如,Fsmlabs公司开发出来的RT-Linux产品已经用在工业控制的很多方面;葡萄牙的Coimbra大学已经利用RT-Linux实现了化工生产控制厂里用来控制反应和程序控制的系统。第三类的产品是将实时性和嵌入式方案结合起来的方案。很多公司都这么做,并且提供集成化的开发方案,如Lineo、TimeSys等等。
因此选择操作系统时,要根据自己的嵌入式要求和实时性要求,选择适合自己的嵌入式Linux;同时,和选择硬件的原则一样,如果可能,尽量选择使用普通的嵌入式 Linux 系统。
4.2 编程语言的选择
编程语言的选择主要考虑以下因素:
① 通用性。不同种类的微处理器都有自己专用的汇编语言。这就为系统开发者设置了一个巨大的障碍,使得系统编程更加困难,软件重用无法实现。而高级语言一般和具体机器的硬件结构联系较少,多数微处理器都有良好的支持,通用性较好。
② 可移植性程度。汇编语言和具体的微处理器密切相关,为某个微处理器设计的程序不能直接移植到另一个不同种类的微处理器上使用,移植性差;而高级语言对所有微处理器都是通用的,程序可以在不同的微处理器上运行,可移植性较好。
③ 执行效率。一般来说,越是高级的语言,其编译器和开销就越大,应用程序也就越大、越慢;但单纯依靠低级语言,如汇编语言来进行应用程序的开发,带来的问题是编程复杂、开发周期长。因此,存在一个开发时间和运行性能间的权衡问题。
④ 可维护性。低级语言如汇编语言,可维护性不高。高级语言程序往往是模块化设计,各个模块之间的接口是固定的。当系统出现问题时,可以很快地将问题定位到某个模块内,并尽快得到解决。另外,模块化设计也便于系统功能的扩充和升级。
几种开发语言的比较:
在嵌入式系统开发过程中使用的语言种类很多,比较广泛应用的高级语言有:Ada、C/C++、Modula-2和Java等。Ada语言定义严格,易读易懂,有较丰富的库程序支持,目前在国防、航空、航天等相关领域应用比较广泛,未来仍将在这些领域占有重要地位。C语言具有广泛的库程序支持,目前在嵌入式系统中是应用最广泛的编程语言,在将来很长一段时间内仍将在嵌入式系统应用领域占重要地位。C++是一种面向对象的编程语言,目前在嵌入式系统设计中也得到了广泛的应用,如GNU C++。Visual C++,是一种集成开发环境,支持可视化编程,广泛应用于GUI程序开发。但C与C++相比,C++的目标代码往往比较庞大和复杂,在嵌入式系统应用中应充分考虑这一因素。Modula-2定义清晰,支持丰富,具有较好的模块化结构,在教学科研方面有较广泛的应用。虽然该语言的开发应用一直比较平缓,但近两年在欧洲有所复苏。Java语言相对年轻,但有很强的跨平台特性,目前发展势头较为强劲。Java语言的“一次编程,到处可用”的特性,使得它在很多领域备受欢迎。随着网络技术和嵌入式技术的不断发展,Java及嵌入式Java的应用也将越来越广泛,但是Java消耗硬件资源较大。
4.3 集成开发环境考虑的因素
集成开发环境IDE(Integrated Development Environment)应考虑以下因素:
① 系统调试器的功能。系统调试特别是远程调试是一个重要的功能。
② 支持库函数。许多开发系统提供大量使用的库函数和模板代码,如大家比较熟悉的C++编译器就带有标准的模板库。它提供了一套用于定义各种有用的集装、存储、搜寻、排序对象。与选择硬件和操作系统的原则一样:除非必要,尽量采用标准的 glibc。
③ 编译器开发商是否持续升级编译器。
④ 连接程序是否支持所有的文件格式和符号格式。
4.4 硬件调试工具的选择
好的软件调试程序可以有效地发现大多数的错误,但是如果再选择一个好的硬件调试就会达到事半功倍的效果。常用的硬件调试工具有以下几种:
① 实时在线仿真器(ICE,In-Circuit Emulator)。用户从仿真插头向ICE看,ICE应是一个可被控制的MCU。ICE是通过一根短电缆连接到目标系统上的。该电缆的一端有一个插件,插到处理器的插座上,而处理器则插到这个插件上。ICE支持常规的调试操作,如单步运行、断点、反汇编、内存检查、源程序级的调试等等。
② 逻辑分析仪。逻辑分析仪最常用于硬件调试,但也可用于软件调试。它是一种无源器件,主要用于监视系统总线的事件.
③ ROM仿真器。ROM仿真器用于插入目标上的ROM插座中的器件,用于仿真ROM芯片。可以将程序下载到ROM仿真器中,然后调试目标上的程序,就好像程序烧结在PROM中一样,从而避免了每次修改程序后直接烧结的麻烦。
④ 在线调试OCD或在线仿真(on-chip emulator)
特别的硅基材料以及定制和CPU引脚的串行连接,在这种特殊的CPU芯片上使用OCD (On-Chip Debugging),才能发挥出OCD的特点。用低端适配器就可以把OCD端口和主工作站以及前端调试软件连接起来。从OCD的基本形式看来,它的特点和单一的ROM监测器是一致的,但是不像后者那样,需要专门的程序以及额外的通信端口。
4.5 软件组件的选择
有些软件组件是免费的,有些软件组件是授权的。授权软件组件的费用一般都很高,但大都经过严格的测试,可靠性高,调试时间短。现在也有一些免费的自由软件组件,它们的性能、可靠性也很好。因此开发人员在选择的时候要加以权衡,确定哪种方案更好。
5 展 望
国外的开发已经如火如荼,国内的开发也不甘示弱。Linux在嵌入式系统中具有强大的生命力和利用价值,很多公司和大学都不同程度地表现出对这个方面的兴趣。有理由相信,嵌入式Linux的发展将带领我们进入嵌入式系统的新时代!
前景:
一、嵌入式计算机系统离我们究竟有多远?
这样的提问也许会令专业人士发笑,因为答案就是:嵌入式系统早已渗入到人们日常生活的每一个角落,与我们的生活息息相关!
美国汽车大王福特公司的高级经理曾宣称,“福特出售的‘计算能力’已超过了IBM”。显然,这并不是一个哗众取宠或者夸张的说法。
为了更好的考察这个问题,请允许我再次重申一下关于嵌入式系统(Embedded Systems)的定义:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。举例来说,大到油田的集散控制系统和工厂流水线,小到家用VCD机或手机,甚至组成普通PC终端设备的键盘、鼠标、软驱、硬盘、显示卡、显示器、Modem、网卡、声卡等均是由嵌入式处理器控制的,嵌入式系统市场的深度和广度,由此可见一斑。尽管如此,它的市场价值也许仍然超过了您的想象:今天,嵌入式系统带来的工业年产值已超过了1万亿美元。
二、天早地设的绝配--LINUX和嵌入式系统
一个完整的系统,当然要包括硬件和软件两个部分,这就好像必须要有丈夫和妻子,才能组成一个完整的家庭。尽管嵌入式系统有着无比广阔的市场需求和发展前景,但嵌入式系统的发展,多年来却经历了一个比相对后期产生的个人计算机(PC)更为曲折和痛苦的历程。随着微处理器的产生,价格低廉、结构小巧的CPU和外设连接提供了稳定可靠的硬件架构,那么限制嵌入式系统发展的瓶颈,就突出表现在了软件方面。尽管从八十年代末开始,陆续出现了一些嵌入式操作系统,比较著名的有Vxwork、pSOS、Neculeus和Windowss CE,但仍然有大量的嵌入式系统摒弃操作系统于不顾,而仅仅包括一些控制流程。当然,我们可以说在嵌入式系统相对简单的情况下,这些控制流程足以应付。但是,当嵌入式系统的功能复杂后,也就是说需要提供更完善的服务的时候,简单控制逻辑就不够用了。毋庸置疑,对于任何一个产品来说,服务的内容和质量,都是价值的源泉和生存的基础。我们不妨做一个夸张而又通俗的比喻,也许雇一个保姆,能够解决生活的一部分后顾之忧,但一个真正意义上的家庭,必须需要一位妻子。那么是什么造成嵌入式系统领域大量的黄金、钻石王老五至今孑然一身呢?特殊的人才有特殊的需求,显然我们需要的是一个身材苗条、容貌姣好、身体健康、聪慧善良、上得厅堂下得厨房,甚至不向我们的工资袋多看一眼的贤内助,也就是说,嵌入式系统需要的是一套高度简练、友善界面、质量可靠、应用广泛、易开发、多任务,并且价格低廉的操作系统。
人们可以发现,以上所说的要求简直就是在形容Linux。更为令人心动的是,除上述优点之外,LINUX与生俱来的优秀网络血统,更为今后的发展铺平了一条宽广平坦的大路。这里的网络,并不仅仅指Internet,关于LINUX在Internet中的优势,将需要专门著文论述,这里仅仅提醒大家注意的是另一个也许可以说较Internet更为广阔的市场:家庭网络。尽管全世界每分每秒都有成千上万的优秀软件工程师致力于将个人电脑(PC)的操作系统变得更加简单易用,但令人遗憾的是,对某些特定的年龄和社会阶层的人群来说,要想开启精彩的网络世界大门,依然有一道难以逾越的门槛。事实就是社会上关于个人电脑的普及班和书籍依然铺天盖地,而我们却从未听说过关于操作电视或者空调的培训。LINUX系统和嵌入式设备的结合,无疑将会对智能住宅及数字家电事业,注入无限澎湃的动力。这并不是什么超前的设想,许多具有高前瞻性的企业,已经从研发阶段过渡到生产阶段,推出了多姿多彩的嵌入式LINUX操作系统的PDA、相机、或者更为概念化的咨讯家电。如推出全球最小的嵌入式操作系统内核——夸克(QUARK),而闻名于世的网虎国际(XLinux),已与Intel成功合作,将夸克应用于Intel去年推出的strongARM芯片上。人们可以在这一平台上享受上网和听MP3的乐趣。而据我所知, LINUS本人在归家的途中已经在利用手机指令家中的咖啡壶为自己准备咖啡了。
三、什么是正确先进?
绝大多数的IT企业,都把保持先进性视为企业生死存亡的大事。但业界一个需要引起重视的现实就是:网海无边,有许多技术和创意的巧妙结合的精品,都象洒落在大海的珍珠,很难得到应有的重视和发掘,在没有散发出自身诱人的光芒之前,就湮灭在茫茫的大海上了。先进是一个需要对比和评价的概念。没有对比和评价,何来先进之有呢?正确的先进应该是高瞻远瞩,利用别人休息的时间找到出路,再回到大伙身边,引导大家一起向前走;如果一个人独自走的太远,过于“先进”的话,反而最终也许会迷失方向。另外一个困难就是:要想永不停顿的保持先进,无论对于一个个人或者一个集体,都是一件极为吃力的事情,甚至是不可能的,尽管愿望是美好的,比如永动机的构想。LINUX相比较其他操作系统的先进之处就在于,它提供了一个永远有人不停顿的自发的寻找出路的游戏规则:它牺牲了某个个人或团队的保持垄断先进性的特权,从而保障了这项事业的永远先进。网虎国际的总经理李奇申曾为Linux做过一个很好的评价——“这是一个符合人性的科技。”
四、LINUX嵌入系统的可操作性。
事实上我们已经可以在许多公司或个人的网站上免费得到已开发成品或者详尽的方案。在稳定性和效能方面,也无可挑剔,甚至会令其他的操作系统如NT感到无地自容-在服务器方面有确实的研究指出:Linux+Samba的效能达NT的250%之多。因此再具体讨论如何开发LINUX嵌入式系统显然有些过时。在所有的关于最新进展的消息当中,我想最引人注目和振奋人心的莫过于网虎国际公司的研发成果——GCS超字元集。以前曾有文章预测,多国语系统支援的目标,最有可能在LINUX达成。时隔不久,预测变为现实,网虎国际运用GCS技术研发出的的XLinux1.0版本宣布可以支持全部人类,哦,不,甚至外星人的语言?如果消息可靠,这将为全球化的合作搭建一个坚实的平台。而各家电厂商在应用网虎的GCS技术的基础上,其产品也可毫无阻碍的行销世界各地。记得曾经读过一篇圣经故事,里面提到在古代人们使用同一种语言,为了彰显人类力量的伟大,大家一致决定建造一座通天塔,并开始付诸行动。这个项目的建设令上帝感到不安,因此,将人们的语言打乱,使人们无法很好的沟通,以造成通天塔项目的流产。GCS的开发,我想是最符合人类天性的技术成果之一,这是否意味着将产生基于LINUX的通天塔呢?请让我们继续共同关注。
五、专业的工作,应该交给专业人员去做。
由于LINUX操作系统的出现,将会更好的体现市场的专业细分的原则。这至少包括几个方面的含义。首先是面向大众普及,操作系统的导入,嵌入式计算设备将变得功能更为强大,同时更加简便易用,而改变过去的“你可以利用我提供的设备做许多工作,前提是你必须和我一样专业”的局面。其实除了专业人员以外,并不是人人都需要功能强大的计算设备。举例来说,网络的突出功能就是提供了互动的功能,但依然有许多人选择电视或其他传统媒体,因为人们并不想时时在每一个领域进行“创造”,更多的时候,只是简单的“索取”,我们也许会选择相信和依赖于某一个经过挑选的专业团体为我们提供的咨讯,这种索取的需求就是市场的要求,因此,致力于提高原有设备的附加计算功能,甚至比提供专业的计算设备的附加使用功能,更有价值。让那些复杂的操作交给生产厂家去完成吧,用户更需要的是坐享其成。继而,对于生产厂家来说,更可以专心致力于根据客户的需求,完善设计。至于相应的软件,于过去相比,更可以放心大胆的要求专业化的软件开发人员去实现厂商的设计要求。在今年4月17日的COMMDEX上,网虎国际的总经理李奇申曾就open source与商业公司的合作,进行了一个主题演讲,他认为:“一方面软件开发的成本,从硬件(跳过了ICE屏障)和软件(购买授权)两方面都得到得最大程度的节约,减轻了厂商在开发成本上的顾虑。同时,由于是open source,对厂商来说,可以不费吹灰之力,就轻易的拥有涵盖全球的开发队伍,从而保障了软件质量的高效可靠。第三,对于软件开发人员来说,将会更加容易和以更低廉的代价,得到更加专业的开发工具。例如,可能会有人愿意自行发行一套Linux Graphics Workstation,而不必再象以前一样,附在某个操作系统上。最后,如果感兴趣,人人都可以涉足以上任何一个环节,这将比想象的更加容易,只要您有需求和创意,那么您只需要完成您所感兴趣的那一小部分就足够了,其余的,可以交给其他的专业人员去做。这就是open source!也就是说,您可能仅仅制作了一个独特的轮胎,结果您却得到了整部汽车!”
那么我实在想不出,除了我们自身的想象力,还有什么会限制LINUX在嵌入式领域的发展呢?