5/02/2008

基于Linux的嵌入式操作系统的研究

基于Linux的嵌入式操作系统的研究

引言

嵌入式系统被定义为:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。嵌入式操作系统是支持嵌入式系统应用的操作系统软件,它是嵌入式系统极为重要的组成部分,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等。与通用操作系统相比较,嵌入式操作系统在系统实时高效性、硬件的依赖性、软件固态化以及应用的专用性等方面具有 较为突出的特点。嵌入式操作系统的出现,将大大提高嵌入式系统开发的效率,改变以往嵌入式软件设计只能针对具体的应用从头做起。在嵌入式操作系统之上开发嵌入系统将减少系统开发的工作量,增强嵌入式应用软件的可移植性,使嵌入式系统的开发方法更具科学性。近年来,随着电子技术的不断进步,嵌入式系统开发己成为热点,而Linux作为一个自由软件,也得到了极大的发展,嵌入式系统与Linux的结合,正日益被人们看好。Linux自身具备一整套工具链,容易 自行建立嵌入式系统的开发环境和交叉运行环境,并且可以跨越嵌入式系统开发中的仿真工具(ICE)的障碍。Linux具有内核小,效率高,源代码开放等优点。强大的网络支持使得可以利用Linux的网络协议栈将其开发成为嵌入式的TCP/IP网络协议栈。

1 系统的组成                                    

一个基本的嵌入式操作系统应包括:

引导程序。能实现系统的快速引导,提供瞬间开机功能。负责将Linux内核加载到内存,并将控制权交给内核初始化程序。具体工作包括:寻找或将指定的内核映像解压,解压文件系统。

②Linux内核。Linux是一个单一内核操作系统,但可以动态装入和卸载内核中的部分源代码,这与传统的单一内核操作系统全部静态编译内核代码是不同的。Linux内核由内存管理、进程管理、定时器中断管理、模块管理、虚拟文件系统、接口文件系统、设备驱动程序、进程间通信、网络管理、系统启动等构成。

初始化进程。系统在刚刚启动时,运行于内核方式,这时候只有一个初始化进程在运行,他首先做系统的初始化,然后执行初始化程序(一般是/sbin/init)。初始化进程是系统的第一个进程,以后所有的进程都是初始化进程的子进程。

硬件驱动程序。设备驱动程序是内核的一部分,它像内核中其它代码一样运行在内核模式。驱动程序如果出错将会使操作系统受到严重破坏,甚至能使系统崩溃并导致文件系统的破坏和数据丢失。Linux设备驱动程序的主要功能有:对设备进行初始化;使设备投入运行和退出服务;从设备接收数据并将它们送回内 核;将数据从内核送到设备;检测和处理设备出现的错误。

提供所需功能的一个或更多应用程序。

2 系统的小型化

Linux的一个通常观点是,它由于太大而不宜用作嵌入式系统,这种观点不一定是真实的。我们可以通过配置内核、裁剪shell和嵌入式c库对系统定制,使整个系统能够存放到容量较小的Flash中。Linux的动态模块加载使Linux的裁剪极为方便,高度模块化的部件使添加非常容易。一般说来,经过适当裁剪后的内核的启动部分的内核代码不到500KB。用户可以把内核和root文件同存放在一张软盘上。

Linux通常的运行环境包括大量的运行时需要的库。这些运行库相互依赖,大小不等。其中最基本的是C语言的运行库glibc。这个库主要完成基本的输入输出,内存访问,文件处理。一个标淮的glibc库大约要1200kB存储空间,考虑到linuxkernel往往小于500kB,这种运行库实在太大。我们做了一些精简的工作。方法无非两种:

1)用静态连接的方法,完全不使用运行库动态连接。

2)对这个库的函数进行了精简。 在一个桌面系统上,使用动态连接可以带来许多好处。使用动态连接库,可以让应用程序跟函数库的更新,升级分离,便于维护,可以让同时运行的多个程序共享一段代码。但是,在嵌入式系统中,很少有多个程序并行的可能,程序的维护,尤其是库函数的维护更新是不常见的。这时,使用静态连接的优势就极为明显。因为静态连接可以只将库中用到的部分连接进程序。在应用程序较少(小于5)的情况下,静态连接可以达到较好的结果。因为C语言运行库是一个最基本的运行库,可以认为是linux运行环境的一部分。为了便于将来扩充的需要,我们也采用第二种方法,针对我们的需要,对库函数的内容进行了一些精简,只保留了一些基本功能。精简后约需要200kB存储空间。但相当多的功能不支持了。

shell作为系统与用户打交道的最简单的方式,虽然它不是系统内核的一部分,但是它调用了内核的大部分功能来执行程序,建立文件。并以并行的方式协调各个程序的运行。可以认为它是linux中最基本也是最重要的一个应用程序。在嵌入式系统中使用μClibcBusyBox的组合,可以有效的减小系统的规模。用μClibc提供的M68K体系的工具来建立一个静态连接μClibc库的BusyBox 的实现的过程大致分为两大块:

1)建立的交叉编译环境。

2)用的交叉编译环境来编译

3 系统移植

Linux的移植。如果Linux不支持选用的平台,就需要把Linux内核中与硬件平台无关的部分改写,使之支持所选用的平台。为提高系统的可移植性,应尽量用可以执行好的高级语言开发系统,少用汇编语言;对不可移植的代码和汇编代码,可以通过宏定义和函数的形式分类集中在某几个特定的文件之中。

系统移植的步骤

1)建立交叉编译环境。这个编译环境就是指编译内核所需的工具ld,as,ar,ranlib,gcc以及相关的库文件。

2)内核移植。当交叉编译环境建好后,就可以用它来编译相关体系的内核了。要编译特定体系的内核,需要修改linux/目录下的Makefile文件。

4 嵌入式Linu操作系统的开发难点:

可定制的嵌入操作系统提供了高度模块化的构件方法。嵌入式操作系统也常常要求通用的功能,为了避免重复劳动,这些功能的实现运用了许多现成的程序和驱动程序,它们可以用于公共外设和应用。 然而,因为还在起步阶段,目前的嵌入式Linux版本还不是一套非常简洁的系统。如何优化系统至适合嵌入式应用成为最主要的目标。

许多Linux的应用程序都要用到虚拟内存,在许多嵌入式操作系统中,是没有价值的,所以不要以为一个没有磁盘的嵌入操作式系统可以运行任何Linux应用程序。

内核调试工具都不怎么好,特别是在较底层的。kgdb可以使错误定位非常容易,你只要重新启动。不幸的是,打印语句更麻烦。

④Linux非常的灵活。嵌入式系统总的来说却不灵活;而且它们完全是为最有效实现预定功能而严格设计的。现在的趋势是保持灵活性、保持总体目标功能、尽量少做修改。这个目标是崇高的,但是,所付出的代价将是针对具体的工作做出巨大的调整。

5 结束语

开发中国自主产权的嵌人式处理器和嵌人式操作系统,有十分重要的战略意义。由于Linux具有免费、源代码开放、支持多种CPU等优点,使用Liux作为底层操作系统,对它进行裁减和定制,并在其基础搭建嵌入式系统平台,成为日益流行的嵌入式操作系统的解决方案。


没有评论: