linux 内核编译祥解

新内核可以在http://www.kernel.org下载。

先把linux-2.6.18.2.tar.bz2复制到/usr/src/的下面

tar–jxvflinux-2.6.18.2.tar.bz2

cdlinux-2.6.18.2

makemrproper把原来编译产生的垃圾删除

配置内核可以根据需要与爱好使用下面命令中的一个:

#makeconfig(基于文本的最为传统的配置界面)

#makemenuconfig(基于文本选单的配置界面)

#makexconfig(基于图形窗口模式的配置界面)

#makeoldconfig(如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦)

进行配置时,大部分选项可以使用其缺省值,只有小部分需要根据用户不同的需要选择。例如,如果需要内核支持DOS分区的文件系统,则要在文件系统部分选择FAT或DOS系统支持;系统如果配有网卡、PCMCIA卡等,需要在网络配置中选择相应卡的类型。

  

选择相应的配置时,有三种选择,它们分别代表的含义如下:

  

“Y”-将该功能编译进内核

  

“N”-不将该功能编译进内核

  

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

  

将与核心其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块,有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响。许多功能都可以这样处理,例如像上面提到的网卡的支持、对FAT等文件系统的支持。

  

其实现在编译内核最关键的地方就是配置内核。我一般用makemenuconfig配置内核。

配置2.6.0内核时如果你的主板是Intel芯片的话,你用默认配制也许就可以得到一个满意的内核哦。做法是makemenuconfig后离开时选择保存。

这里的难点是pci,如果你硬盘是IDE的那一定要选择好你主板上南桥芯片。SCSI的话就是要选择上你的SCSI卡型号。

还有就是网卡,声卡芯片的型号了,他们的型号你都可以用lspci查找到比如我的是。

[root@leoboot]#lspci

00: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/MBPIIX4USB

00:07.3Bridge:IntelCorp.82371AB/EB/MBPIIX4ACPI(rev08)

00:0f.0VGAcompatiblecontroller:VMwareInc[VMwareSVGAII]PCIDisplayAdapter

00: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)failed

  

2)网卡驱动

  请务必把自己网卡对应的驱动编译进内核,比较普遍的网卡是realtek8139,以下就是这种网卡的配置,以供参考

  DeviceDrivers—>

  Networkingsupport—>

  Ethernet(10or100Mbit)—>

  <*>RealTekRTL-8139C+PCIFastEthernetAdaptersupport(EXPERIMENTAL)

  <*>RealTekRTL-8139PCIFastEthernetAdaptersupport

3)声卡驱动

  也要选择自己声卡对应的驱动编译进内核,比较普遍的声卡是i810_audio,以下就是这种声卡的配置,以供参考

  DeviceDrivers—>

  Sound—>

  <*>Soundcardsupport

  AdvancedLinuxSoundArchitecture—>

  <*>AdvancedLinuxSoundArchitecture

  <*>Sequencersupport

  <>Sequencerdummyclient

  <*>OSSMixerAPI

  <*>OSSPCM(digitalaudio)API[*]OSSSequencerAPI

  <*>RTCTimersupport

  PCIdevices—>

  <*>Inteli8x0/MX440,SiS7012;Ali5455;NForceAudio;AMD768/8111

  OpenSoundSystem—>

  <>OpenSoundSystem(DEPRECATED)

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

#makedep(确保关键文件在正确的位置)2.5.*-2.6.0都不需要了。其实2.4.*某些内核也不需要了。

  

#makeclean(确保所有有关文件都处于最新版本状态)

  

#makezImage(编译压缩形式的内核)

  

在需要内核支持较多的外设和功能时,内核可能变得很大,此时可以编译大内核:

  

#makebzImage

  

编译的时间与机器的硬件条件及内核的配置等因素有关,所获得的内核的位置在/usr/src/linux/arch/i386/boot目录下,当然这里假设用户的CPU是x86型的。

  

如果选择了可加载模块,编译完内核后,要对选择的模块进行编译:

  

#makemodules(编译选择的模块)

  

#makemodule_install(将编译后的模块转移到系统标准位置)

#makeinstall

上面的命令"makeinstall"将:

(1)把压缩内核映象拷贝到/boot目录下,并创建相应的System.map符号链接;

(2)修改bootloader的配置文件;

(3)调用mkinitrd程序创建内核的initrd映象.对于GRUB而言,将在/boot/grub/grub.conf配置文件增加如下类似的配置行:

titleRedHatLinux(2.***)

root(hd0,1)

kernel/boot/vmlinuz-2.***roroot=LABEL=/

initrd/boot/initrd-2.***.img

  

模块在系统中的标准目录位于/lib/modules/x.y.z,后面的x.y.z是版本号,为安全起见,在运行#makemodules_install之前最好对/lib/modules进行备份。模块通常是带有扩展名.o的文件,使用命令#lsmod可以对当前内核的模块进行列表。

  

我一般是makebzImage;makemodules;makemodule_install;makeinstall

  

运行新内核之前,请检查一下/boot/grub/grub.conf的内容,下面的配置可作参考

#grub.confgeneratedbyanaconda

#

#Notethatyoudonothavetorerungrubaftermakingchangestothisfile

#NOTICE:Youhavea/bootpartition.Thismeansthat

#allkernelandinitrdpathsarerelativeto/boot/,eg.

#root(hd0,0)

#kernel/vmlinuz-versionroroot=/dev/VolGroup00/LogVol00

#initrd/initrd-version.img

#boot=/dev/hda

default=0

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

titleFedoraCore(2.6.18.2)

root(hd0,0)

kernel/vmlinuz-2.6.18.2roroot=/dev/VolGroup00/LogVol00rhgbquiet

initrd/initrd-2.6.18.2.img

titleFedoraCore(2.6.18-1.2798.fc6)

root(hd0,0)

kernel/vmlinuz-2.6.18-1.2798.fc6roroot=/dev/VolGroup00/LogVol00rhgbquiet

initrd/initrd-2.6.18-1.2798.fc6.img

现在重启机器,即可测试最新的内核。

有本钱耍个性,离开睁眼闭眼看见的城市,逃离身边的纷纷扰扰,

linux 内核编译祥解

相关文章:

你感兴趣的文章:

标签云: