嵌入式系统被定义为:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。嵌入式操作系统是支持嵌入式系统应用的操作系统软件,它是嵌入式系统极为重要的组成部分,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等。与通用操作系统相比较,嵌入式操作系统在系统实时高效性、硬件的依赖性、软件固态化以及应用的专用性等方面具有较为突出的特点。嵌入式操作系统的出现,将大大提高嵌入式系统开发的效率,改变以往嵌入式软件设计只能针对具体的应用从头做起。在嵌入式操作系统之上开发嵌入系统将减少系统开发的工作量,增强嵌入式应用软件的可移植性,使嵌入式系统的开发方法更具科学性。近年来,随着电子技术的不断进步,嵌入式系统开发己成为热点,而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存储空间,考虑到linux的kernel往往小于500kB,这种运行库实在太大。我们做了一些精简的工作。方法无非两种: 1)用静态连接的方法,完全不使用运行库动态连接。 2)对这个库的函数进行了精简。 在一个桌面系统上,使用动态连接可以带来许多好处。使用动态连接库,可以让应用程序跟函数库的更新,升级分离,便于维护,可以让同时运行的多个程序共享一段代码。但是,在嵌入式系统中,很少有多个程序并行的可能,程序的维护,尤其是库函数的维护更新是不常见的。这时,使用静态连接的优势就极为明显。因为静态连接可以只将库中用到的部分连接进程序。在应用程序较少(小于5)的情况下,静态连接可以达到较好的结果。因为C语言运行库是一个最基本的运行库,可以认为是linux运行环境的一部分。为了便于将来扩充的需要,我们也采用第二种方法,针对我们的需要,对库函数的内容进行了一些精简,只保留了一些基本功能。精简后约需要200kB存储空间。但相当多的功能不支持了。
|