Linux内核编译编译方法.docx

上传人:b****4 文档编号:5917361 上传时间:2023-05-09 格式:DOCX 页数:14 大小:20.82KB
下载 相关 举报
Linux内核编译编译方法.docx_第1页
第1页 / 共14页
Linux内核编译编译方法.docx_第2页
第2页 / 共14页
Linux内核编译编译方法.docx_第3页
第3页 / 共14页
Linux内核编译编译方法.docx_第4页
第4页 / 共14页
Linux内核编译编译方法.docx_第5页
第5页 / 共14页
Linux内核编译编译方法.docx_第6页
第6页 / 共14页
Linux内核编译编译方法.docx_第7页
第7页 / 共14页
Linux内核编译编译方法.docx_第8页
第8页 / 共14页
Linux内核编译编译方法.docx_第9页
第9页 / 共14页
Linux内核编译编译方法.docx_第10页
第10页 / 共14页
Linux内核编译编译方法.docx_第11页
第11页 / 共14页
Linux内核编译编译方法.docx_第12页
第12页 / 共14页
Linux内核编译编译方法.docx_第13页
第13页 / 共14页
Linux内核编译编译方法.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Linux内核编译编译方法.docx

《Linux内核编译编译方法.docx》由会员分享,可在线阅读,更多相关《Linux内核编译编译方法.docx(14页珍藏版)》请在冰点文库上搜索。

Linux内核编译编译方法.docx

Linux内核编译编译方法

 一、为什么要编译内核;

  有时我们为了实现某些功能,比如对iptables的防火墙有些需要内核支持;还有实现一些硬件的支持等,这时我们需要重编内核;

  二、内核源码版本的选择;

  如果发行版本提供内核源码,最好还是用发行版本提供的;比如Fedora4.0提供了很多版本的内核源码;我们安装好后,他自带的配置文件大多能满足我们的需要,对于新手来说,根据自带的内核的配置文件.config,我们也能学到一点如何配置内核。

也没有什么难的,熟能生巧罢了;

  如果从kernel.org下载最新稳定版本的内核也是可以的;

  三、内核源码安装或解压;

  对于FedoraCore4.0来说,内核源码是放在/usr/src/kernels目录中;如果通过在线升级内核,也是放在这个目录中;如果您的系统中的/usr/src/kernels/中没有内容,说明您没有安装内核的源码包kernel-devel软件包;

  您可以通过软件包管理器来补装,请参考《Fedora/Redhat软件包管理指南》

  如果您用FedoraCore4.0,我建议您在保留老内核的基础上,在线下载最新版本的内核kerenl-devel和对应版本的kernel或者从kernel.org下载,有时可能新的kerenl已经解决了您所面对的问题,这时就没有必要编译内核了;

  如果您是通过在线安装的内核源码包,比如通过apt+synaptic或者yum安装的,内核源码会被放到/usr/src/kernel下的目录中,您要进入相对应的目录进行编译;

  在线更新软件包,请参考《Fedora/Redhat软件包管理指南》,推荐apt+synaptic工具;

  如果您是是下载kernel和kernel-devel的rpm包,可以通过来安装;

  代码:

1.[root@localhostbeinan]#rpm-ivhkernel*.rpm

复制代码

  如果您是从kernel.org下载的类似linux-2.6.13.tar.bz2或者linux-2.6.13.tar.gz的,您要把下载下来的文件移到/usr/src目录中解压;然后进入解压的目录中进行配置和编译;

  代码:

1.[root@localhostbeinan]#mvlinux-2.6.13.tar.bz2

2.[root@localhostbeinan]#cd/usr/src/

3.

4.[root@localhostsrc]#tarjxvflinux-2.6.12.3.tar.bz2

复制代码

提示:

本文以linux-2.6.12.3为例,其实通过发行版的升级版的kernel-devel和从kernel.org下载下来的差不多,大同小异;不同的是通过在线升级的rpm格式的内核源码包,有配置文件.config可以参考;安装到的目的地是/usr/src/kernel对FC4.0来说;如果您要高编译和配置内核。

四、内核的配置;

  1、进入目录执行makemrproper,对于从kernel.org下载而来的tar.bz格式的源码包;

  代码:

1.[root@localhostsrc]#cdlinux-2.6.12.3/

2.

3.[root@localhostlinux-2.6.12.3]#

4.

5.[root@localhostsrc]#cdlinux-2.6.12.3/

6.

7.[root@localhostlinux-2.6.12.3]#makemrproper

8.

9.[root@localhostlinux-2.6.12.3]#makemenuconfig

复制代码

  对于FedoraCore4.0,如果您是通过在线安装的kernel和kernel-devel新版本的包,比如是2.6.12-1.1398_FC4-i686,你可以直进入/usr/src/kernel/相应的目录中直接执行makemenuconfig;利用发行版本提供的.config来配置,这样方便点。

不要makemrproper,否则.config就没有了;这也是为什么要用发行版本提供的内核源码升级包的原因;

  其它配置和安装大同小异;模仿总可以吧;

  2.简要的配置内核;

  进入配置内核的配置模式后,我们可能一无所知,看下面;

  内核配置有两种方法,一种是直接置入内核*;另一种是编成模块M;两种方法各有优点;直接编入内核的,比如设备的启动,不再需要加载模块的这一过程了;而编译成模块,则需要加载设备的内核支持的模块;但直接把所有的东西都编入内核也不是可行的,内核体积会变大,系统负载也会过重。

我们编内核时最好把极为重要的编入内核;其它的如果您不明白的,最好用默认。

  1)移动键盘上下左右键,按Enter进入一个目录。

把指针移动到Exit就退出当前目录到上级目录;

  2)针对自己机器存在的问题进行修改,比如大内存的支持;

  选择自己机器的CPU;

  移动键盘到Processortypeandfeatures--->,然后按ENTER进入;

  找到Processorfamily(Pentium-Pro)--->按ENTER进入;

  进入后我们发现有好多CPU的型号可选;一般的情况下要根据

  bash-3.00#cat/proc/cpuinfo输出的信息来选,比如我们的是Celeron(P4)一代的,应该选如下的,当然默认的486也是可以正常运行的,既然我们重编一次内核,就得选中对应型号的,也许性能有所提高呢;

  代码:

1.Processorfamily(Pentium-4/Celeron(P4-based)/Pentium-4M/Xeon)

复制代码

  对大内存支持;如果内存是1G或者1G以上,但小于4G的,就要选4G支持;如果超过4G的,要选64G的支持;

  代码:

1.HighMemorySupport(4GB)--->

2.(X)4GB

3.()64GB

复制代码

  还有比如声卡等硬件,需要我们一步一步的查看;如果有不明之处,就要按[shift]+?

的组合键来查看说明。

一般的情况下,2.6.x的内核会根据机器的情况自动配出一个文件,只需要我们来查看一下,把重要的地方改改就行了;

  再举个例子:

比如我现在所用的声卡是intelac97的,我应该怎么配置呢?

  首先要知道自己的声卡的芯片组,我们要通过lspci-v来查看;

  代码:

1.[root@localhostbeinan]#lspci-v

复制代码

  只查看声卡的,应该用如下的方法:

  代码:

1.[root@localhostbeinan]#lspci-v|grepaudio

2.00:

1f.5Multimediaaudiocontroller:

3.IntelCorp.82801DB(ICH4)AC'97AudioController(rev03)

复制代码

  通过上面的输出,我们知道这台机器用的是intelAC97声卡;所以我们要特别注意AC97的配置;

  代码:

  找到DeviceDrivers--->Sound--->

  Soundcardsupport声卡的支持,这个是一定要选中的吧;

  AdvancedLinuxSoundArchitecture对声卡支持的ALSA驱动的支持;

  下面有OSS驱动,只是一部份。

如果想用OSS的驱动更全的,可以去买;其它的就看如下的选吧;

1.Sequencersupport

2.

3.Sequencerdummyclient

4.

5.OSSMixerAPI

6.

7.OSSPCM(digitalaudio)API[*]OSSSequencerAPI

8.

9.RTCTimersupport[*]Verboseprintk[]Debug

复制代码

  大多是默认的就好,如果您不知道是做什么用的,或者怎么用;

  然后我们再向下看有

  代码:

  Genericdevices--->进入里面

1.Dummy(/dev/null)soundcard

2.

3.VirtualMIDIsoundcard

4.

5.MOTUMidiTimePieceAVmultiportMIDI

6.

7.UART16550serialMIDIdriver

8.

9.GenericMPU-401UARTdriver

10.

11.ISAdevices--->如果您用ISA声卡就在这里面选;

12.

13.PCIdevices--->如果您用PCI声卡,就在这里面选,集成声卡也在这里;

14.

15.USBdevices--->这是USB声卡内核支持选项;我有一个这样的声卡,但没有试过;

16.

17.PCMCIAdevices--->这是PCMCIA声卡的选项,我还没有看过这样的声卡呢;如果您有,就在这里面动动手吧。

复制代码

  因为我用的是Intel集成的声卡,所以要在PCI中选择,我们在中可以看到有两个与INTEL有关的;

  代码:

  Intel/SiS/nVidia/AMD/ALiAC97Controller这个才是IntelAC97声卡的;

  <>Intel/SiS/nVidia/AMDMC97Modem(EXPERIMENTAL)这个是机器集成的INTEL猫的蜂鸣器的;

因为我发现如果把猫的蜂鸣器的驱动也选上,可能造成两个冲突。

所以只能选上面的那个;

  我们再回到OpenSoundSystem--->中看看,与我用的声卡是不是有关的?

  代码:

1.OpenSoundSystem(DEPRECATED)

2.

3.IntelICH(i8xx)audiosupport

4.

5.OSSsoundmodules

6.

7.LoopbackMIDIdevicesupport

8.

9.MicrosoftSoundSystemsupport

复制代码

  我们也可以看到OpenSoundSystem中也有好多的声卡驱动,大家根据前面的lspci-v来选择吧。

  3)对于操作系统所采用的文件系统的支持要编入内核,最好不要编成模块;(重要)

  比如我的Fedoracore4.0所采用的文件系统用的是ext3,所以我要把它直接编入内核;好处是不受模块丢失或者损坏而不能启动系统;而有时您把系统所采用的文件系统编译成模块,出现VFS错误,也有这方面的事,可能是您没有把ext3加入到相应的加载模块的配置文件中,所以我们为了减少麻烦,把风险降到最低,还是要直接置入内模的好;

  代码:

1.Filesystems--->

2.<*>Ext3journallingfilesystemsupport

3.[*]Ext3extendedattributes

4.[*]Ext3POSIXAccessControlLists

5.[*]Ext3SecurityLabels

复制代码

  如果您还有其它的硬盘分区要读取,比如是reiserfs、ext2、fat、fat32、ntfs等,这样的可以编成模块来支持;

  再举一例:

如果您的的操作系统用的是reiserfs的文件系统,当然就要把reiserfs的直接编入内核,其它的可以编成模块来支持了;

  4)对于硬盘及RAID的支持,要直接编入内核;

  比如ATA、SATA、SCSI及RAID的支持直接内核支持;有时编完内核后,启动时不能识别硬盘和RAID,大多事情出在这里;Slackware中在这方面有的是模块支持,我们可以把它由模块M改成内核*来支持;如果您不明白,就按默认进行;SATA的硬盘的支持除了选中SATA的支持、IDE设备的支持以外,还要选中SCSI的支持;

  5)对于咱们所没有的设备,可以在内核中不选,熟能生巧罢了;

  比如我没有ISDN设备,所以就把ISDN去掉;

  代码:

1.ISDNsubsystem--->

2.<>Linuxtelephonysupport

复制代码

  如果您没有1394的设备,当然可以把1394的支持也去掉;等等。

  如果您有USB的设备,要把USB方面好好看看;比如大家常用的移动硬盘;USB猫等,还有扫描仪等;

  内核配置就说这么多吧,太多了,我也说不清楚,水平有限啊;

  配置好后先要保存

1.SaveConfigurationtoanAlternateFile

复制代码

  出来一个

1.Enterafilenametowhichthisconfiguration,shouldbesavedasanalternate.Leaveblanktoabort.

2.

3..config

复制代码

  按回车就行了,这样就保存住了;

  然后退出Exit,这时也会出现保存;

  如果你想把.config保存起来,可以再复制一份到安全一点的目录,以备后用;

 五、编译内核;

  代码:

1.[root@localhostlinux-2.6.12.3]#make

2.

3.[root@localhostlinux-2.6.12.3]#makemodules_install

复制代码

  这样就编译好了,并把模块也安装在了/lib/modules目录中了,请看:

  代码:

1.[root@localhostlinux-2.6.12.3]#ls/lib/modules/

2.

3.2.6.11-1.1369_FC42.6.12.3

复制代码

  六、安装内核及配置grub或lilo;

  1、复制bzImage等相关文件,并创建initrd文件;

  代码:

1.[root@localhostlinux-2.6.12.3]#cparch/i386/boot/bzImage/boot/vmlinuz-2.6.12.3

2.[root@localhostlinux-2.6.12.3]#cpSystem.map/boot/System.map-2.6.12.3

3.[root@localhostlinux-2.6.12.3]#cd/boot

4.[root@localhostlinux-2.6.12.3]#/sbin/mkinitrdinitrd-2.6.12.3.img  2.6.12.3

复制代码

  我们把编译出来的bzImage,拷入到/boot目录,拷贝成vmlinuz-2.6.12.3;

  并且用mkinitrd来创建imitrd-xxx.img文件,其中xxx为内核的版本号,是通过查看/lib/modules来版本来对应的,我们是编译出来的是2.6.12.3,所以就运行上面的命令创建,创建的出来的是initrd-2.6.12.3.img;不创建这个文件,有时是启动不起来的,比如提示VFS错误等;

  2、查看系统引导管理器grub或者lilo的配置文件。

  如果想要让新内核能让系统引导管理器grub和lilo的菜单上能看得到,必须改grub.conf或者lilo.conf,但我们必须保留老内核的在grub和lilo的启动菜单,毕竟我们编内核不能百分百的成功,对不对?

安全第一吧;

  我只说grub的,我没有lilo,也不会用。

所以咱们还是GRUB吧,FC4系统引导管理器是GRUB,所以我们谈谈GRUB的设置;

  查看/etc/grub.conf;

  比如我的grub.conf的内容是这样的;

  代码:

1.#grub.confgeneratedbyanaconda

2.#

3.#Notethatyoudonothavetorerungrubaftermakingchangestothisfile

4.#NOTICE:

  Youdonothavea/bootpartition.  Thismeansthat

5.#      allkernelandinitrdpathsarerelativeto/,eg.

6.#      root(hd0,7)

7.#      kernel/boot/vmlinuz-versionroroot=/dev/hda8

8.#      initrd/boot/initrd-version.img

9.#boot=/dev/hda

10.default=0

11.timeout=5

12.#splashimage=(hd0,7)/boot/grub/splash.xpm.gz

13.#hiddenmenu

14.titleFedoraCore(2.6.11-1.1369_FC4)

15.      root(hd0,7)

16.      kernel/boot/vmlinuz-2.6.11-1.1369_FC4roroot=LABEL=/rhgbquiet

17.      initrd/boot/initrd-2.6.11-1.1369_FC4.img

18.titleWinXP

19.      rootnoverify(hd0,0)

20.      chainloader+1

复制代码

  我们要把老内核的启动保留下来,以防不测,我们只加入新的内核的启动;所以我加上这样一段;

  代码:

1.titleFedoraCore(2.6.12.3)

2.root(hd0,7)

3.kernel/boot/vmlinuz-2.6.12.3roroot=LABEL=/rhgbquiet

4.initrd/boot/initrd-2.6.12.3.img

复制代码

  咱们再来看一下改过后的配置文件;

  代码:

1.#grub.confgeneratedbyanaconda

2.#

3.#Notethatyoudonothavetorerungrubaftermakingchangestothisfile

4.#NOTICE:

  Youdonothavea/bootpartition.  Thismeansthat

5.#      allkernelandinitrdpathsarerelativeto/,eg.

6.#      root(hd0,7)

7.#      kernel/boot/vmlinuz-versionroroot=/dev/hda8

8.#      initrd/boot/initrd-version.img

9.#boot=/dev/hda

10.default=0

11.timeout=5

12.#splashimage=(hd0,7)/boot/grub/splash.xpm.gz

13.#hiddenmenu

14.titleFedoraCore(2.6.12.3)

15.      root(hd0,7)

16.      kernel/boot/vmlinuz-2.6.12.3roroot=LABEL=/rhgbquiet

17.      initrd/boot/initrd-2.6.12.3.img

18.titleFedoraCore(2.6.11-1.1369_FC4)

19.      root(hd0,7)

20.      kernel/boot/vmlinuz-2.6.11-1.1369_FC4roroot=LABEL=/rhgbquiet

21.      initrd/boot/initrd-2.6.11-1.1369_FC4.img

22.titleWinXP

23.      rootnoverify(hd0,0)

24.      chainloader+1

复制代码

  然后重新启动机器,如果出现VFS错误,可能就是我写重要的那个地方出了错误;

  注意:

如果重新启用内核后,原来安装的显示卡驱动,比如NVIDIA和ATI的驱动还要重新安装。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2