Linux内核编译过程的优化

原始内核编译

安装内核模块的编译环境

一、下载新内核的源代码

目前,在Internet上提供Linux源代码的站点有很多,读者可以选择一个速度较快的站点下载。本人是从站点www.kernel.org上下载了Linux的开发版内核3.14.17的源代码,全部代码被压缩到一个名叫Linux-3.14.17.tar.gz的文件中。

二、释放内核源代码

由于源代码放在一个压缩文件中,因此在配置内核之前,要先将源代码释放到指定的目录下。  

用tar命令释放内核源代码

$tarzxvfLinux-3.14.17.tar.gz

文件释放成功后,通过终端进入Linux-3.14.17文件夹。

三、删除源代码目录中残留的.o文件和其它从属文件(负责人:袁舒扬)

$sudomakemrproper

四、在home下建立临时文件夹存放内核编译产生的临时文件(负责人:袁舒扬)

$sudomkdir-p/home/linshi/kernel/kernelbuild

五、进入内核编译配置设置

$sudomakeO=/home/linshi/kernel/kernelbuildmenuconfig

配置内核可以根据需要与爱好使用下面命令中的一个:#makeconfig(基于文本的最为传统的配置界面)#makemenuconfig(基于文本选单的配置界面)#makexconfig(基于图形窗口模式的配置界面)#makeoldconfig(如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦)

进入配置界面后可选择性进行编译,如果默认配置的话,编译内容就会很多,编译时间就会很长,多达3小时

如果出现没有ncurses-level库那么

$sudoapt-getinstalllibncurses5-dev

装完库后就可以进入配置界面了

进行配置时,大部分选项可以使用其缺省值,只有小部分需要根据用户不同的需要选择。例如,如果需要内核支持DOS分区的文件系统,则要在文件系统部分选择FAT或DOS系统支持;系统如果配有网卡、PCMCIA卡等,需要在网络配置中选择相应卡的类型。选择相应的配置时,有三种选择,它们分别代表的含义如下:“Y”-将该功能编译进内核“N”-不将该功能编译进内核  

“M”-将该功能编译成可以在需要时动态插入到内核中的模块。

将与核心其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块,有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响。许多功能都可以这样处理,例如像上面提到的网卡的支持、对FAT等文件系统的支持。  其实现在编译内核最关键的地方就是配置内核。我一般用makemenuconfig配置内核。配置2.6.0内核时如果你的主板是Intel芯片的话,你用默认配制也许就可以得到一个满意的内核哦。做法是makemenuconfig后离开时选择保存。这里的难点是pci,如果你硬盘是IDE的那一定要选择好你主板上南桥芯片。SCSI的话就是要选择上你的SCSI卡型号。还有就是网卡,声卡芯片的型号了,他们的型号你都可以用lspci查找到比如我的是。

[root@leoboot]#lspci00:00.0Hostbridge:IntelCorp.440BX/ZX/DX-82443BX/ZX/DXHostbridge(rev01)00:01.0PCIbridge:IntelCorp.440BX/ZX/DX-82443BX/ZX/DXAGPbridge(rev01)00:07.0ISAbridge:IntelCorp.82371AB/EB/MBPIIX4ISA(rev08)00:07.1IDEinterface:IntelCorp.82371AB/EB/MBPIIX4IDE(rev01)00:07.2USBController:IntelCorp.82371AB/EB/MBPIIX4USB00:07.3Bridge:IntelCorp.82371AB/EB/MBPIIX4ACPI(rev08)00:0f.0VGAcompatiblecontroller:VMwareInc[VMwareSVGAII]PCIDisplayAdapter00:10.0SCSIstoragecontroller:LSILogic/SymbiosLogic53c1030PCI-XFusion-MPTDualUltra320SCSI(rev01)00:11.0Ethernetcontroller:AdvancedMicroDevices[AMD]79c970[PCnet32LANCE](rev10)00:12.0Multimediaaudiocontroller:EnsoniqES1371[AudioPCI-97](rev02)编译配置在这一部分涉及几个重要模块的配置请,特别注意.一般用"makemenuconfig"命令来配置内核.输入以上命令后出现一个菜单界面,用户可以对需要的模块.下面着重讲几个重要的配置1)文件系统请务必要选中ext3文件系统,Filesystems—>[*]Ext3journallingfilesystemsupport[*]Ext3SecurityLabels[*]JBD(ext3)debuggingsupport以上三项一定要选上,而且要内建(即标*).这个非常重要,在配置完后一定要检查一下.config文件有没有"CONFIG_EXT3_FS=y"这一项.如果不是"CONFIG_EXT3_FS=y"而是"CONFIG_EXT3_FS=m",你在运行内核时就会遇上以下错误:pivotroot:pivot_root(/sysroot,/sysroot/initrd)failed2)网卡驱动请务必把自己网卡对应的驱动编译进内核,比较普遍的网卡是realtek8139,以下就是这种网卡的配置,以供参考DeviceDrivers—>Networkingsupport—>Ethernet(10or100Mbit)—><*>RealTekRTL-8139C+PCIFastEthernetAdaptersupport(EXPERIMENTAL)<*>RealTekRTL-8139PCIFastEthernetAdaptersupport3)声卡驱动也要选择自己声卡对应的驱动编译进内核,比较普遍的声卡是i810_audio,以下就是这种声卡的配置,以供参考

DeviceDrivers—>Sound—><*>SoundcardsupportAdvancedLinuxSoundArchitecture—>

<*>AdvancedLinuxSoundArchitecture

<*>Sequencersupport<>Sequencerdummyclient<*>OSSMixerAPI<*>OSSPCM(digitalaudio)API[*]OSSSequencerAPI<*>RTCTimersupportPCIdevices—><*>Inteli8x0/MX440,SiS7012;Ali5455;NForceAudio;AMD768/8111OpenSoundSystem—><>OpenSoundSystem(DEPRECATED)

以上三项配置关系到新内核能否正常运行,请备加注意.其他的配置如果不是很了解,大可以按默认的选择.

六、开始进行内核编译(耗时>=3小时)

$sudomakeO=/home/linshi/kernel/kernelbuild

七、开始安装新内核

#sudomakeO=/home/linshi/kernel/kernelbuildmodules_installinstall

八、安装完毕后,重启计算机,然后进入高级配置,选择新安装的内核linux-3.14.17,就可登陆新内核系统,内核模块的编译环境配置就基本完成了。

精简内核编译

xconfig图形界面自定义内核

编译步骤

步骤一

$cd~/桌面/linux-3.14.17

步骤二

清空编译文件夹

$makemrproper

步骤三

进入配置菜单

$makeO=~/桌面/kernelplace/build/kernelxconfig

勾选配置保存

步骤四

$makeO=/home/name/build/kernel

步骤五

安装模块

$sudomakeO=/home/name/build/kernelmodules_installinstall

优化

(1)xconfig的配置内核安装选项与其它的配置方式相比,xconfig有着windows下友好的界面

(2)可以通过鼠标的勾选来选择相应的配置选项

(3)配置保存后可以根据自己的需要读相关的帮助文档来定制自己的内核模块从而更快的编译精简内核

选项说明

为了一次成功,请大家遵循一个原则,如果你自己使用的内核已经选用了某个选项,如果你没用充分的理由,不要随便改动。这样虽然内核不那么精简,但是不容易出现问题。按照金步国先生的资料描述去选择基本上没有问题。但是有几个问题要强调:1、在“Generalsetup”里面,有几项普通用户可以放心的去掉,分别是:POSIXMessageQueues、CpusetSupport、Createdeprecatedsysfsfiles、Kernel->userspacerelaysupport(formerlyrelayfs)2、在“Blocklayer”里,假如没有2TB的硬盘,就去掉:SupportforLargeBlockDevices。

3、在“Timerfrequency”里,默认是250Hz,最好选择1000Hz以提高gui响应4、下列选项请慎重选择:Busoptions(PCI,PCMCIA,EISA,MCA,ISA)PCIsupportPCIExpresssupport老式机器没有PCI-E设备的可以选NISAsupport较新的新机器没有ISA设备,可以选NMCAsupport一般选NNatSemiSCx200support一般选NPCIHotplugSupportSupportforPCIHotplug(EXPERIMENTAL)如果没有PCI热插拔设备,选NATA/ATAPI/MFM/RLLsupportIncludeIDE/ATA-2DISKsupport如果你的/boot是放在IDE硬盘上,那么这里一定要选Y,选M都不行。否则启动时会出现“waitingforrootfilesystem”的提示而停滞不前。SCSIdevicesupport如果有SATA硬盘,就选YSCSIdisksupport如果你的/boot放在SATA硬盘上,一定要选Y。CharacterdevicesI2Csupport一般可以选Y或者MGraphicssupport不建议把显卡驱动编译进内核。,选M,编译成模块方便日后升级驱动。VESAVGAgraphicssupport我的机器显卡是ati3dlt,linux里面的型号定为mach64,我发现除了自己的显卡选项,一定要选择这项,编译进内核,如果不选,显示出现问题。如果你不确定的话,选上吧。FilesystemsCD-ROM/DVDFilesystemsISO9660CDROMfilesystemsupport一般选YDOS/FAT/NTFilesystemsVFAT(Windows-95)fssupport有FAT32分区就选Y吧NTFSfilesystemsupport有NTFS分区就选Y吧NTFSwritesupport如果想对NTFS分区进行写操作,选Y

必须要遵循一个原则

如果你没用充分的理由,不要随便改动。

选项说明

1.在“Generalsetup”里面的“Promptfordevelopmentand/orincompletecode/drivers”是不需要。

2.去掉:SupportforLargeBlockDevices。

3.Powermanagementoptions中把APM(AdvancedPowerManagement)BIOSsupport关闭。

4.Busoptions的选择:

原始内核编译

ISAsupport较新的新机器没有ISA设备,可以去掉

MCAsupport去掉

NatSemiSCx200support去掉

DeviceDrivers是重点把自己机器上没有的硬件全部去掉

FilesysteminUserspacesupport是必选的,如果你要用windows分区

Virtualization这个选项全部不勾选

自己测试

最后编译时长约为一个半小时

也就越容易失败,还不如怀揣一颗平常心,“但行好事,莫问前程”,往往成功的几率反而更大些

Linux内核编译过程的优化

相关文章:

你感兴趣的文章:

标签云: