核心编译(kernel)
发表于:2007-07-04来源:作者:点击数:
标签:
前言 其实应该在安装完 Linux 之后便开始编译核心,因为每个人所需要的核心都并不相同!举个例子来说,你安装了一个很新的网路卡,但是你的核心并不支援这一种网路卡,那你只好下载比较新的核心来编译,才能支援你的网路卡!另外,由于太大的核心对于整体的
前言
其实应该在安装完 Linux 之后便开始编译核心,因为每个人所需要的核心都并不相同!举个例子来说,你安装了一个很新的网路卡,但是你的核心并不支援这一种网路卡,那你只好下载比较新的核心来编译,才能支援你的网路卡!另外,由于太大的核心对于整体的执行效能会比较慢,所以适当的核心对于你的 Linux 系统之执行效率也是有帮助的!因此,一般的玩家通常在安装完了 Linux 之后,便开始进行核心的重新编译工作!
在 study-area 也曾提到:Linux的灵魂所在﹐其实就是其稳定的核心设计。我们可以将之看成是一个架于程式和硬体之间的界面操作系统﹐离开来核心﹐什么东西都用不了。而核心的编译好坏﹐也会影响到系统的效能﹐甚至﹐一些系统功能(如 ip
.networking)﹐就必须要编进核心才行。
不过,由于核心的更新速度太快了,如果你一直执着于最新的核心编译,那肯定会吃不消,所以通常我们的建议就是,除非你有新的
需求,否则可以不用常常去更新核心的!
下载新核心
·核心的版本:
要如何知道你的核心版本呢?基本上,你在开机进入 Linux 的 login 画面时, Redhat 应该就已经告诉你这个主机的核心版本了,不过,如果你要知道你的核心版本的话,可以输入:
[root@tsai /root]# uname -r 2.2.12-20
上面显示我们这个 Linux 核心是 2.2.12-20 这个版本。
好啦,那要选择哪一个核心版本呢?目前你可以看到的核心版本主要有 2.2.X, 2.3.X 及 2.4.X,哪一个才适合你呢?我想,既然我们需要的是稳定版的 Linux ,那自然选择越稳定的越好啰,那基本上,所有 2.2.X 及 2.4.X 的都是属于稳定型的核心版本,至于 2.3.X 则是适合开发 Linux 软体的核心!另外,2.4.X并不是比2.2.X还新的意思,基本上,所有 2.2.X 及 2.3.X 与 2.4.X 都是同时开发的核心,只是因为其支援的程度或者是一些功能方面不完全相同,所以才会分成这些版本!而目前我们所想要使用的应该是 2.2.X 这个版本的系列核心,截至目前为止,这一版的最新核心应该是 2.2.19 这一个,当然,你也可以下载其他的核心!
·核心下载地点:
Linux 核心的下载地点可以在底下的地点找到最新的,当然也可以在台湾相关的 FTP 站找到你要的核心。
o
http://www.kernel.org/
o
交大资科
o
教育部
另外,你也可以在我这里下载 linux-2.2.19.tar.gz 这个核心版本。基本上,最好是在系统安装完毕之后马上就进行核心编译工作,免得以后每次装一些特定功能的时候又要花一大轮时间编译。另外要说明的,由于小弟是以 2.2.18 这一版的核心来做升级的动作,所以以下是以 2.2.18 来做示范!
·核心解压缩:
下载下来的核心大致上都是 *.tar.gz 这种压缩档,所以需要先解压缩,另外,由于 redhat 预设的编译核心的目录是 /usr/src/linux ,所以你要将这个压缩档解至这个目录。不过由于系统原本就有一个 linux 的连结档在这里,所以你要先取消连结档。现在假设你的 linux-2.2.18.tar.gz 放在 /root/ 底下,则你可以这样做:
[root@tsai /root]# cd /usr/src/ [root@tsai src]# rm linux [root@tsai src]# tar -zxvf /root/linux-2.2.18.tar.gz [root@tsai src]# mv linux linux-2.2.18 [root@tsai src]# ln -s linux-2.2.18 linux
·则你的新核心资料放在 linux-2.2.18 这个目录中,而 linux 则是连结至这个目录的连结目录!
开始设定核心的内容
编译核心有许多方法,这里以视窗介面的方法来说明:
1.进入核心目录: cd /usr/src/linux
2.开始设定画面: make menuconfig
3.进入选择项目:
进入选择项目之后,你将会在视窗介面中看到很多的选项,请使用方向键、空白键与 enter 来进行选择。以下开始你要慢慢的详细挑选,如果有任何问题的话,请详细的看一下每一个选项中的 Help 。另外,如果没有需要的话,请尽量不要把核心边的太大!否则效能是会降低的喔!此外,由于很多时候你不晓得需不需要选择这个项目,那你可以将之编成模组(
的项目),模组是在开机载入时有被载入才可以执行的咚咚!所以并不会使效能方面有太大的问题!
oCode maturity level options:请选择。这个项目主要在让你可以接受一些测试的版本的套件。
oProcessor type and features:请选择进入,选你的 CPU 形式。
§Processor family:例如鸟哥的 CPU 为 P-166 则我可以选择 Pentium/K6/TSC/CyrixIII 这一项!
§Math emulation:这一项请不要选择,因为这是用软体来模拟硬体的计算核心,因为我们的 CPU 都是 P-100 以后的,所以不用选这项!
§Symmetric multi-processing support:这是是否支援双CPU 的主机板的选项,你可以选择也可以不选择,但如果你使用双CPU主机板,这个就一定要选择。
§其他保持预设值即可。
oLoadable module support:请选择,这是用来是否支援模组载入的。
§Enable loadable module support:请选择。
§Set version information on all symbols for modules:不要选,因为我们可能会具有两种以上的版本的核心,所以这一项不可选择。
§Kernel module loader:请选择。
oGeneral setup:
§Networkking support:一定要选择。
§PCI support:请选择。
§Advanced Power management BIOS support:如果您的BIOS支持APM的话﹐请选择。
§Power off on shutdown:如果您选择了上一个﹐也请选择。
§其他,保留预设,或视实际情况设定。 例如我们实验室的机器需要与 SGI 的机器联系,所以就多选择了 SGI Visual Workstation support 这一项。
oPlug and Play support:将之全部选择。
oBlock devices:里面放置了一些晶片组的选项,通常以预设值就可以了,不过,如果你的主机板是最近的版子,例如 VIA 的 82C586 晶片组,哪就必须进来选择你的晶片组啦!
oNetworking options:这是所有项目里面最重要的了,底下的选择
§Network firewalls﹐请选择。
§Socket Filtering﹐请选择。
§TCP/IP networking﹐请选择。
§IP: multicasting﹐请选择。
§IP: advanced router﹐请选择。
§IP: police routing﹐请选择。
§IP: verbose route monitoring﹐请选择。
§IP: firewalling﹐请选择。
§IP: use FWMARK value as routing key﹐请选择。
§IP: transparent proxy support﹐请选择。
§IP: masquerading﹐请选择。
§IP: ICMP masquerading﹐请选择。
§IP: masquerading special modules support﹐请选择。
§IP: ipautofw masq support﹐请选择为 Module。
§IP: ipportfw masq support﹐请选择为 Module。
§IP: ip fwmark masq-forwarding support﹐请选择为 Module。
§IP: optimize as router not host﹐请选择。
§IP: multicast routing﹐请选择。
§IP: aliasing support﹐请选择。
§IPX: Full internal IPX network﹐如果您的网路有Novell伺服器﹐请选择。
§IPX: SPX networking﹐如果您的网路有Novell伺服器﹐请选择。
§其他﹐保留预设﹐或视实际情况设定。
oTelephony Support:保留预设值。
oSCSI support:除非你有 SCSI 的设备,否则可以选择成为 M 的模组型态。
oNetwork device support:这个也是很重要的选项,与你的网路卡有关!
§Dummy net driver support:非常建议选择。
§Ethernet (10 or 100Mbit):除非您使用其他的网路形态﹐否则这个一定要选择。
§3 COM cards:除非您的网路卡是这个牌子的﹐否则不选择。
§Western Digital/SMC cards:除非您的网路卡是这个牌子的(或兼容)﹐否则不选择。
§RealTek 8912/8139 (not 8019/9029!) support:除非您的网路卡是这 8912或8139这两个确切型号﹐否则不选择﹐不过﹐也可以选“M”。
§Other ISA cards:如果您有ISA网卡的话﹐可以选择。
§NE2000/NE1000 support:如果您不知道您的网路卡型号﹐这个可以试试选择。
§EISA, VLB, PCI and on board controllers:请选择。
§PCI NE2000 support:如果您用的是PCI网路卡﹐又不知道型号﹐这个可以试试选择。
§EtherExpressPro/100 support:如果您有此类网卡﹐请选择。
§Pocket and protable adaptors:如果您使用PCMCIA网卡﹐可以试试选择。
§基本上在这个选项当中,就是选你有的网路卡的形式就对了!
§FDDI driver support:如果您没用使用FDDI﹐请不要选择。
§Frame relay DLCI support:如果您没用使用Frame relay﹐请不要选择。
§PPP (point-to-point) support:这个一定要选择。
§SLIP (serial line) support:如果您知道您ISP使用SLIP﹐可以选择。
§Token Ring driver support:如果您的网路不是这个形态﹐请不要选择。
§至于其他﹐如果确定不使用的﹐就不要选择﹐如果不确定﹐可以保留预设﹐或将之设成“M”。
oAmateur Radio support :有才选择,通常不选。
oIrDA (infrared) support:有才选择,通常不选。
oISDN subsystem:有才选择,通常不选。
oOld CD-ROM drivers (not SCSI, not IDE):有才选择,通常不选。
oCharacter devices:有才选择,通常不选。
oUSB support:有才选择,通常不选。
oFilesystems:这个与你的 Linux 系统可支援的档案型态有关,一定要进来选择。
§Quota support:请选择。
§DOS FAT fs support:请选择。
§MSDOS fs support:请选择。
§VFAT (Windows-95) fs support:请选择。
§ISO 9660 CDROM filesystem support:请选择。
§Microsoft Joliet CDROM extensions:请选择。
§NTFS filesystem support (read only):请选择。
§OS2/HPFS filessystem support (read only):如果您的机器还有OS/2系统﹐请选择。
§Network File Systems:请展开﹐喜欢的话﹐可以全部选择﹐但我们只关心‘NFS’和‘SMB’的部分。
§Partition Types:除非您找到相关项目﹐否则可以不理会。
§Native Language Support:请展开﹐然后选择﹕
§Codepage 850
§Codepage 950
§NLS ISO 8859-1
oConsole drivers:除非您确定﹐否则保留预设。
oSound:如果您用的是Creative的SB16﹐或兼容声卡﹐可以不理会。
oKernel hacking:保留预设则可。
这样就编完了,请按下『exit』然后选择 save 后,即可离开视窗画面。
4.更改前一版的模组目录:
再来则是要开始让系统编译你刚刚设定的核心了,此时请注意,如果你使用的核心版本之前你已经有编过一次了,那样的话,在 /lib/modules 这个目录中应该会有前一版的模组,这时请到这个目录下将该核心目录更改名称。不过我们这里由于是第一次编译核心,所以在 /ib/modules 里面应该只有 2.2.12-20 这个目录,因此这一步就不用作了。
开始编译
这个时候要开始编译我们的核心了,其实也是很简单,直接执行以下几个步骤即可:
[root@tsai linux]# make dep [root@tsai linux]# make clean [root@tsai linux]# make modules 这个步骤要花点时间的,所以按下 enter 后就可以去看电视了! [root@tsai linux]# make modules_install [root@tsai linux]# make bzImage 这个步骤是最久的一步,也请你去喝个茶吧! 这时才开始编译核心。其实有两种编译核心的方法, 分别是 make bzImage 及 make zImage,有何不同? 在 bzImage 编译的核心是经过压缩的,由于我们目前编的核心 都蛮大的,所以需要 bzImage 这个指令,如果你选择的核心很小, 就可以使用 make zImage 了(据说比较快一点)。 [root@tsai linux]# make bzlilo 最后一动啦,将核心安装在硬碟之上。
在执行 make modules_install 后,会在你的 /lib/modules 形成一个专属于这个核心的模组目录,而在执行 make bzImage 成功之后,会在你的根目录造成两个重要的档案,就是我们最重要的核心开机程式了,分别是:vmlinuz 及 System.map 这两个档案。
安装编译完成的核心及设定多重开机选项 lilo
好了,编译完就是要安装啦!由于害怕刚刚编译完的核心不能正常的开机,所以通常鸟哥都是手动来设定成多重开机的选单,好让我们如果发生错误的设定,可以直接再次开机来进入 Linux 系统。
1.移动两个主要的开机档到 /boot 中:并加以更改名称
[root@tsai linux]# cd / [root@tsai /]# mv System.map /boot/System.map-2.2.18 [root@tsai /]# mv vmlinuz /boot/vmlinux-2.2.18 [root@tsai /]# cd /boot [root@tsai /boot]# rm System.map [root@tsai /boot]# ln -s System.map-2.2.18 System.map
2.如此一来,则你的开机执行的 System.map 会找寻 2.2.18 这一版的资讯!
3.编辑你的 /etc/lilo.conf 多重开机设定档:
这里就必须比较小心了,因为设定错误会让你开不了机的!只要设定一个档案就好了,那就是 /etc/lilo.conf 这个档案。
[root@tsai /boot]# vi /etc/lilo.conf 进入 vi 的编辑画面,原始的 lilo.conf 有点像这样: ---- boot=/dev/hda map=/boot/map install=/boot/boot.b prompt timeout=50 default=linux image=/boot/vmlinuz-2.2.12-20 label=linux initrd=/boot/initrd-2.2.12-20.img read-only root=/dev/hda5 other=/dev/hda1 label=windows ---- 关于上述个相关的咚咚你可以到 设定lilo 去看, 而经过修改之后可以变成像是这样: ---- boot=/dev/hda map=/boot/map install=/boot/boot.b prompt timeout=50 default=linux-2.2.18 <==预设以 2.2.18 开机 image=/boot/vmlinuz-2.2.12-20 label=linux-2.2.12-20 initrd=/boot/initrd-2.2.12-20.img read-only root=/dev/hda5 image=/boot/vmlinuz-2.2.18 <==这是新的核心喔! label=linux-2.2.18 read-only root=/dev/hda5 other=/dev/hda1 label=windows
4.重要的地方在于 default=linux-2.2.18 这一行,以及 image=/boot/vmlinuz-2.2.18 两行,需要指定正确才行!基本上这样就设定成功了!
5.启动 lilo :
这个时候请打入:
[root@tsai /boot]# lilo Added linux-2.2.12-20 Added linux-2.2.18 * Added windows
6.你会看到如上的说明,可以看到 linux-2.2.18 有打星号,这表示预设的开机档是以 linux-2.2.18 的核心来开机的!
7.重新开机:
现在你可以重新开机来测试一下你的核心了!当然,你也可以在开机过程中,出现 boot 时按下 tab 键,让你选择你要的开机档!
8.换回旧核心:
如果核心使用的不满意怎幺办?你可以如此的换回来原先的核心:
o进入 /boot 中,将 System.map 的连结档换成 System.map-2.2.12-20 这一个,
o编辑 /etc/lilo.conf 档案,将预设的开机档改成 linux-2.2.12-20 ,
o最后再执行 lilo 即可!
编译核心有时候会遇到许多麻烦﹐尤其是当您从一个旧的版本升级上来。建议您看看 kernel-HOWTO 和 modules mini-howto 之外﹐还应该看看 /usr/src/linux/Documentation 里面的文章﹐尤其是 Changes?modules.txt?kmod.txt 等。而且﹐在编译(make menuconfig)的过程中﹐对任何不明白的选项﹐应该看看 Help 是怎幺说的﹐这非常重要。
另外,由于编译核心并以新的核心开机之后,所有的模组都会到新的目录去,如以上面的例子来看,以新的核心开机时,模组的载入会跑到 /lib/modules/2.2.18 中,所以如果你的网路卡不是模组中有的,而是自己安装的,那你得在重新安装一次到新的目录中,否则你的网路将无法连接喔!
原文转自:http://www.ltesting.net