作者:戴晟晖,张良清 来源:单片机与嵌入式系统应用
1 两种开源嵌入式操作系统介绍
uClinux是一种优秀的嵌入式Linux版本。uClinux是micro-Conrol-linux的缩写。与标准Linux相比,它集成了标准Linux操作系统的稳定性、强大网络功能和出 {MOD}的文件系统等主要优点。但是由于没有MMU(内存管理单元),故其多任务的实现需要一定技巧。
eCos(embedded Configurable operating system),即嵌入式可配置操作系统,是RedHat的产品,但eCos并不是Linux或Linux的派生。eCos弥补了Linux在嵌入式应用领域的不足,是一个源码开放的可配置、可移植、无版税、面向深嵌入式应用的实时操作系统。eCos的核心部分是由不同的组件组成的,包括内核、C语言库和底层运行包等。每个组件能提供大量的可配置选项,利用eCos提供的配置工具可以很方便地进行配置。通过不同的配置使得eCos能够满足不同的嵌入式应用。
对于以上两种源码公开的实时操作系统,主要从以下几个方面进行比较。通过比较,能够为大家选择适合自己系统的RTOS提供参考。
2 基本操作性能的比较
2.1 应用程序的运算能力
在Linux和uClinux操作系统启动的时候,都会有这样一句话——Calibrating delay 1oop..0k—xxx BogoMips,这一过程叫作BogoMips(读作bogumips)。Linus Torvalds引入BogoMips主要有两个目的:①给用户一个大概的系统运算能力的概念;②由于系统中有许多代码需要精确的软件延时,通过BogoMips来获得软件延时每个周期消耗的时间。BogoMips的过程就是一个简单计数循环,看ls可以循环多少次,然后除以500000就得到了BogoMips的数值。
表1是分别在目标硬件平台上运行eCos和uClinux下的BogoMips应用程序得到的结果。我们使用了不同的测试条件,激活和非激活AT76C120的存储器缓冲控制器。
从表1可知,打开缓冲存储器。对eCos的应用程序性能影响较uClinux的大;反之,关闭缓冲,eCos的应用程序的性能就下降很多。
2.2 存储器访问能力
采用一种同时能够测试缓冲控制器和标准存储器访问函数的测试方法来测试存储器访问能力。在这里,选用田纳西大学的Philip J.Mucci等人提出的CacheBench方法。其工作原理是,重复顺序读/写一定长度的存储器块的数据,记录重复n次所用的时问,用总的读/写数据除以耗时,得到读/写每一字节所用的时间;同时,通过调整数据块的长度和不同的读写方法(使用标准函数或者使用直接代码读写),获得不同条件对存储器读/写的影响。
在实验中,对于每一种测试模式使用4种不同的块长度(分别为256、512、1024、2048字节),以观察不同的抉长度对存储器访问性能的影响。表2是实验的结果:横向比较,eCos的存储器访问性能从总体上都优于uClinux;纵向比较,5种模式下性能关系大致为缓冲读>缓冲读,改写/写>缓冲写>mcmset>mcmcpy。在同一种测试模式下,对于缓冲读,越大的块长度,其表现的存储器访问性能越好;而其他模式下,存储器访问性能基本与块长度无关。
基于以上结果的分析如下:①造成eCos存储器访问能力优于uClinux的原因是,eCos的应用程序获得的处理器时间较长;②造成读缓冲模式下,存储器访问性能随块长度增长而变好,而其他模式下不变的原因是,与AT76C120的缓冲控制器的回写模式有关。由于AT76C120的缓冲控制器采用了直接回写的缓冲回写模式,缓冲控制器对存储器写操作没有任何缓冲作用,因此当处理器写存储器时基本不会享受到由缓冲控制器带来的好处,相当于直接访问外部存储器。
2.3 驱动程序性能测试
为了测试系统的驱动程序性能,选择CF卡驱动程序作为测试对象。我们的测试方法简单,就是在应用程序中打开一个大文件(10MB),然后调用fread读文件,每次读512字节到缓冲中,直至将文件读完。
表3是测试结果:uClinux的性能优于eCos。这主要是由于uClinux的块驱动有一个叫集簇的功能,它可以将对块设备的多个请求归并在一起执行,这样对于像磁盘这样反应较慢的设备可以提高整体的读/写速度。
3 综合应用性能比较
我们知道,一个图像压缩和解压缩的程序往往需要大块的存储器访问操作
、密集的数学运算和大量的磁盘访问。由于现在手持的嵌入式设备大多需要有这方面的应用需求,因此一个图像压缩和解压缩的应用程序既符合理论研究的要求,又符合实际应用的需求。为此我们选择gif图片的编解码的程序作为综合性能测试的测试程序。测试结果如表4所列。
我们看到,eCos和uClinux解码速度都很低,主要是因为完全使用了软件解压缩;而且由于AT76C120的图像显示格式是YCrCb的,而giflib的解压缩结果是RGB的,因此必须使用
浮点运算将RGB的数据转换到YCrCb。AT76C120的ARM7TDMI不支持浮点指令,因此不得不使用软件仿真来完成
浮点运算,这其中大部分时间被用在了从RGB到YCrCb的转换上。测试结果基本与前面基本操作系统测试的结果是一致的——eCos在整体上是优于uClinux的。
4 可移植性
eCos的系统一J移植性应该明显比uClinux的好。在eCos系统中,每一个硬件平台都用一个单独的目录存放针对这一硬件平台的硬件抽象层的代码和配置信息,较容易让用户理解。而uClinux的硬件抽象层的代码分布在好几个目录中,而且各个平台的代码混合在一个源文件中,通过#ifdef+#end的方式来选择不同的硬件平台的代码。另外,eCos在移植时所要更改的源代码文件数少于uClinux。
可移植性不应仅仅是操作系统的移植,还应该包含应用程序的移植性。程序的可移植性,是由两方面决定的。首先,应用程序必须被编写得可以移植。关于这方面,A.Dolenc,A.Lemmke和D.Keppel在其Notes On WritingPortable Programs In C一文中给出了很好的解释。其次是嵌入式操作系统提供较丰富的系统函数和标准函数库。一个系统提供的函数库越丰富,则越多的应用程序不用进行较大的更改就能直接在其上运行。在标准函数方面,eCos只提供了较为简单的C标准函数库和IEEE
浮点运算数学库,uClinux则提供了,与Linux下的glibc相兼容的函数库,而glibc是大部分开放源代码项目的构建基础。由此可以看出,在应用程序的可移植性上,uClinux的兼容性更好。
5 开发模式和开发难易度
eCos的开发模式是一套更接近传统单片机的开发模式(如应用程序静态链接),uClinux的开发模式则更接近Linux的开发模式。因此可以预见,eCos更受一批从8位单片机系统开发转到32位嵌入式系统开发设计人员的欢迎.而uClinux更受熟悉Linux的设计人员的青睐。
6 总 结
通过以上比较可知,由于eCos从一开始设汁时就是以嵌入式系统为目标的,因此在性能上,有较大优势;反之,uClinux则是由Linux进化而来的,因此在以速度和优化为主题的嵌入式系统环境中,并不占优势。但是由于有Linux的强大后盾,其功能的强大和兼容性是非常突出的。如果应用程序是从其他系统中移植过来的,或者开发人员有Linux的背景,或者开发成本占总成本的比例较高,则uClinux比较适合;反之,eCos比较适合。