嵌入式Linux中文站

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个不同的角度去定义系统,使其更加准确。

本文永久更新链接:http://embeddedlinux.org.cn/emb-linux/system-development/200810/15-171.html



分享:

评论