摘要
本文主要介绍了几种减裁Linux核心的方法,可以用于嵌入式系统、嵌入式服务器的核心配置。
--------------------------------------------------------------------------------
By iamafan
1.对于一般PC的普通内核配置
?牐牰杂谝话愕挠没Ф?言,对于Linux内核的效率和大小的要求都不高。因此一般不对内核重新配置,因为Linux安装程序会在安装时对大部分设置按照安装的需求和实际的硬件做缺省设置。这样的内核会比实际需要的繁冗,有很多模块加载后根本就没有用到,但是因为现在的PC的内存一般都是上百MB,而一个Linux内核再大也就是几百K,因此对于一般用户而言,无需再重新编译内核了。
?牐犜谝惶≒3-566的Dell机器安装Red-Hat??7.2,内核版本为2.4.6
?牐犚韵率且恍└没?的配置:
?牐燣oadable?爉odule?爏upport??:Y
?牐燦etworking?爏upport:?燳
?牐燩CI?爏upport:Y
?牐燬ystem?燰?營PC?牐篩因为可以做一些基于System?燰的程序
?牐燢ernel?爏upport?爁or?燼.out?燽inaries:Y
?牐燢ernel?爏upport?爁or?燛LF?燽inaries:Y
?牐燘lock?燿evices?牐憾源烁?据该机的硬件做了相应的配置,去除一些本机没有的硬件设备的支持模块。如:Loopback?燿evice?爏upport
?牐燦etworking?爋ptions:
?牐牐燩acket?爏ocket:Y
?牐牐燭CP/IP?爊etworking:Y
?牐牐燦etwork?爁irewalls:Y
?牐牐燭he?營PX?爌rotocol:Y
?牐燦etwork?燿evice?爏upport:
?牐牐燦etwork?燿evice?爏upport:Y
?牐牐燛thernet(10?爋r??100Mb/s):Y
?牐燙haracter?燿evice
?牐牐燰irtual?爐erminal:Y
?牐牐燬upport?爁or?燾onsole?爋n?爒irtual?爐erminal:Y
?牐燜ilesystems
?牐牐燬econd?爀xtended?爁s?爏upport:Y
?牐牐燰FAT?爁s?爏upport??:m?牨收哂惺被嵊玫礁没?上的VFAT分区??
?牐牐?/proc?爁ilesystem?爏upport?燳
?牐牐營SO9660?燾drom?爁ilesystem?爏upport:m
?牐燦etwork?燜ile?燬ystems
?牐牐燦FS?爁ilesystem?爏upport:Y
?牐牐燬MB?爁ilesystem?爏upport:m
?牐燙onsole?燿rivers
?牐牐燰GA?爐ext?燾onsole??:Y
?牐牐燰ideo?爉ode?爏election?爏upport:Y
?牐牐燰ESA?燰GA?爂raphics?燾onsole??:Y
?牐燢ernel?爃acking
?牐牐燤agic?燬ysRq?爇ey:Y
?牐牷褂幸恍┤笔〉纳柚帽收呙挥懈摹U庋?编译出来的版本有700K.经过笔者调试过没有出现什么问题。
2.PDA的内核设置
?牐燩DA(Personal?燚igital?燗ssist)如:手机,快译通,文曲星等等。这类系统要求系统稳定,内核小而且效率高,常常需要一些特殊的硬件支持。对进程调度、文件系统要求单一,有些就是单进程系统。对网络的支持由根据需要确定。RedHat的内核无法直接用来设计一些特殊要求的PDA,一般还要加入对硬件的特定模块。
?牐牽勺魅缦律柚茫?
?牐燦etworking?爏upport:Y??:一般PDA都支持上网更新功能
?牐燢ernel?爏upport?爁or?燛LF?燽inaries??:Y
?牐燙ompile?燼s?燛LF??–if?爕our?燝CC?爄s?燛LF-GCC??:Y这两个设置使系统的执行文件都为ELF
?牐燗dvanced?燩ower?燤anager?燘ios?爏upport:Y??
?牐燘lock?燿evices??:应该加入对硬件特殊的支持模块
?牐燦etworking?爋ptions
?牐牐燩acket?爏ocket??
?牐燜ileSystem??
?牐牐燬econd?爀xtended?爁s?爏upport:Y
?牐犃硗獾囊恍┕δ芪狽,当然一些功能必须选择用来支持上述的模块。编译后为100KB---400KB
3.小型嵌入式系统的内核配置
?牐犚桓鲂⌒偷那度胧絃inux系统只需要下面三个基本元素:
?牐?
引导工具?牐?
Linux微内核,由内存管理、进程管理和事务处理构成?牐?
初始化进程
?牐犎绻?要让它能干点什么且继续保持小型化,还得加上:
硬件驱动程序?牐?
提供所需功能的一个或更多应用程序。
?牐犜僭黾庸δ埽?或许需要这些:?犚桓鑫募?系统(也许在ROM或RAM)中?燭CP/IP网络堆栈对该种系统,做了不同的设置:
?牐牪灰??爁loppy;不要SMP、MTRR;不要?燦etworking、SCSI;把所有的?燽lock?燿evice?犚瞥?,只留下?營DE?燿evice;把所有的?燾haracter?燿evice?犚瞥?;把所有的?爁ilesystem?犚瞥?,只留下?爉inix;不要?爏ound?犞г?。这样己经把所有的选项都移除了。这样做之后,得到了一个??188K?牭暮诵?.
?牐牥严铝辛礁龅蛋钢械模?-O3,-O2?犛茫?-Os?犎〈?。
?牐牐?./Makefile
?牐牐?./arch/i386/kernel/
?牐牐燤akefile
?牐犝庋?一来,整个核心变小了??9K,成为??179K。
?牐牪还?这个核心恐怕很难发挥?燣inux?牭墓δ埽?因此把网络加回去。把General?爏etup中的?爊etwork?爏upport?牸踊厝ィ?重新编译,核心变成??189?燢。10K就加上个?燭CP/IP?爏tack。?犛衧tack没有driver也是枉然,把?爀mbedded?燽oard常用的RTL8139的driver加回去,195K.
?牐犎绻?你需要?燚OS?牭蛋赶低常?那大小成为??213K。如果?爉inix?犛茫爀xt2?牷淮?,则大小成长至??222K。
?牐燣inux所需的内存大约在600K~800K之间。1MB内存就可能可以开机了,但不太有用,因为连载入C程序库都有困难。2MB内存应该就可以做点事了,但要到??4MB以上才可以执行一个比较完整的系统。
?牐犚蛭狶inux的filesystem?犗嗟贝螅?大约在??230K?犠笥遥?占了??1/3?牭奶寤?。内存管理占了80K,和核心其它部分的总和差不多。TCP/IP?爏tack?犝剂?65K,驱动程序占了120K。SysV?營PC占了??21K,必要的话可以拿掉,核心档应该可以再小个10K左右。
?牐犎绻?要裁剪核心大小,应该动那里呢??牬鸢负苊飨裕?当然是文件系统。Linux?牭模燰FS简化了档案系统的设计,buffer?燾ache,?燿irectory?燾ache增加了系统的效率。但这些embedded系统根本就用处不大。如果可以把它们拿掉,核心可以马上缩小??20K?犠笥摇H绻?跳过整个?燰FS,直接将文件系统写成一个?燿river?牭男褪剑?应该可以将??230K缩减至50K左右。整个核心缩到100K左右。
4.工控机的内核配置
?牐牰杂诠た鼗?内核,对于内核的大小要求并不严格,关键的是正确性,健壮性和实时性(某些机子要求实时性较高).对文件系统要求单一,但保证正确性.网络按需设置。
?牐牽勺魅缦屡渲?:
?牐燬ymmetric?爉ulti-processing?爏upport:Y
?牐燣oadable?爉odule?爏upport:N?牴た鼗?一般将可能用到的模块都全部装入内存.
?牐燦etworking?爏upport:Y
?牐燬ystem?燰?營PC??:Y
?牐燢ernel?爏upply?爁or?燛LF?燽inaries:Y
?牐燘lock?燿evices:根据具体硬件配置
?牐燦etworking?爋ptions
?牐牐爌acket?爏ocket:Y
?牐牐牳?据具体需要,一般工控机是通过LAN连接,与外界隔离故要IPX协议,另外Tcp/ip一般也需要.
?牐牐燪oS?燼nd/or?爁air?爍ueueing:Y
?牐牐燪oS(Quality?燨f?燬ervice??)?燼nd?爁air?爍ueueling?犑且恢峙哦?某种封包先送的网络线程表,可同时针对多个网络封包处理并依优先处理顺序来排序,称之为packet?爏chedulers.此功能特别是针对实时系统时格外重要,当多个封包同时送到网络设备时,Kernel可以适当的决定出哪一个封包必须优先处理.因此Kernel提供数种packet?爏cheduling?燼lgorithm.
?牐燜ilesystems
?牐牐燬econd?燛xtended?爁s?爏upport:Y
?牐犉溆嗯渲煤托⌒颓度胧较低巢畋鸩淮?.同一台机器上编译出来的内核大小为800多KB。
5.服务器的内核配置:
?牐牐牐?
?牐牱?务器的内核对网络设置和进程调度都非常关键.做如下配置:
?牐燬ymmetric?爉ulti-processing?爏upport:Y
?牐燣oadable?爉odule?爏upport:Y
?牐燦etworking?爏upport:Y
?牐燦etworking?爋ption
?牐牐燩acket?爏ocket:Y。
?牐牐燭CP/IP?爊etworkeing:Y
?牐牐燦etwork?爁irewalls:是否采用网络防火墙。如果计算机想当firewalls?爏erver?牷蛘呤谴τ赥CP/IP?犕ㄐ判?议的网络的网路结构下,这一项要选[Y]
?牐牐燦etwork?燼liasing[Y/m/n/?]:一台网络上的计算机可以拥有多组IP地址。如果计算机想拥有多个IP地址,就选择[Y].
?牐牐營P:forwarding/gatewaying[Y/m/n/?]:假如用户想当路由器的话,选择[Y],但先决条件是有“两张”网卡,一张对外部网络、一张对内部网络,并且使用的ISP那一端也必须设定routing,允许用户这台路由器才行。
?牐牐營P:multicasting:可以一次就完成传送一个packet到好几台计算机的操作。
?牐牐營P:syn_cookies:一种保护措施,将各种TCP/IP的通信协议加密,防止Attacker攻击用户的计算机,并且可以纪录企图攻击用户的计算机的IP地址。
?牐牐營P:firewalling:该台计算机是否是防火墙服务器。
?牐牐營P:firewall?爌acket?爈ogging:是否由klogd记录防火墙服务器到底接收了哪些Packet。
?牐牐營P:?爉asquerading:可以将内部网络的计算机送出去的封包,通过防火墙服务器直接传递给远端的计算机,而远端的计算机看到的就是接收到的防火墙服务器送过来的封包,而不是从内部的计算机送过来的。这样如果内部只有一台计算机可以上网,其余的机器可以通过这台机子的防火墙服务器向外连线。选择这个选项必需先确定先前的Network?燜irewalls?營P:forwarding/gatewaying?牐營P:firewalling?犝馊?个选项选[Y]。以及下一个选项IP:always?燿eframent?犚惨?选[Y].
?牐牐營P:ICMP?爉asquerading:?犚话鉳asquerading?犞惶峁┐?理TCP,UDP?爌ackets,若要让masqurerading?犚材艽?理ICMP?爌ackets,这个选项要选[Y].
?牐牐營P:always?燿efragment:可将接收到的packet?爁ragments重新组合回原来那个封包。
?牐牐營P:accounting:统计IP?爌acket的流量,也就是网络的流通情况。
?牐牐營P:optimize?燼s?爎outer?爊ot?爃ost:可以关闭copy&checksum技术,防止流量大的服务器的IP?爌ackets丢失。
?牐牐營P:tunneling:可在不同网域中使用linux,且都不用改IP就可以直接上网了。适合于笔记本型计算机用户。
?牐牐營P:Reverse?燗RP??:主要是提供bootp的功能,让计算机从可以从网卡的Boot?燫am启动。
?牐牐營P:Disable?燩ath?燤TU?燚iscovery:是否取消Path?燤TU?燚iscovery.MTU?犛兄?于处理拥挤的网络。
?牐牐燭he?營PX?爌rotocol:IPX为Netware?犕?络使用的通讯协议。
?牐犉溆喔?据需要设置。编译出的内核为800K。