走进嵌入式Linux的世界

类别:编程语言 点击:0 评论:0 推荐:
   嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件是可裁剪的,适用于对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。嵌入式系统最典型的特点是与人们的日常生活紧密相关,任何一个普通人都可能拥有各类形形色色运用了嵌入式技术的电子产品,小到MP3、PDA等微型数字化设备,大到信息家电、智能电器、车载GIS。

四层级嵌入式系统

    据国际电气和电子工程师协会(IEEE)的定义,嵌入式系统是“控制、监视或者辅助设备、机器和车间运行的装置”。一般而言,整个嵌入式系统的体系结构可以分成四个部分:嵌入式处理器、嵌入式外围设备、嵌入式操作系统和嵌入式应用软件,如图所示。

    嵌入式系统的核心是各种类型的嵌入式处理器,嵌入式处理器与通用处理器最大的不同点在于:嵌入式CPU大多工作在为特定用户群所专门设计的系统中,它将通用CPU中许多由板卡完成的任务集成到芯片内部,从而有利于嵌入式系统在设计时趋于小型化,同时还具有很高的效率和可靠性。

    在嵌入式系统的硬件部分中,除了中心控制部件以外,用于完成存储、通信、调试、显示等辅助功能的其他部件都可以算作嵌入式外围设备。目前常用的嵌入式外围设备按功能可以分为存储设备、通信设备和显示设备三类。

    为了使嵌入式系统的开发更加方便和快捷,需要有专门负责管理存储器分配、中断处理、任务调度等功能的软件模块,这就是嵌入式操作系统。嵌入式操作系统是用来支持嵌入式应用的系统软件,是嵌入式系统极为重要的组成部分,通常包括与硬件相关的底层驱动程序、系统内核、设备驱动接口、通信协议、图形用户界面(GUI)等。嵌入式操作系统具有通用操作系统的基本特点,如能够有效管理复杂的系统资源,能够对硬件进行抽象,能够提供库函数、驱动程序、开发工具集等。但与通用操作系统相比较,嵌入式操作系统在系统实时性、硬件依赖性、软件固化性以及应用专用性等方面,具有更加鲜明的特点。

    嵌入式应用软件是针对特定应用领域,基于某一固定的硬件平台,用来达到用户预期目标的计算机软件。由于用户任务可能有时间和精度上的要求,因此有些嵌入式应用软件需要特定嵌入式操作系统的支持。嵌入式应用软件和普通应用软件有一定的区别,它不仅要求其准确性、安全性和稳定性等方面能够满足实际应用的需要,而且还要尽可能地进行优化,以减少对系统资源的消耗,降低硬件成本。

备受关注的嵌入式Linux

    Linux从1991年问世到现在,短短的十几年时间已经发展成为功能强大、设计完善的操作系统之一,不仅可以与各种传统的商业操作系统分庭抗争,在新兴的嵌入式操作系统领域内也获得了飞速发展。嵌入式Linux是指对标准Linux经过小型化裁剪处理之后,能够固化在容量只有几K或者几M字节的存储器芯片或者单片机中,适合于特定嵌入式应用场合的专用Linux操作系统。嵌入式Linux的开发和研究是操作系统领域中的一个热点,目前已经开发成功的嵌入式系统中,大约有一半使用的是Linux。Linux之所以能在嵌入式系统市场上取得如此辉煌的成果,与其自身的优良特性是分不开的。

    ·广泛的硬件支持。Linux能够支持x86、ARM、MIPS、ALPHA、PowerPC等多种体系结构,目前已经成功移植到数十种硬件平台,几乎能够运行在所有流行的CPU上。Linux有着异常丰富的驱动程序资源,支持各种主流硬件设备和最新的硬件技术,甚至可以在没有存储管理单元(MMU)的处理器上运行,这些都进一步促进了Linux在嵌入式系统中的应用。

    ·内核高效稳定。Linux内核的高效和稳定已经在各个领域内得到了大量事实的验证,Linux的内核设计非常精巧,分成进程调度、内存管理、进程间通信、虚拟文件系统和网络接口五大部分,其独特的模块机制可以根据用户的需要,实时地将某些模块插入到内核或从内核中移走。这些特性使得Linux系统内核可以裁剪得非常小巧,很适合于嵌入式系统的需要。

    ·开放源码,软件丰富。Linux是开放源代码的自由操作系统,它为用户提供了最大限度的自由度。由于嵌入式系统千差万别,往往需要针对具体的应用进行修改和优化,因而获得源代码就变得至关重要了。Linux的软件资源十分丰富,每一种通用程序在Linux上几乎都可以找到,并且数量还在不断增加。在Linux上开发嵌入式应用软件一般不用从头做起,而是可以选择一个类似的自由软件作为原型,在其上进行二次开发。

    ·优秀的开发工具。开发嵌入式系统的关键是需要有一套完善的开发和调试工具。传统的嵌入式开发调试工具是在线仿真器(In-Circuit Emulator,ICE),它通过取代目标板的微处理器,给目标程序提供一个完整的仿真环境,从而使开发者能够非常清楚地了解到程序在目标板上的工作状态,便于监视和调试程序。在线仿真器的价格非常昂贵,而且只适合做非常底层的调试。如果使用的是嵌入式Linux,一旦软硬件能够支持正常的串口功能时,即使不用在线仿真器也可以很好地进行开发和调试工作,从而节省了一笔不小的开发费用。嵌入式Linux为开发者提供了一套完整的工具链(Tool Chain),能够很方便地实现从操作系统到应用软件各个级别的调试。

    ·完善的网络通信和文件管理机制。Linux从诞生之日起就与Internet密不可分,支持各种标准的Internet网络协议,并且很容易移植到嵌入式系统当中。此外,Linux还支持ext2、fat32、romfs等文件系统,这些都为开发嵌入式系统应用打下了很好的基础。

面临三大挑战

    目前,嵌入式Linux系统的研发热潮正在蓬勃兴起,并且占据了很大的市场份额,除了一些传统的Linux公司(如RedHat等)正在从事嵌入式Linux的开发和应用之外,Intel、Motorola等企业也开始进行嵌入式Linux的研究。虽然前景一片灿烂,但就目前而言,嵌入式Linux的研究成果与市场的真正要求仍有一段差距,要开发出真正成熟的嵌入式Linux系统,还需要从以下几个方面做出努力:

    ·提高系统实时性。Linux虽然已经被成功地应用到了PDA、移动电话、车载电视、机顶盒、网络微波炉等各种嵌入式设备上,但在医疗、航空、交通、工业控制等对实时性要求非常严格的场合中还无法直接应用,原因在于现有的Linux是一个通用的操作系统,虽然它也采用了许多技术来加快系统的运行和响应速度,并且符合POSIX1003.1b标准,但从本质上来说并不是一个嵌入式实时操作系统。Linux的内核调度策略基本上是沿用UNIX系统的,将它直接应用于嵌入式实时环境会有许多缺陷,如在运行内核线程时中断被关闭,分时调度策略存在时间上的不确定性,以及缺乏高精度的计时器等等。正因如此,利用Linux作为底层操作系统,在其上进行实时化改造,从而构建出一个具有实时处理能力的嵌入式系统,是现在日益流行的解决方案。

    ·改善内核结构。Linux内核采用的是整体式结构(Monolithic),整个内核是一个单独的、非常大的程序,这样虽然能够使系统的各个部分直接沟通,有效地缩短任务之间的切换时间,提高系统响应速度,但与嵌入式系统存储容量小、资源有限的特点不相符合。嵌入式系统经常采用的是另一种称为微内核(Microkernel)的体系结构,即内核本身只提供一些最基本的操作系统功能,如任务调度、内存管理、中断处理等,而类似于文件系统和网络协议等附加功能则运行在用户空间中,并且可以根据实际需要进行取舍。Microkernel大大减小了内核的体积,便于维护和移植,更能满足嵌入式系统的要求。

    ·完善集成开发平台。引入嵌入式Linux系统集成开发平台,是嵌入式Linux进一步发展和应用的内在要求。传统上的嵌入式系统都是面向具体应用场合的,软件和硬件之间必须紧密配合,但随着嵌入式系统规模的不断扩大和应用领域的不断扩展,嵌入式操作系统的出现就成了一种必然,因为只有这样才能促成嵌入式系统朝层次化和模块化的方向发展。很显然,嵌入式集成开发平台也是符合上述发展趋势的,一个优秀的嵌入式集成开发环境能够提供比较完备的仿真功能,可以实现嵌入式应用软件和嵌入式硬件的同步开发,从而摆脱了“嵌入式应用软件的开发依赖于嵌入式硬件的开发,并且以嵌入式硬件的开发为前提”的不利局面。一个完整的嵌入式集成开发平台通常包括编译器、连接器、调试器、跟踪器、优化器和集成用户界面。目前Linux在基于图形界面的特定系统定制平台的研究上,与Windows CE等商业嵌入式操作系统相比还有很大差距,整体集成开发环境有待提高和完善。

实现实时Linux的思路

    提高系统实时性即实现实时Linux,它的发展有如下四个思路:

    ·提供对于硬实时的支持,具体办法有:提高时钟精度,解决封中断和内核态不能被抢占的问题,代表系统RT-Linux、Kurt-Linux。其实大部分实时Linux都使用了类似与RT-Linux的提高时钟精度和软件中断管理器的思想。总的来说,让内核支持硬实时和使用传统的Linux的丰富的系统调用之间存在着矛盾,以至于像RT-Linux就是单独实现了一个独立的小的硬实时操作系统。随着软件模拟终端控制器、提高时钟精度、以及可抢占内核等思想的引入,这个矛盾慢慢地得到化解。

    ·提供对于实时多媒体应用的支持,举措包括引入新颖的调度算法(网络包调度,进程调度,磁盘调度)。

    ·引入新颖的调度框架以及资源管理思想以更好地支持网络系统中的QoS要求,比如SILK中的垂直结构的操作系统调度的思想,QLinux中的分级调度的思想,以及RED-Linux所提出来的一个通用的调度框架和Linux/RK中所使用的资源预留的思想。

    ·方便的任务QoS管理接口函数和管理程序的实现,比如Linux/RK提出的操作系统中各种资源的资源预留的概念;Linux-SRT中为了用户方便地使用新增加的实时调度支持而增加了API,以及提出的reserve(预留)的概念等。

    在实际的系统中,具体使用那种实时Linux技术,需要根据具体的系统需求而定。例如一个系统对于实时性的要求不是那么严格,但又不是软实时系统,那么可以借鉴一些为了提高Linux响应速度而提出的可抢占内核的想法。

本文地址:http://com.8s8s.com/it/it21743.htm