linux内核的裁剪步骤.docx
《linux内核的裁剪步骤.docx》由会员分享,可在线阅读,更多相关《linux内核的裁剪步骤.docx(55页珍藏版)》请在冰豆网上搜索。
linux内核的裁剪步骤
linux内核裁剪的具体过程和方法
内核功能:
能够完成系统的基本功能,上网,收发邮件等,支持xwindows图形界面。
在menuconfig中配置:
详细介绍内核配置选项及删改情况
第一部分:
全部删除
Codematurityleveloptions--->代码成熟等级选项
[]Promptfordevelopmentand/orincompletecode/drivers默认情况下是选择的,这将会在设置界面中显示还在开发或者还没有完成的代码与驱动.不选。
第二部分:
除以下选项,其它全部删除
Generalsetup—〉
SystemVIPC(IPC:
InterProcessCommunication)是组系统调用及函数库,它能让程序彼此间同步进行交换信息。
某些程序以及DOS模拟环境都需要它。
为进程提供通信机制,这将使系统中各进程间有交换信息与保持同步的能力。
有些程序只有在选Y的情况下才能运行,所以不用考虑,这里一定要选。
第三部分:
除以下选项,其它全部删除
Loadablemodulesupport--->可引导模块支持建议作为模块加入内核
[]Enableloadablemodulesupport这个选项可以让你的内核支持模块,模块是什么呢?
模块是一小段代码,编译后可在系统内核运行时动态的加入内核,从而为内核增加一些特性或是对某种硬件进行支持。
一般一些不常用到的驱动或特性可以编译为模块以减少内核的体积。
在运行时可以使用modprobe命令来加载它到内核中去(在不需要时还可以移除它)。
一些特性是否编译为模块的原则是,不常使用的,特别是在系统启动时不需要的驱动可以将其编译为模块,如果是一些在系统启动时就要用到的驱动比如说文件系统,系统总线的支持就不要编为模块了,否在无法启动系统。
[]Automatickernelmoduleloading一般情况下,如果我们的内核在某些任务中要使用一些被编译为模块的驱动或特性时,我们要先使用modprobe命令来加载它,内核才能使用。
不过,如果你选择了这个选项,在内核需要一些模块时它可以自动调用modprobe命令来加载需要的模块,这是个很棒的特性,当然要选Y喽。
第四部分:
全部删除
Blocklayer-----〉块设备
第五部分:
除以下选项,其它全部删除
Processortypeandfeatures--->处理器类型
SubarchitectureType(PC-compatible)--->这选项的主要的目的,是使Linux可以支持多种PC标准,一般我们使用的PC机是遵循所谓IBM兼容结构(pc/at)。
这个选项可以让你选择一些其它架构。
我们一般选择PC-compatible就可以了。
Processorfamily(386):
它会对每种CPU做最佳化,让它跑的好又快,一般来说,你是什么型号的就选什么型号的就好。
我选的是386,这样内核会省下不少空间
第六部分:
除以下选项,其它全部删除
Powermanagementoptions(ACPI,APM)--->电源管理选项
[]PowerManagementDebugSupport电源管理的调试信息支持,如果不是要调试内核有关电源管理部份,请不要选择这项。
ACPISupport---〉高级电源接口配置支持,如果BIOS支持,建议选上这项
[]Button这个选项用于注册基于电源按钮的事件,比如power,sleep等,当你按下按钮时事件将发生,一个守护程序将读取/proc/acpi/event,并执行用户在这些事件上定义的动作比如让系统关机。
可以不选择,根据自己的需求。
第七部分:
除以下选项,其它全部删除
Busoptions(PCI,PCMCIA,EISA,MCA,ISA)--->总线选项
[]PCIsupport
PCIaccessmode(Any)--->PCI外围设备配置,强列建议选Any,系统将优先使用MMConfig,然后使用BIOS,最后使用Direct检测PCI设备。
第八部分:
除以下选项,其它全部删除
Executablefileformats--->
KernelsupportforELFbinariesELF是开放平台下最常用的二进制文件,它支持不同的硬件平台。
一定要选。
第九部分:
除以下选项,其它全部删除
Networking
Networkingoptions--->
[]Unixdomainsockets
[]TCP/IPnetworking
第十部分:
除以下选项,其它全部删除
DeviceDrivers--->设备驱动
Blockdevices-------〉
[]CompaqSMART2support
[]CompaqSmartArray5xxxsupport
[]Loopbackdevicesupport大部分的人这一个选项都选N,因为没有必要。
但是如果你要mountiso文件的话,你得选上Y。
这个选项的意思是说,可以将一个文件挂成一个文件系统。
如果要烧光盘片的,那么您很有可能在把一个文件烧进去之前,看看这个文件是否符合IS09660的文件系统的内容,是否符合您的需求。
而且,可以对这个文件系统加以保护。
不过,如果您想做到这点的话,您必须有最新的mount程序,版本是在2.5X版以上的。
而且如果您希望对这个文件系统加上保护,则您必须有des.1.tar.gz这个程序。
注意:
此处与网络无关。
建议编译成模块
[]RAMdisksupport
SCSIdevicesupport--->里面有关于USB支持的,要选择
[]SCSIdevicesupportUSB要用,必须选择
[]legacy/proc/scsi/supportUSB要用,必须选择
[]SCSIdisksupportUSB要用,必须选择
SCSILow-leveldrivers
[]SerialATA(SATA)support
[]IntelPIIX/ICHSATAsupport这个必须选择,否则无法产生引导文件
[]ViaSATAsupport
Networkingdevicesupport--->这个下面是选网卡驱动,一定要选
Ethernet(1000mbit)-à我的电脑是千兆网卡所以就选这个
[]broadcomTigon3support
Inputdevicesupport--->这个里面要设置你的鼠标键盘什么的
[]Providelegacy/dev/psauxdevice
Graphicssupport--->
[]Supportforframebufferdevices支持Framebuffer的,一定要选择
USBsupport--->
[]USBdevicefilesystem这个好象是用U盘必须的
[]EHCIHCD(USB2.0)support有usb2.0就选上把,编译成模块
[]OHCIHCDsupport必须选择,编译成模块
[]UHCIHCD(mostIntelandVIA)support必须选择,编译成模块
[]USBMassStoragesupport用U盘必须选择
USBHumanInterfaceDevice(fullHID)support里面选择usb鼠标和usb键盘,如果你有一定选上这个必需选
HIDinputlayersupport应该选择
/dev/hiddevrawHIDdevicesupport如果这里有USB键盘和鼠标选项,一定要选择
第十一部分:
除以下选项,其它全部删除
filesystems--->文件系统
<*>Secondextendedfssupport
Ext2extendedattributes
Ext2POSIXAccessControlLists
Ext2SecurityLabels
Ext3journallingfilesystemsupport
Ext3extendedattributes
Ext3POSIXAccessControlLists
Ext3SecurityLabels以上这些肯定是要选择的,linux的标准文件系统
Kernelautomountersupport内核自动挂载的,当然要选
Kernelautomounterversion4support(alsosupportsv3)当然要选
DOS/FAT/NTFilesystems--->
DOSFATfssupport
MSDOSfssupport
VFAT(Windows-95)fssupport
NTFSfilesystemsupport
Nativelanguagesupportà语言支持,这里就支持英语和汉语就行了,不多说了
[]NLSISO8859-1必须选择,这个是关于U盘挂载的。
CD-ROM/DVDFilesystems--->这个是关于挂载ISO文件的,用的话就选。
<*>ISO9660CDROMfilesystemsupport
第十二部分:
全部删除
Instrumentationsupport
第十三部分:
全部删除
Kernelhacking--->破解核心?
可不是当骸客啦,不选
第十四部分:
全部删除
Securityoptions--->
第十五部分:
全部删除
Cryptographicoptions--->这是核心支持加密的选项
第十六部分:
全部删除
Libraryroutines--->
==================================
内容目录
1.Codematurityleveloptions2
2.Generalsetup常规安装选项2
3.Loadablemodulesupport引导模块支持5
4.Blocklayer6
5.Processortypeandfeatures处理器类型及特性8
6.Powermanagementoptions(ACPI,APM)17
7.Busoptions(PCI,PCMCIA,EISA,MCA,ISA)总线选项22
8.Executablefileformats24
9.Networkingsupport网络支持。
25
10.DeviceDrivers设备驱动47
11.Filesystems文件系统82
12.InstrumentationSupport测试用的支持项目86
13.Kernelhacking内核调试。
86
14.Securityoptions安全选项。
88
15.Cryptographicoptions密码选项。
88
16.Libraryroutines常规的库。
95
说明1:
文字中的Y表示选择进内核。
M表示编成模块。
N表示不选择。
有的只能选Y,有的只能选M。
在makemenuconfig下,*表示Y,M表示M,空白表示N。
makexconfig下,√表示Y,·表示M,空白表示N。
说明2:
菜单中,有的选项你选了Y才出现,有的选了Y,它反而不会出现。
有的选项根本不会提供选择。
所以我提供的菜单项应该不是最完整的设置选项。
如果你碰到了新的选项,你可以认真看它的英文说明,或者通过上网搜索、在论坛提问等方式来了解它。
1.Codematurityleveloptions
代码完成等级选项
1.1.Promptfordevelopmentand/orincompletecode/drivers
对开发中的或者未完成的代码和驱动进行提示。
LINUX下的很多东西,比如网络设备、文件系统、网络协议等等,它们的功能、稳定性、或者测试等级等等还不能够符合大众化的要求,还处于开发之中。
这就是所谓的阿尔法版本:
最初开发版本;接下来的是BETA版本,公开测试版本。
如果这是阿尔法版本,那么开发者为了避免收到诸如“为何这东西不工作”的信件的麻烦,常常不会让它发布出去。
但是,积极的测试和使用阿尔法版本对软件的开发是非常好的。
你只需要明白它未必工作得很好,在某些情况有可能会出问题。
汇报详细的出错情况对开发者很有帮助。
这个选项同样会让一些老的驱动的可用。
很多老驱动在将来的内核中已经被代替或者被移除。
除非你想要帮助软件的测试,或者开发软件,或者你的机器需要这些特性,否则你可以选N,那样你会在配置菜单中得到较少的选项。
如果你选了Y,你将会得到更多的阿尔法版本的驱动和代码的配置菜单。
2.Generalsetup常规安装选项
2.1.Localversion-appendtokernelrelease
在你的内核后面加上一串字符来表示版本。
这些字符在你使用uname-a命令时会显示出来。
你的字符最多不能超过64位。
2.2.Automaticallyappendversioninformationtotheversionstring(LOCALVERSION_AUTO)
自动生成版本信息。
这个选项会自动探测你的内核并且生成相应的版本,使之不会和原先的重复。
这需要Perl的支持。
由于在编译的命令make-kpkg中我们会加入--append-to-version选项来生成自定义版本,所以这里选N。
2.3.Supportforpagingofanonymousmemory(swap)
这个选项将使你的内核支持虚拟内存,也就是让你的计算机好象拥有比实际内存更多的内存空间用来执行很大的程序。
这个虚拟内存在LINUX中就是SWAP分区。
除非你不想要SWAP分区,否则这里必选Y。
2.4.SystemVIPC(IPC:
InterProcessCommunication)
中间过程连接是一组功能和系统调用,使得进程能够同步和交换信息。
这通常来说是好事,有一些程序只有你选择了Y才能运行。
特别地,你想在LINUX下运行DOS仿真程序,你必须要选Y。
你可以用infoipc命令来了解IPC。
一定要选Y。
2.4.1.IPCNamespaces(IPC_NS)
IPC命名空间,命名空间的作用是区别同名的东西,就比如李宁和张宁,都叫“宁”,加个姓才能区分。
这个选项也是为不同的服务器提供IPC的多命名,达到一个IPC提供多对象支持的目的。
不清楚的话选N。
2.5.POSIXMessageQueues可移植操作系统接口信息队列
可移植操作系统接口信息队列是IPC的一部分,在通信队列中有较高的优先权来保持通信畅通。
如果你想要编译和运行在Solaris操作系统上写的POSIX信息队列程序,选Y,同时你还需要mqueue库来支持这些特性。
它是作为一个文件系统存在(mqueue),你可以mount它。
为保证以后的不同程序的协同稳定,如果不清楚,选Y。
2.6.BSDProcessAccountingBSD进程统计
如果你选Y,用户级别的程序就可以通过特殊的系统调用方式来通知内核把进程统计信息记录到一个文件,当这个进程存在的时候,信息就会被内核记录进文件。
信息通常包括建立时间、所有者、命令名称、内存使用、控制终端等。
这对用户级程序非常有用。
所以通常选Y是一个好主意。
2.6.1.BSDProcessAccountingversion3fileformat
选Y,统计信息将会以新的格式(V3)写入,这格式包含进程ID和父进程。
注意这个格式和以前的v0/v1/v2格式不兼容,所以你需要升级相关工具来使用它。
2.7.Exporttask/processstatisticsthroughnetlink(EXPERIMENTAL)
处于实验阶段的功能。
通过通用的网络输出工作/进程的相应数据,和BSD不同的是,这些数据在进程运行的时候就可以通过相关命令访问。
和BSD类似,数据将在进程结束时送入用户空间。
如果不清楚,选N。
2.8.UTSNamespaces
通用终端系统的命名空间。
它允许容器,比如Vservers利用UTS命名空间来为不同的服务器提供不同的UTS。
如果不清楚,选N。
2.9.Auditingsupport审计支持(AUDIT)
允许审计的下层能够被其他内核子系统使用,比如SE-Linux,它需要这个来进行登录时的声音和视频输出。
没有CONFIG_AUDITSYSCALL时(即下一个选项)无法进行系统调用。
2.9.1.Enablesystem-callauditingsupport(AUDITSYSCALL)
允许系统独立地或者通过其他内核的子系统,调用审计支持,比如SE-Linux。
要使用这种审计的文件系统来查看特性,请确保INOTIFY已经被设置。
上一项的子选项,两项要选就都选。
我并不清楚审计的意义,可能是为了调用其他内核的东西吧。
所以就都选了,因为我机器上还有个官方2.6.15-27内核。
2.10.Kernel.configsupport
这个选项允许.config文件(即编译LINUX时的配置文件)保存在内核当中。
它提供正在运行中的或者还在硬盘中的内核的相关配置选项。
可以通过内核镜像文件kernelimagefile用命令scriptscripts/extract-ikconfig来提取出来,作为当前内核重编译或者另一个内核编译的参考。
如果你的内核在运行中,可以通过/proc/config.gz文件来读取。
下一个选项提供这项支持。
看起来好像是一个不错的功能,可以把编译时的.config文件保存在内核中,以供今后参考调用。
用来重编译和编译其他的内核的时候可以用上。
你是一个编译内核的狂人的话,这项要选上(比如我,不过我总是会备份所有的.config文件)。
2.10.1.Enableaccessto.configthrough/proc/config.gz
上一项的子项,可以通过/proc/config.gz访问当前内核的.config。
新功能,上一项选的话这个就选上吧。
2.11.Cpusetsupport
多CPU支持。
这个选项可以让你建立和管理CPU集群,它可以动态地将系统分割在各个CPU和内存节点中,在各个节点是独立运行的。
这对大型的系统尤其有效。
如果不清楚,选N。
2.12.Kernel->userspacerelaysupport(formerlyrelayfs)
内核系统区和用户区进行传递通讯的支持。
这个选项在特定的文件系统中提供数据传递接口支持,它可以提供从内核空间到用户空间的大批量的数据传递工具和设施。
如果不清楚,选N。
2.13.Initramfssourcefile(s)
没有可选项。
2.14.Optimizeforsize(Lookoutforbrokencompilers!
)
这个选项将在GCC命令后用"-Os"代替"-O2"参数,这样可以得到更小的内核。
警告:
某些GCC版本会导致错误。
如果有错,请升级你的GCC。
如果不清楚,选N。
这是优化内核大小的功能,没必要选。
一个编译好的内核才7-10多M,大家不会少这么点空间吧。
选上了可能会出一些问题。
最好不选。
2.15.Configurestandardkernelfeatures(forsmallsystems)
这个选项可以让内核的基本选项和设置无效或者扭曲。
这是用于特定环境中的,它允许“非标准”内核。
你要是选它,你一定要明白自己在干什么。
这是为了编译某些特殊用途的内核使用的,例如引导盘系统。
通常你可以不选择这一选项,你也不用关心他的子选项。
3.Loadablemodulesupport引导模块支持
3.1.Enableloadablemodulesupport
这个选项可以让你的内核支持模块,模块是什么呢?
模块是一小段代码,编译后可在系统内核运行时动态的加入内核,从而为内核增加一些特性或是对某种硬件进行支持。
一般一些不常用到的驱动或特性可以编译为模块以减少内核的体积。
在运行时可以使用modprobe命令来加载它到内核中去(在不需要时还可以移除它)。
一些特性是否编译为模块的原则是,不常使用的,特别是在系统启动时不需要的驱动可以将其编译为模块,如果是一些在系统启动时就要用到的驱动比如说文件系统,系统总线的支持就不要编为模块,否则无法启动系统。
在启动时不用到的功能,编成模块是最有效的方式。
你可以查看MAN手册来了解:
modprobe,lsmod,modinfo,insmod和rmmod.
如果你选了这项,你可能需要运行"makemodules_install"命令来把模块添加到/lib/modules/目录下,以便modprobe可以找到它们。
如果不清楚,选Y。
3.2.Moduleunloading
这个选项可以让你卸载不再使用的模块,如果不选的话你将不能卸载任何模块(有些模块一旦加载就不能卸载,不管是否选择了这个选项)。
如果不清楚,选Y。
3.2.1.Forcedmoduleunloading
这个选项允许你强行卸除模块,即使内核认为这不安全。
内核将会立即移除模块,而不管是否有人在使用它(用rmmod-f命令)。
这主要是针对开发者和冲动的用户提供的功能。
如果不清楚,选N。
3.3.Moduleversioningsupport(MODVERSIONS)
有时候,你需要编译模块。
有时候,你需要编译模块。
选这项会添加一些版本信息,来给编译的模块提供独立的特性,以使不同的内核在使用同一模块时区别于它原有的模块。
这有时可能会有点用。
如果不清楚,选N。
3.4.Sourcechecksumforallmodules
这个功能是为了防止你在编译模块时不小心更改了内核模块的源代码但忘记更改版本号而造成版本冲突。
如果不清楚,选N。