Chinaunix首页 | 论坛 | 博客
  • 博客访问: 834161
  • 博文数量: 244
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 2420
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-29 09:07
文章分类

全部博文(244)

文章存档

2011年(4)

2010年(3)

2009年(72)

2008年(119)

2007年(46)

我的朋友

分类: LINUX

2008-03-07 18:07:55

 : 目前的嵌入式Linux版本还不是一套非常简洁的系统,如何优化系统至使适合嵌入式应用成为最主要的目标,因此介绍了Linux嵌入式操作系统,讨论了如 何对内核(kernel)、守护程序(daemons)、程序库(libraries)和应用和工具程序 (applications/utilities)等4个主要部分进行缩减,以便配置在以快闪内存为存储设备的嵌入式系统中。
    关键词:Linux嵌入式系统;守护程序;程序库;应用程序

0  
   嵌入式系统就是用于控制设备的计算机。它们最初于60年代晚期在通讯中被用于控制机电电话交换机。在过去的十多年里,计算机产业不断朝着更小的系统方向 发展,嵌入式系统也与之一起为这些小型机器提供了更多的功能。渐渐地就需要把这些嵌入式系统联接到某种网络上,提高了系统的复杂程度并要求更多的存储器和 接口,因而也就产生了对操作系统的服务的要求。70年代晚期出现了用作嵌入式系统的现成的操作系统,如,VxWorks,pSOS,Neculeus和 Windows CE。
    大多数Linux系统运行在PC平台上,但Lin-ux也可以作为嵌入式操作系统,Linux流行的"back-to-basics"方法使得它的安装和 管理比UNIX更加简单灵活。典型的压缩包装Linux系统经过打包,在拥有硬盘和大容量内存的PC机上运行,则嵌入式系统不要这么高的配置。一个功能完 备的Lin-ux内核要求大约1 Mbyte内存。而Linux微内核只占用其中很小一部分内存,包括虚拟内存和所有核心的操作系统功能在内,只需占用PentiumCPU系统的100 kbyte内存。只要有500 kbyte的内存,一个有网络栈和基本实用程序的完全的Linux系统就可以在一台8位总线(SX)的Intel386微处理器上运行得很好。由于内存要 求常常是需要的应用所决定的,比如Web服务器或者SNMP代理,Linux系统甚至可以仅使用256 kbyte ROM和512 kbyteRAM进行工作。核心Linux操作系统本身的微内核体系结构相当简单。网络和文件系统以模块形式置于微内核的上层。驱动程序和其它部件可在运 行时作为可加载模块编译到或者是添加到内核。这为构造定制的可嵌入系统提供了高度模块化的构件方法。嵌入式系统也常常要求通用的功能,为了避免重复劳动, 这些功能的实现运用了许多现成的程序和驱动程序,它们可以用于公共外设的应用。然而,因为还在起步阶段,目前的嵌入式Linux版本还不是一套非常简洁的 系统。如何优化系统至适合嵌入式应用成为最主要的目标。

1 可优化的部分
   Linux软件不断发展,积累了越来越多的源程序,形成相同功能程序有多种选择。我们需要的是一个精简的系统,因此必须进行优化。首先把系统分为4个部 分,内核(kernel),守护程序(daemons),程序库(libraries),应用和工具程序(applications/utili- ties)。我们进行优化的原则是不直接修改源程序,以确保源代码的完整性。表1是各子系统优化的方向与目标。


   因为嵌入式系统的功能规格定义非常明确,在内核的设定中只需要留下必要的选项和模块,其它不必要的都可以舍去。另一种就是利用取代的方式,如果是网络设 备,就可以把console的输出用串行端口来取代显卡的输出,这样就可以在Linux2.4的核心中省下42 kbyte的空间。除此以外,即插即用,软驱、光驱、键盘、鼠标、USB等的驱动程序都可以被省略。
1.2 守护程序
   
在 开放源代码的影响下,程序在进一步完善功能的同时,对各种软硬件的支持更加多元化,因此在有限的资源下,必须根据需求,重新定义各程序所需要的功能,而避 免安装原本可直接执行的套件。例如,如果只使用Squid作为http proxy,而没有用到其caching的功能。就可在编译时,直接利用Squid的设定程序,关掉对文件系统的支持。这样在Squid2.4. Stable1的版本中,省掉145 kbyte。其它像GNUZebra这些网络相关的程序,也可以把IPv6的支持关掉以节省空间。
1.3 程序库
   程序可使用静态或动态链接,静态链接使程序执行时overhead减少,源程序也比较简洁。而动态链接则随公用程序库的程序数目增加而节省大量的空间, 因此必须根据需求在两者之间取得平衡,如果程序库只有一个程序在用,便可考虑选择静态链接。使用动态链接的情况下,可以利用工具ldd来检查程序与程序库 的关系。由此,可找出及保留系统所需的共用程序库的最小集合。
1.4 应用和工具程序
  在应用和工具程序中就有更多的弹 性了,因为这类程序的选择性多,而且可用多种方法替代。以核心为例,通过对/proc的支持,便可以读取或修改多项系统的参数设定,不必再使用不常用的工 具程序。例如只要读取ARPtable时,便可使用指令#cat/proc/net/arp来完成,不需要使用/sbin/arp这个程序。其次在嵌入式 系统上,对象不再是一般PC机使用者,简化程序界面、在线说明,甚至简化程序功能等都可以实现精简化的效果。BusyBox[2]就是其中具有代表性的一套工具程序,它以单一的小程序,十分精简地提供了shell、文字处理、压缩程序等UNIX中常用的功能。表2列出BusyBox与tonylogin[3]的功能及其相对原工具程序的大小。

2 优化方式
   目前Linux的发行版本(distibution)众多,各有优缺点,集各家之长,建立一套自己的嵌入式Linux,只要根据适当的方法就可以。以 Redhat7.1的发行版本来看,完整安装服务器的版本,约需1.3 Gbyte以上的空间,这不包含一些特别的套件。在众多的软件中,我们只要其中的一小部分,可能在10 Mbyte到30 Mbyte之间。进行的方式必须有效率地建立系统,基本可行的方法有2种:(1)从其中一个发行版本中把不必要的部分全部删掉,留下我们想要的系统; (2)把系统所有的功能依规定重新建立。
  如前所述,必须对现系统功能规格清楚了解,才能进行缩减系统的动作。从图1可见,使用方法1会有多达 几百M byte不必要的数据;使用方法2则可以很直接地建立一个从2 M Mbyte到16 M Mbyte的嵌入式系统。因此使用重建的方法是较好的选择,使用此方式前,需明确系统功能的规格、使用的软件套件、目标平台的规格,三者之间互相关联,就 是从3个不同的角度去定义系统,使其更加准确。


3 开发的环境
  在清楚了解准备建立的系统后,便可开始利用Linux打造嵌入式的设备了。首先我们必须区分开发平台与目标平台。目标平台就是程序最后被移植及执行的地方,因为资源有限,开发与除错的环境都集中在开发平台上。表3和表4列出了2个平台上的主要开发工具。  
   要建立一个最基本的开发环境,必须具备一套跨平台的开发工具(Cross Development Kit),包含有编译器、连接器、出错器等。另外还要准备制作文件系统所需的程序。而目标平台上,只需准备一段系统开机程序,如etherboot, reboot等。此程序可以在除错阶段时,从网络取得映象后启动,或是直接从快内存储器,把系统启动。一旦启动后,就进入Linux的操作系统,同时也可 使用GDBserver作为远端除错的工具。

 

4 开发过程
   开发的过程如图2所示,可以分为几个部分。首先准备Linux的核心,配上根目录所在的文件系统,再加上守护程序和应用程序,经过压缩后,打包成一个含 有核心的映像档。目标平台通过网络或快闪内存储器,取得映像档后,进行解压缩,经过系统启动,初始化后,就是一台使用嵌入式Linux为操作系统的机器。

  建立文件系统架构的时候,必须注意权限的设定。因为闪存的可覆盖次数有限,所以会以只读的 方式绑定(mount)系统。/var/dev等目录需为可读写的,或是记录一些暂时性文件(易丢失性文件)等,都可以利用系统的存储空间来模拟可写入的 存储系统(RAM disk)。通过建立符号联接(symbolic link)取得写入权限,余下的则以只读的方式保存在内存上。如果大量的数据必须开机后留下的话,外挂硬盘至系统/var/log是比较适合的做法。小量 的数据是可以写入内存中,但一定要使用缓存,否则频繁的写入会使其使用寿命缩短。同理,我们不可使用swap,如果存储器实在不足的话,可以考虑系统留在 闪存上,同样以外加硬盘作为swap disk的功能。
  在嵌入式系统中,会配合ram disk使用在系统上,但是会与使用一般的存储系统有差别,因为ramdisk会使用部分存储器,因此可用的存储器相对减少,可能造成对存储器使用状况的误解,必须特别注意。图3说明了使用ram disk时的存储器空间分布情况。


5 结论
   使用Linux作为嵌入式操作系统是一件有实际意义的事情,因为使用者与贡献者遍布世界各地,他们都贡献出自己的成果,各种主要平台上都有支持的版本。 可是在资源众多的情况下,却没有一个很好的集成环境。在嵌入式Linux中,尽管各个独立的开发工具,都已经功能完备有兼备图形使用界面。然而集成环境的 发展,尚在起步阶段。与嵌入式操作系统VxWorks的开发环境相比,功能还相差甚远,即使是以Linux为主的厂商如Lineo[3]的Embedix和MontaVista[4]的HardHat Linux等,都提供有不错的开发工具,唯独缺乏一个功能强大的图形集成化环境。集成环境在功能上应以跨平台的开发环境为最重要的方向,辅以网络在线除错 功能,动态执行模块,实时图形显示执行状态等。我们认为这就是开放式软件一直以来所面对的同样问题,如果得到解决,嵌入式Linux的应用必会快速发展。

参考文献
[1] DARRICKAddison.嵌入式Linux应用[EB/OL].http://www.pocketix.com.cn,2002,01-16.
[2] 嵌入式系统以及如何构造一个嵌入式系统概览[EB/OL].http://www.embed.com.cn/,2001,11-12.
[3] The Swiss Army Knife of Embedded Linux[EB/OL].http://busybox.lineo.com,2002,02-05.
[4] The Redhat Embedded Debug and BootstrapFirmware[EB/OL].http://sources.redhat.com/reboot,2001,12-24.
[5] The Linux KernelArchives[EB/OL].http://www.kernel.org,2001.12-24.
[6] 殷茜,温平川,应俊.嵌入式软件调试环境的对等协议的设计与实现[J].重庆邮电学院学报(自然科学版),2002,14(2):70-74.
阅读(727) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~