摘要
本文主要介绍了几种减裁Linux核心的方法,可以用于嵌入式系统、嵌入式服务器的核心配置。
By iamafan
1.对于一般PC的普通内核配置
对于一般的用户而言,对于Linux内核的效率和大小的要求都不高。因此一般不对内核重新配置,因为Linux安装程序会在安装时对大部分设置按照安装的需求和实际的硬件做缺省设置。这样的内核会比实际需要的繁冗,有很多模块加载后根本就没有用到,但是因为现在的PC的内存一般都是上百MB,而一个Linux内核再大也就是几百K,因此对于一般用户而言,无需再重新编译内核了。
在一台P3-566的Dell机器安装Red-Hat7.2,内核版本为2.4.6
以下是一些该机的配置:
Loadablemodulesupport:Y
Networkingsupport:Y
PCIsupport:Y
SystemVIPC:Y因为可以做一些基于SystemV的程序
Kernelsupportfora.outbinaries:Y
KernelsupportforELFbinaries:Y
Blockdevices:对此根据该机的硬件做了相应的配置,去除一些本机没有的硬件设备的支持模块。如:Loopbackdevicesupport
Networkingoptions:
Packetsocket:Y
TCP/IPnetworking:Y
Networkfirewalls:Y
TheIPXprotocol:Y
Networkdevicesupport:
Networkdevicesupport:Y
Ethernet(10or100Mb/s):Y
Characterdevice
Virtualterminal:Y
Supportforconsoleonvirtualterminal:Y
Filesystems
Secondextendedfssupport:Y
VFATfssupport:m笔者有时会用到该机上的VFAT分区
/procfilesystemsupportY
ISO9660cdromfilesystemsupport:m
NetworkFileSystems
NFSfilesystemsupport:Y
SMBfilesystemsupport:m
Consoledrivers
VGAtextconsole:Y
Videomodeselectionsupport:Y
VESAVGAgraphicsconsole:Y
Kernelhacking
MagicSysRqkey:Y
还有一些缺省的设置笔者没有改。这样编译出来的版本有700K.经过笔者调试过没有出现什么问题。
2.PDA的内核设置
PDA(PersonalDigitalAssist)如:手机,快译通,文曲星等等。这类系统要求系统稳定,内核小而且效率高,常常需要一些特殊的硬件支持。对进程调度、文件系统要求单一,有些就是单进程系统。对网络的支持由根据需要确定。RedHat的内核无法直接用来设计一些特殊要求的PDA,一般还要加入对硬件的特定模块。
可作如下设置:
Networkingsupport:Y:一般PDA都支持上网更新功能
KernelsupportforELFbinaries:Y
CompileasELF–ifyourGCCisELF-GCC:Y这两个设置使系统的执行文件都为ELF
AdvancedPowerManagerBiossupport:Y
Blockdevices:应该加入对硬件特殊的支持模块
Networkingoptions
Packetsocket
FileSystem
Secondextendedfssupport:Y
另外的一些功能为N,当然一些功能必须选择用来支持上述的模块。编译后为100KB---400KB
3.小型嵌入式系统的内核配置
一个小型的嵌入式Linux系统只需要下面三个基本元素:
引导工具
Linux微内核,由内存管理、进程管理和事务处理构成
初始化进程
如果要让它能干点什么且继续保持小型化,还得加上:
硬件驱动程序
提供所需功能的一个或更多应用程序。
再增加功能,或许需要这些:一个文件系统(也许在ROM或RAM)中TCP/IP网络堆栈对该种系统,做了不同的设置:
不要floppy;不要SMP、MTRR;不要Networking、SCSI;把所有的blockdevice移除,只留下IDEdevice;把所有的characterdevice移除;把所有的filesystem移除,只留下minix;不要sound支援。这样己经把所有的选项都移除了。这样做之后,得到了一个188K的核心.
把下列两个档案中的-O3,-O2用-Os取代。
./Makefile
./arch/i386/kernel/
Makefile
这样一来,整个核心变小了9K,成为179K。
不过这个核心恐怕很难发挥Linux的功能,因此把网络加回去。把Generalsetup中的networksupport加回去,重新编译,核心变成189K。10K就加上个TCP/IPstack。有stack没有driver也是枉然,把embeddedboard常用的RTL8139的driver加回去,195K.
如果你需要DOS档案系统,那大小成为213K。如果minix用ext2换代,则大小成长至222K。
Linux所需的内存大约在600K~800K之间。1MB内存就可能可以开机了,但不太有用,因为连载入C程序库都有困难。2MB内存应该就可以做点事了,但要到4MB以上才可以执行一个比较完整的系统。
因为Linux的filesystem相当大,大约在230K左右,占了1/3的体积。内存管理占了80K,和核心其它部分的总和差不多。TCP/IPstack占了65K,驱动程序占了120K。SysVIPC占了21K,必要的话可以拿掉,核心档应该可以再小个10K左右。
如果要裁剪核心大小,应该动那里呢?答案很明显,当然是文件系统。Linux的VFS简化了档案系统的设计,buffercache,directorycache增加了系统的效率。但这些embedded系统根本就用处不大。如果可以把它们拿掉,核心可以马上缩小20K左右。如果跳过整个VFS,直接将文件系统写成一个driver的型式,应该可以将230K缩减至50K左右。整个核心缩到100K左右。
4.工控机的内核配置
对于工控机内核,对于内核的大小要求并不严格,关键的是正确性,健壮性和实时性(某些机子要求实时性较高).对文件系统要求单一,但保证正确性.网络按需设置。
可作如下配置:
Symmetricmulti-processingsupport:Y
Loadablemodulesupport:N工控机一般将可能用到的模块都全部装入内存.
Networkingsupport:Y
SystemVIPC:Y
KernelsupplyforELFbinaries:Y
Blockdevices:根据具体硬件配置
Networkingoptions
packetsocket:Y
根据具体需要,一般工控机是通过LAN连接,与外界隔离故要IPX协议,另外Tcp/ip一般也需要.
QoSand/orfairqueueing:Y
QoS(QualityOfService)andfairqueueling是一种排定某种封包先送的网络线程表,可同时针对多个网络封包处理并依优先处理顺序来排序,称之为packetschedulers.此功能特别是针对实时系统时格外重要,当多个封包同时送到网络设备时,Kernel可以适当的决定出哪一个封包必须优先处理.因此Kernel提供数种packetschedulingalgorithm.
Filesystems
SecondExtendedfssupport:Y
其余配置和小型嵌入式系统差别不大.同一台机器上编译出来的内核大小为800多KB。
5.服务器的内核配置:
服务器的内核对网络设置和进程调度都非常关键.做如下配置:
Symmetricmulti-processingsupport:Y
Loadablemodulesupport:Y
Networkingsupport:Y
Networkingoption
Packetsocket:Y。
TCP/IPnetworkeing:Y
Networkfirewalls:是否采用网络防火墙。如果计算机想当firewallsserver或者是处于TCP/IP通信协议的网络的网路结构下,这一项要选[Y]
Networkaliasing[Y/m/n/?]:一台网络上的计算机可以拥有多组IP地址。如果计算机想拥有多个IP地址,就选择[Y].
IP:forwarding/gatewaying[Y/m/n/?]:假如用户想当路由器的话,选择[Y],但先决条件是有“两张”网卡,一张对外部网络、一张对内部网络,并且使用的ISP那一端也必须设定routing,允许用户这台路由器才行。
IP:multicasting:可以一次就完成传送一个packet到好几台计算机的操作。
IP:syn_cookies:一种保护措施,将各种TCP/IP的通信协议加密,防止Attacker攻击用户的计算机,并且可以纪录企图攻击用户的计算机的IP地址。
IP:firewalling:该台计算机是否是防火墙服务器。
IP:firewallpacketlogging:是否由klogd记录防火墙服务器到底接收了哪些Packet。
IP:masquerading:可以将内部网络的计算机送出去的封包,通过防火墙服务器直接传递给远端的计算机,而远端的计算机看到的就是接收到的防火墙服务器送过来的封包,而不是从内部的计算机送过来的。这样如果内部只有一台计算机可以上网,其余的机器可以通过这台机子的防火墙服务器向外连线。选择这个选项必需先确定先前的NetworkFirewallsIP:forwarding/gatewayingIP:firewalling这三个选项选[Y]。以及下一个选项IP:alwaysdeframent也要选[Y].
IP:ICMPmasquerading:一般masquerading只提供处理TCP,UDPpackets,若要让masqurerading也能处理ICMPpackets,这个选项要选[Y].
IP:alwaysdefragment:可将接收到的packetfragments重新组合回原来那个封包。
IP:accounting:统计IPpacket的流量,也就是网络的流通情况。
IP:optimizeasrouternothost:可以关闭copy&checksum技术,防止流量大的服务器的IPpackets丢失。
IP:tunneling:可在不同网域中使用linux,且都不用改IP就可以直接上网了。适合于笔记本型计算机用户。
IP:ReverseARP:主要是提供bootp的功能,让计算机从可以从网卡的BootRam启动。
IP:DisablePathMTUDiscovery:是否取消PathMTUDiscovery.MTU有助于处理拥挤的网络。
TheIPXprotocol:IPX为Netware网络使用的通讯协议。
其余根据需要设置。编译出的内核为800K。
引用地址:嵌入式Linux研究-对几种典型的系统的内核配置方案
本文主要介绍了几种减裁Linux核心的方法,可以用于嵌入式系统、嵌入式服务器的核心配置。
By iamafan
1.对于一般PC的普通内核配置
对于一般的用户而言,对于Linux内核的效率和大小的要求都不高。因此一般不对内核重新配置,因为Linux安装程序会在安装时对大部分设置按照安装的需求和实际的硬件做缺省设置。这样的内核会比实际需要的繁冗,有很多模块加载后根本就没有用到,但是因为现在的PC的内存一般都是上百MB,而一个Linux内核再大也就是几百K,因此对于一般用户而言,无需再重新编译内核了。
在一台P3-566的Dell机器安装Red-Hat7.2,内核版本为2.4.6
以下是一些该机的配置:
Loadablemodulesupport:Y
Networkingsupport:Y
PCIsupport:Y
SystemVIPC:Y因为可以做一些基于SystemV的程序
Kernelsupportfora.outbinaries:Y
KernelsupportforELFbinaries:Y
Blockdevices:对此根据该机的硬件做了相应的配置,去除一些本机没有的硬件设备的支持模块。如:Loopbackdevicesupport
Networkingoptions:
Packetsocket:Y
TCP/IPnetworking:Y
Networkfirewalls:Y
TheIPXprotocol:Y
Networkdevicesupport:
Networkdevicesupport:Y
Ethernet(10or100Mb/s):Y
Characterdevice
Virtualterminal:Y
Supportforconsoleonvirtualterminal:Y
Filesystems
Secondextendedfssupport:Y
VFATfssupport:m笔者有时会用到该机上的VFAT分区
/procfilesystemsupportY
ISO9660cdromfilesystemsupport:m
NetworkFileSystems
NFSfilesystemsupport:Y
SMBfilesystemsupport:m
Consoledrivers
VGAtextconsole:Y
Videomodeselectionsupport:Y
VESAVGAgraphicsconsole:Y
Kernelhacking
MagicSysRqkey:Y
还有一些缺省的设置笔者没有改。这样编译出来的版本有700K.经过笔者调试过没有出现什么问题。
2.PDA的内核设置
PDA(PersonalDigitalAssist)如:手机,快译通,文曲星等等。这类系统要求系统稳定,内核小而且效率高,常常需要一些特殊的硬件支持。对进程调度、文件系统要求单一,有些就是单进程系统。对网络的支持由根据需要确定。RedHat的内核无法直接用来设计一些特殊要求的PDA,一般还要加入对硬件的特定模块。
可作如下设置:
Networkingsupport:Y:一般PDA都支持上网更新功能
KernelsupportforELFbinaries:Y
CompileasELF–ifyourGCCisELF-GCC:Y这两个设置使系统的执行文件都为ELF
AdvancedPowerManagerBiossupport:Y
Blockdevices:应该加入对硬件特殊的支持模块
Networkingoptions
Packetsocket
FileSystem
Secondextendedfssupport:Y
另外的一些功能为N,当然一些功能必须选择用来支持上述的模块。编译后为100KB---400KB
3.小型嵌入式系统的内核配置
一个小型的嵌入式Linux系统只需要下面三个基本元素:
引导工具
Linux微内核,由内存管理、进程管理和事务处理构成
初始化进程
如果要让它能干点什么且继续保持小型化,还得加上:
硬件驱动程序
提供所需功能的一个或更多应用程序。
再增加功能,或许需要这些:一个文件系统(也许在ROM或RAM)中TCP/IP网络堆栈对该种系统,做了不同的设置:
不要floppy;不要SMP、MTRR;不要Networking、SCSI;把所有的blockdevice移除,只留下IDEdevice;把所有的characterdevice移除;把所有的filesystem移除,只留下minix;不要sound支援。这样己经把所有的选项都移除了。这样做之后,得到了一个188K的核心.
把下列两个档案中的-O3,-O2用-Os取代。
./Makefile
./arch/i386/kernel/
Makefile
这样一来,整个核心变小了9K,成为179K。
不过这个核心恐怕很难发挥Linux的功能,因此把网络加回去。把Generalsetup中的networksupport加回去,重新编译,核心变成189K。10K就加上个TCP/IPstack。有stack没有driver也是枉然,把embeddedboard常用的RTL8139的driver加回去,195K.
如果你需要DOS档案系统,那大小成为213K。如果minix用ext2换代,则大小成长至222K。
Linux所需的内存大约在600K~800K之间。1MB内存就可能可以开机了,但不太有用,因为连载入C程序库都有困难。2MB内存应该就可以做点事了,但要到4MB以上才可以执行一个比较完整的系统。
因为Linux的filesystem相当大,大约在230K左右,占了1/3的体积。内存管理占了80K,和核心其它部分的总和差不多。TCP/IPstack占了65K,驱动程序占了120K。SysVIPC占了21K,必要的话可以拿掉,核心档应该可以再小个10K左右。
如果要裁剪核心大小,应该动那里呢?答案很明显,当然是文件系统。Linux的VFS简化了档案系统的设计,buffercache,directorycache增加了系统的效率。但这些embedded系统根本就用处不大。如果可以把它们拿掉,核心可以马上缩小20K左右。如果跳过整个VFS,直接将文件系统写成一个driver的型式,应该可以将230K缩减至50K左右。整个核心缩到100K左右。
4.工控机的内核配置
对于工控机内核,对于内核的大小要求并不严格,关键的是正确性,健壮性和实时性(某些机子要求实时性较高).对文件系统要求单一,但保证正确性.网络按需设置。
可作如下配置:
Symmetricmulti-processingsupport:Y
Loadablemodulesupport:N工控机一般将可能用到的模块都全部装入内存.
Networkingsupport:Y
SystemVIPC:Y
KernelsupplyforELFbinaries:Y
Blockdevices:根据具体硬件配置
Networkingoptions
packetsocket:Y
根据具体需要,一般工控机是通过LAN连接,与外界隔离故要IPX协议,另外Tcp/ip一般也需要.
QoSand/orfairqueueing:Y
QoS(QualityOfService)andfairqueueling是一种排定某种封包先送的网络线程表,可同时针对多个网络封包处理并依优先处理顺序来排序,称之为packetschedulers.此功能特别是针对实时系统时格外重要,当多个封包同时送到网络设备时,Kernel可以适当的决定出哪一个封包必须优先处理.因此Kernel提供数种packetschedulingalgorithm.
Filesystems
SecondExtendedfssupport:Y
其余配置和小型嵌入式系统差别不大.同一台机器上编译出来的内核大小为800多KB。
5.服务器的内核配置:
服务器的内核对网络设置和进程调度都非常关键.做如下配置:
Symmetricmulti-processingsupport:Y
Loadablemodulesupport:Y
Networkingsupport:Y
Networkingoption
Packetsocket:Y。
TCP/IPnetworkeing:Y
Networkfirewalls:是否采用网络防火墙。如果计算机想当firewallsserver或者是处于TCP/IP通信协议的网络的网路结构下,这一项要选[Y]
Networkaliasing[Y/m/n/?]:一台网络上的计算机可以拥有多组IP地址。如果计算机想拥有多个IP地址,就选择[Y].
IP:forwarding/gatewaying[Y/m/n/?]:假如用户想当路由器的话,选择[Y],但先决条件是有“两张”网卡,一张对外部网络、一张对内部网络,并且使用的ISP那一端也必须设定routing,允许用户这台路由器才行。
IP:multicasting:可以一次就完成传送一个packet到好几台计算机的操作。
IP:syn_cookies:一种保护措施,将各种TCP/IP的通信协议加密,防止Attacker攻击用户的计算机,并且可以纪录企图攻击用户的计算机的IP地址。
IP:firewalling:该台计算机是否是防火墙服务器。
IP:firewallpacketlogging:是否由klogd记录防火墙服务器到底接收了哪些Packet。
IP:masquerading:可以将内部网络的计算机送出去的封包,通过防火墙服务器直接传递给远端的计算机,而远端的计算机看到的就是接收到的防火墙服务器送过来的封包,而不是从内部的计算机送过来的。这样如果内部只有一台计算机可以上网,其余的机器可以通过这台机子的防火墙服务器向外连线。选择这个选项必需先确定先前的NetworkFirewallsIP:forwarding/gatewayingIP:firewalling这三个选项选[Y]。以及下一个选项IP:alwaysdeframent也要选[Y].
IP:ICMPmasquerading:一般masquerading只提供处理TCP,UDPpackets,若要让masqurerading也能处理ICMPpackets,这个选项要选[Y].
IP:alwaysdefragment:可将接收到的packetfragments重新组合回原来那个封包。
IP:accounting:统计IPpacket的流量,也就是网络的流通情况。
IP:optimizeasrouternothost:可以关闭copy&checksum技术,防止流量大的服务器的IPpackets丢失。
IP:tunneling:可在不同网域中使用linux,且都不用改IP就可以直接上网了。适合于笔记本型计算机用户。
IP:ReverseARP:主要是提供bootp的功能,让计算机从可以从网卡的BootRam启动。
IP:DisablePathMTUDiscovery:是否取消PathMTUDiscovery.MTU有助于处理拥挤的网络。
TheIPXprotocol:IPX为Netware网络使用的通讯协议。
其余根据需要设置。编译出的内核为800K。
上一篇:实时Linux与其它RTOS的比较
下一篇:Linux操作系统发展简史
小广播
热门活动
换一批
更多
最新嵌入式文章
更多精选电路图
更多热门文章
更多每日新闻
- CGD和Qorvo将共同革新电机控制解决方案
- 是德科技 FieldFox 手持式分析仪配合 VDI 扩频模块,实现毫米波分析功能
- 贸泽开售可精确测量CO2水平的 英飞凌PASCO2V15 XENSIV PAS CO2 5V传感器
- 玩法进阶,浩亭让您的PCB板端连接达到新高度!
- 长城汽车研发新篇章:固态电池技术引领未来
- 纳芯微提供全场景GaN驱动IC解决方案
- 解读华为固态电池新专利,2030 叫板宁德时代?
- 让纯电/插混车抓狂?中企推全球首款-40℃可放电增混电池,不怕冷
- 智驾域控知多少:中低端车型加速上车,行泊一体方案占主体
- Foresight推出六款先进立体传感器套件 彻底改变工业和汽车3D感知
更多往期活动
11月15日历史上的今天
厂商技术中心