分类: LINUX
2008-04-13 23:48:56
在嵌入式操作系统的领域中,Linux以其特有的魅力,向各种老牌嵌入式操作系统发起了强有力的攻势。东软集团有限公司经过深入的对比研究,最后采用由Lineo公司维护的、完全开放源码的uCLinux。凭借uCLinux,东软要在低端嵌入式设备领域(包括各类手持设备和信息家电)大显身手。
随着各类手持设备以及信息家电的广泛应用,嵌入式软件的发展进入了一个全新的时期。在嵌入式操作系统的领域中,Linux以其特有的魅力,向各种老牌嵌入式操作系统发起了强有力的攻势。图1是一家专门进行嵌入式Linux系统信息发布的网站公司在2000年9月份的调查。这项调查一直在延续着,截至2001年7月30日,已经使用或将要使用嵌入式Linux的用户已达到88.6%。
正因为嵌入式Linux显露出了良好的市场前景,出现了一批新的专业从事嵌入式Linux技术开发的公司,如Lineo、TimeSys、FsmLabs等。不同的版本各具特色,大致可以分为三类:第一类是在利用Linux强大功能的前提下,使它尽可能的小,以满足许多嵌入式系统对体积的要求,如MontaVista的Hard Hat Linux等;第二类是将Linux开发成实时系统尤其是硬实时系统,应用于一些关键的控制场合,如Fsmlabs公司开发出来的RT-Linux产品已经用在工业控制的很多方面;第三类的产品就是将实时性和嵌入式方案结合起来的方案,很多公司都这么做,并且提供集成化的开发方案,如Lineo、TimeSys。
在全球范围内,每年生产的CPU的数量大概在二十亿颗左右,其中超过80%应用于专用性很强的各类嵌入式系统。而在这些CPU中,有相当一部分是面向低端市场的。为了降低硬件成本及运行功耗,有一类CPU在设计中取消了内存管理单元(Memory Management Unit,以下简称MMU)功能模块。最初,运行于这类没有MMU的CPU之上的都是一些很简单的单任务操作系统,或者更简单的控制程序,甚至根本就没有操作系统而直接运行应用程序。在这种情况下,系统无法运行复杂的应用程序,或者效率很低,而且,所有的应用程序需要重写,并要求程序员十分了解硬件特性。这些都阻碍了应用于这类CPU之上的嵌入式产品开发的速度。
然而,随着uCLinux的诞生,这一切都改变了。
uCLinux服务低端
uCLinux是一个完全符合GNU/GPL公约的项目,完全开放代码,现在由Lineo公司支持维护。在uCLinux这个英文单词中u表示Micro,小的意思,C表示Control,控制的意思,所以uCLinux就是Micro-Control-Linux,字面上的理解就是“微控制领域中的Linux系统”。它专门针对没有MMU的CPU,并且专为嵌入式系统做了许多小型化的工作。
1. 内存管理
这部分是uCLinux与传统Linux区别最大的地方。
标准Linux是针对有MMU的处理器设计的。在这种处理器上,虚拟地址被送到MMU,把虚拟地址映射为物理地址。通过赋予每个任务不同的虚拟--物理地址转换映射,支持不同任务之间的保护。
对于uCLinux来说,其设计针对没有MMU的处理器,即uCLinux不能使用处理器的虚拟内存管理技术。uCLinux仍然采用存储器的分页管理,系统在启动时把实际存储器进行分页。在加载应用程序时程序分页加载。但是由于没有MMU管理,所以实际上uCLinux采用实存储器管理策略。这一点影响了系统工作的很多方面。uCLinux系统对于内存的访问是直接的,所有程序中访问的地址都是实际的物理地址。操作系统对内存空间没有保护,各个进程实际上共享一个运行空间。一个进程在执行前,系统必须为进程分配足够的连续地址空间,然后全部载入主存储器的连续空间中。
2.uCLinux的内核加载方式
uCLinux的内核有两种可选的运行方式:可以在flash上直接运行,也可以加载到内存中运行。后者可以减少内存需要。
Flash运行方式:把内核的可执行映像烧写到flash上,系统启动时从flash的某个地址开始逐句执行。这种方法实际上是很多嵌入式系统采用的方法。
内核加载方式:把内核的压缩文件存放在flash上,系统启动时读取压缩文件在内存里解压,然后开始执行,这种方式相对复杂一些,但是运行速度可能更快(RAM的存取速率要比Flash高)。同时这也是标准Linux系统采用的启动方式。
3.uCLinux的根(root)文件系统
uCLinux系统采用romfs文件系统,这种文件系统相对于一般的ext2文件系统要求更少的空间。空间的节约来自于两个方面:首先内核支持romfs文件系统比支持ext2文件系统需要更少的代码;其次romfs文件系统相对简单,在建立文件系统超级块(superblock)需要更少的存储空间。Romfs文件系统不支持动态擦写保存,对于系统需要动态保存的数据采用虚拟ram盘的方法进行处理(ram盘将采用ext2文件系统)。
4.uCLinux的应用程序库
uCLinux小型化的另一个做法是重写了应用程序库,相对于越来越大且越来越全的glibc库,uClibc对libc做了精简。
uCLinux对用户程序采用静态链接的形式,这种做法会使应用程序变大,但是基于内存管理的问题,也就是基于没有MMU的特性,只能这样做,同时这种做法也更接近于通常嵌入式系统的做法。
5.可执行文件格式
uCLinux系统使用flat可执行文件格式。先解释几种可执行文件格式。 coff(common object file format):一种通用的对象文件格式; elf(excutive linked file):一种为Linux系统所采用的通用文件格式,支持动态连接; flat:elf格式有很大的文件头,flat文件对文件头和一些段信息做了简化。
经过如上所述的改动,形成了一个高度优化的、代码紧凑的嵌入式Linux,虽然它的体积很小,uCLinux仍然保留了Linux的大多数的优点:稳定、良好的移植性、优秀的网络功能、完备的对各种文件系统的支持、以及标准丰富的API。它的主要特征如下: ●通用Linux API ●内核体积 < 512 KB ●内核 +文件系统<900 KB ●完整的TCP/IP 协议栈 ●支持大量其它的网络协议 ●支持各种文件系统,包括 NFS、ext2、ROMfs and JFFS、MS-DOS和FAT16/32 现在已经成功使用uCLinux的案例包括:基于ColdFire 的CISCO 2500/3000/4000 路由器;基于ARM7TDMI的Aplio公司的voice-over-IP电话;AXIS公司的AXIS2001网络数码相机;Adomo公司的家庭机顶盒以及各种开发板。
仔细分析国内市场,目前嵌入式Linux可行的应用方案,基本都在低端嵌入式设备领域,包括各类手持设备和信息家电,它们对运算速度和实时性并没有非常苛刻的要求,并且成本低廉,可以被市场所接受,有着广阔的应用前景。在这个领域里,uCLinux将大显身手。
uCLinux开发环境
虽然uCLinux有很多优势,但在实际应用中开发人员还会遇到很多方面的困难,比如内核的移植、各种设备驱动的编写及稳定的运行、开发过程中的调试环境的建立,以及如何实现一个小巧的嵌入式GUI图形包等。因此,为了实现基于uCLinux的应用系统开发,建立或拥有一个完备的uCLinux开发环境是十分必要的。
需要环境
基于uCLinux的应用开发环境一般是由目标系统硬件开发板和宿主PC机所构成。硬件开发板用于操作系统和目标系统应用软件的运行,而操作系统内核的编译、应用软件的开发和调试则需要借助宿主PC机来完成。双方之间一般通过串口建立连接关系。 建立一个基于uCLinux的应用开发环境必须根据所选择的硬件目标系统而进行,一般情况下可以选择购买或者自行设计开发一个距离目标产品功能相近而且主要芯片(如CPU)一致的硬件开发板。通常情况下,它至少应该具有SDRAM、Flash(DOM、DOC)内存单元和LCD、触摸屏/键盘、串行接口等各种输入输出设备,根据实际特定的应用还可以包括USB、Modem、IrDA、IC卡等各种扩展接口。
建立交叉开发环境 在软件开发环境建立方面,由于uCLinux及相关工具集都是开放源码的项目,所以大多数软件都可以从网络上下载获得。首先要在宿主机上安装标准Linux发行版,比如Red-Hat Linux,接下来就可以建立交叉开发环境。
1.安装交叉编译工具 针对uCLinux目前有两套编译工具:m68k-coff和m68k-elf,它们都是GNU组织开发的优秀的编译器GCC的不同应用版本。它们的区别在于形成最终flat目标码之前的中间代码格式分别是coff和elf类型。elf格式的编译器比coff格式的编译器有许多优越性,建议使用m68k-elf交叉编译器。编译工具包中除了交叉编译器以外,还有链接器(ld)、汇编器(as)以及一些为了方便开发的二进制处理工具,包括生成静态库工具(ar、ranlib)、二进制码察看工具(nm、size)、二进制格式转换工具(objcopy)。这些都要安装在宿主机上。
2.安装uCLinux内核 利用已安装的交叉编译器编译生成运行与目标机上的uCLinux内核。与标准Linux相同的是,uCLinux内核可以以配置的方式选择需要安装的模块,而增加系统的灵活性。
3.安装应用程序库 用交叉编译器编译uC-libc和uC-libm源码,生成libc.a应用程序库和libm.a数学库。
4.安装其他工具 用GCC编译elf2flt源码,生成格式转换工具elf2flt。用GCC编译genromfs源码,得到生成romfs工具genromfs。
满足特殊需求
经过以上的准备工作之后,下面要针对特定应用所需要的设备编写或改造设备驱动程序。有一些设备驱动,uCLinux本身就已经具有。即便没有,因为uCLinux开放源码的特性,用户也可以很方便地把自己的驱动程序加入内核。如果用户对系统实时性,特别是硬实时有特殊的要求,uCLinux可以加入RT-Linux的实时模块。完成这些工作,一个嵌入式应用开发平台就已经搭建好了,在此之上,根据不同需要可以开发不同的嵌入式应用。图2 东软研制的uCLinux系统开发平台 图2是一个功能较为全面的uCLinux系统开发平台,该平台是东软基于长时期在嵌入式Linux系统方面的研究经验并结合市场的需求而研制的。
全面的开发平台
该平台的硬件部分采用的是Motorola的M68VZ328(33Hz)(DragonBallVZ)微处理器,主要配置包括8M SDRAM、4M FLASH,输入输出设备包括LCD、触摸屏、16键矩阵键盘、两路串口、调制解调器、红外口、PWM输出、SPI等。
该平台目前已经实现的软件功能包括:
●在DragonBall VZ上稳定运行的uCLinux内核 ●多种硬件设备的驱动程序,包括LCD、触摸屏、键盘、IrDA、RS232等,并且所有支持硬件的设备驱动程序,都以中断的方式在内核中实现 ●远程调试工具,基于GNU/GDB的交叉调试工具,完全通过软件手段实现。用户可以在开发过程中,在宿主机远程监控目标机的程序运行情况,可以设置断点,单步执行,察看变量等。 ●完整的而且功能强大的嵌入式GUI图形包,支持单色到真彩色,各种格式的图片显示,多字体、多字符集(包括中文)支持,以及一个桌面管理器。可移植性好,体积小,一般情况具有100KB的体积。 ●所开发的基于GUI的控件集可以更容易开发复杂应用系统,比如嵌入式浏览器等。 ●多种网络应用,通过串口,可以把设备连接到网上,使用www、邮件等网络应用。 图3是该平台的软件系统结构图。图3 该平台的软件系统结构图
在现有实现功能的基础上,该平台还计划在嵌入式浏览器、多媒体应用、Bluetooth协议支持以及嵌入式Java虚拟机、嵌入式数据库等方面实现进一步的功能扩展。 Lineo完整开发 Lineo公司的Lineo Embedix软件开发工具套件(Software Development Kit:SDK)2.0是一个功能强大的嵌入式软件开发环境,可以进行各种嵌入式Linux应用产品的开发工作。
Lineo Embedix SDK 2.0通过提供旨在消除嵌入式开发人员开发障碍并减少OEM产品上市时间的新功能,为嵌入式Linux应用发展提供了很好的工具。新产品可以支持更多的处理器类型,并有先进的“啮合”(snap-in)机制,可以动态添加对新软件和新硬件的支持。比如像USB、SMP、GUI、蓝牙等都可以由开发人员操作无缝地啮合到Embedix SDK 2.0系统当中。这个功能扩大的开发人员的选择,并为以后的软硬件升级提供了便利。
同时,Lineo公司还与MtroLink公司合作,为客户提供完全的Micro-X的支持。Micro-X的一个完整的SDK是通过组件组合成,其中包括Metro-X系统和Micro-X(Metro-X:一个抢先式任务的X服务器,Micro-X:标准的嵌入式X服务器)。SDK还包括Metro-Link的一个新工具“MicroScope”,它可以运行在一个Metro-X的开发平台上,帮助开发者分析在目标应用系统上对Metro-x的系统需求。开发者可以使用Micro-X系统的小标记来开发二维或者三维的图形系统,还可以用来开发机顶盒上嵌入视频窗口并且可以在里面播放Mpeg图像,支持www的掌上电脑、住宅使用的入户网关或者其他一些下一代的互联网接入设备应用。
根据嵌入式应用的需求,Micro-X可以定制系统达到可以执行的最小尺寸。这样使得完成的系统可以使用最小的内存来存储信息,目前系统可以应用于X86系统和PowerPc系统。
Micro-X加大嵌入式Linux软件开发工具(Embedix SDK)的产品线。将Micro-X嵌入到Embedix的开发工具里面,就组成一个更完整的解决方案。
嵌入式Linux以其出色的表现正在征服更多的用户,尤其在于低端市场。有一些传统的Linux公司进行了这方面的研究,如RedHat、VA Linux等;更值得重视的是,一些传统的大公司如IBM、SGI、Motorola、Intel等也进行了这方面的研究和开发。以uClinux为代表的功能强大且完全免费的操作系统,配合适当的硬件,可以快速开发出成本低廉的各类产品。东软集团有限公司根据他们自己的产品策略,经过深入的对比研究,最后采用由Lineo公司维护的uClinux。东软基于长时期在嵌入式Linux系统方面的研究经验并结合低端市场的需求,研制出了一个功能较为全面的uClinux系统开发平台。我们期待着以Linux为代表的开放式的软件运动,能给中国乃至国际嵌入式领域带来蓬勃发展的契机。