运作的更顺畅!
然而由于『核心的主要工作是在控制硬体!』所以编译核心之前,请先了解一下您的硬体配备,与您这部主机的未来功能!由于核心是『越简单越好!』所以只要将这部主机的未来功能给他编进去就好了!其他的就不用去理他啦!
核心的版本与何处下载最新核心
请特别留意!不同版本的核心之间,最好不要互相升级!否则及容易发生问题!例如: Red Hat 6.x 使用的是 2.2.xx 版本的核心,那么就不要使用 2.4.xx 的核心来编译他!如果误用的话,很有可能造成您系统上面的服务无法正常的工作!还请特别留意呢!
?核心的版本:
要更新核心自然就得知道目前我的核心是哪一个?!然后才能拿更新的核心来更新呀!您说是吧!那么在哪里找到这个核心的资讯呢?如果对于 系统指令 那一篇还有印象的话(忘记了就回去读一读吧!),应该还记得那个 uname 查看的资讯吧!没错!就是他了,可以使用其功能来查询目前在工作的核心版本:
?看到了吧!那个东西就是核心版本的资讯啦!好了!我们依照 RPM 版本的先例,也来谈一谈 kernel 的版本吧!基本上, kernel 的版本可以分为:
[主版本].[次版本].[修订版本]-[附版本]
在这当中,需要特别留意的属于第二个那个[次版本]?!
o如果次版本是奇数的话,例如 2.3, 2.5 等等,那表示他是一个『测试性质功能的核心版本』,这种核心通常是在推出稳定版本的核心之前,用来给 developer (核心维护更新测试者!)测试用的!虽然功能较为强大,但是由于是属于测试性质,所以可能会有些许的 bug 也说不定;
o如果次版本是偶数的话,例如 2.2, 2.4 等等,那表示他是一个经过测试之后才释出的稳定核心版本,这种核心较为稳定不容易出错,比较适合一般个人或者是商业使用!
所以啦!我们要升级的时候,大多就是使用那种偶数的核心版本啦!不过这里还是要再提一遍!就是『2.2 与 2.4 是两个具有相当大差异的核心版本,两者之间使用到的函式库基本上已经不相同了,所以在升级之前,如果您的核心原本是 2.2.xx 版(Red Hat 6.x 系列),那么就升级到 2.2.xx 版本的最新版,不要由 2.2.xx 直接升级到 2.4.xx 版,否则到时可能会欲哭无泪~~』,这个问题在讨论区一再地被提起!这里再次说明!
此外, 2.2.xx 与 2.4.xx 的比较中,并不是 2.4.xx 就一定比 2.2.xx 还要新,因为这两种版本同时在进行维护与升级的工作!如果有兴趣的话,可以前往 Linux 核心网站 http://www.kernel.org 一看究竟,您就可以了解目前的核心变动情况了!另外,再提到额外的一点,就是 2.2 可以升级到 2.3 版本,这是因为这两个是互相援用的,在 2.3 测试成功之后,就将他转成 2.2 的版本,所以两者的函式库使用的情况是约略相同的,这个情况也可以使用在 2.4.xx 与 2.5.xx 版本之中!也就是说,您的 Red Hat 7.x 的 2.4.xx 版本可以升级到 2.5.xx 版本去呦!但是您的 Red Hat 6.x 的 kernel 2.2.xx 则仅能更新到最新的 2.2.xx 或者是 2.3.xx ,强烈的建议不需要更新到 2.4.xx ~~再次不厌其烦的提醒大家~
好了!既然 Red Hat 7.1 ~ 7.3 使用的是 kernel 2.4.xx 版本,我们又需要的是稳定型态的 2.4.xx 版本,再由 http://www.kernel.org 网站资料上发现,截至目前为止( 2002/05/23 ),最新的核心是 2.4.18 这一个,所以,您可以前往下载这一个版本的核心,当然也可以由本站下载呢!嗯!底下的各个选项的择定,我们都是以这一个版本为例呦!需要特别的注意!由于较新的核心版本可能会多出一些选项,因此若有不同的项目也没有关系!稍微查看一下说明内容就可以了解啦!
?核心下载地点:
Linux 的核心目前是由其发明者 Linus 所属团队在负责维护的,而其网站在底下的站址上,在该网站上可以找到最新的 kernel 资讯!不过,美中不足的是目前的核心越来越大了( linux-2.4.18.tar.gz 这一版,这一个档案大约 30MB 了!),所以如果你的 ISP 连外很慢的话,那么使用台湾的映射站台来下载不失为一个好方法:
ohttp://www.kernel.org/
ohttp://ftp.nsysu.edu.tw/Linux/Kernel/linux/kernel/
o交大资科
o教育部
基本上,就如同前面所说的,最好是在系统安装完毕之后马上就进行核心编译工作,免得以后每次装一些特定功能的时候又要花一大轮时间编译。另外要说明的,由于小弟是以 2.4.18 这一版的核心来做升级的动作,所以以下是以 2.4.18 来做示范!
开始设定核心的内容
由于 VBird 都是在安装完 Linux 之后立刻就给他编译核心的,所以通常我都是直接将该核心档案烧录起来,或者是先捉到自己的电脑中,再以 ftp 等等的动作将该档案传输到 Linux 系统下!好了!目前我就假设您已经可以上网了,所以您可以使用底下的方式来下载核心,并将之解开在 /usr/src 当中!此外,由于编译核心的行为必须要是 root 才可以进行,所以底下的动作使用者身份为 root 呦!
需要比较留意的是,核心所放置的地点『一定是 /usr/src/linux 』这一个目录,然而由于不论哪一版核心编译都是这一个目录底下编译的,所以我个人相当的建议将每一版的核心都使用不同的目录来指定,然后以 link 的方式将该目录 link 到 linux 就可以啦!较为简单而且明了!底下的动作请都在 /usr/src/linux 底下进行呦!
另外,在开始设定核心内容之前,先来说明一下什么是『模组』?以方便大家了解核心编译的选择!由于核心的更新速度虽然很快,然而有些硬体的出版却是不定时的,另外,有些软体需要的载入程式可能也需要核心的支援才有办法提供!然而如果每次一有新的硬体或者软体推出,则需要编译一次核心,那不是挺麻烦的吗?要晓得的是,编译一次核心小一点的也要 30 分钟左右(这与你的机器速度有关!),每次这么编译不是挺麻烦的吗?所以?,就有所谓的『模组』出现了!由于目前的核心已经都具有『外挂模组』的功能(这个等一下我们在实际编译的时候会提到!),所以,只要将您『可能会用到』的功能的选项,将他编译成模组!那么往后真的需要该功能的时候,再将他载入到核心就可以啦!这么做最大的优点就是,当没有使用到该功能的时候,核心并不会主动的载入,所以真正在核心内工作的程序就不会太多而耗掉系统资源!另外,当您目前不需要的功能可以先编译成模组,未来真的有需要的时候,就可以将他直接载入!嘿嘿!可以免除再一次编译的繁复手续呢!!很棒吧!所以?!如果可以编译成为模组的,那么就直接先编成模组也是可以的哩!但是,如果是『肯定不会』使用到的功能,那么就不需要编译进来了!例如我的旧电脑当中根本就没有 AGP 插槽,那么我自然就不需要在我的核心里面编译上 AGP 的支援?!
?编译之前:
在 Linux 当中安装任何软体的铁则:『注意看套件解压缩之后的 INSTALL 或 README 档案!』,好了,那么请进入 /usr/src/linux 当中去瞧一瞧 README 先!再来,由于害怕不小心前面有人已经先编译过了核心,则由于编译过程当中会产生目的档案(档名为 .o ),为了避免此一问题,请先执行 make mrproper 这个指令:
? 好了!现在您就已经具有相当完整的 Kernel source code ?!接着下来则是选择编译模式咯!
?设定编译模式:
目前的 Kernel 可以允许多种编译的模式,包括了:
o make config :这种模式需要逐行输入所需要设定的项目,无法往前修改设定,所以目前很少使用这种方式来设定 Kernel 的项目了;
o make xconfig :这种模式则是使用 X-Window 为主要环境的设定模式!除非你有 X-Window 在执行,否则没有办法使用这种模式;
o make menuconfig :这种模式有点像是文字界面的选单模式,较为简便,而且可以在纯文字界面下面执行编辑动作!是目前最常使用的模式。
我们就使用 make menuconfig 来进行核心的编译设定内容吧!这个选单模式较为简单的啦!
出现如下图示:
因为我是以 putty 捉的图,所以有点丑丑的!别见怪呦!好了!看到上面的图示之后,可以看到几个元件:
o最底下的 :可以使用『左右键』来移动蓝色部分的游标;
o上下键可以移动上面蓝色部分的 Code maturity level options 那一行!,有箭头『 --- 』则表示该行内部还有其他细项需要来设定的意思。
o当以『上下键』选择好想要设定的项目之后,并以『左右键』选择 之后,按下『 Enter 』就可以进入该项目去作更进一步的细部设定?!
o在细部项目的设定当中,如果前面有 [ ] 或 符号时,该项目才可以选择,而选择可以使用『空白键』来选择;
o若为 [*] 则表示编译进核心;若为 则表示编译成模组!尽量在不知道该项目为何时,且有模组可以选,那么就可以直接选择为模组?!
o当在细项目选择 后,并按下 Enter ,那么就可以离开该细部项目?!
基本上建议只要『上下左右 空白 及 Enter 』这六个按键就好了!不要使用 Esc ,否则一不小心就有可能按错的!
?开始设定:
[root @test linux]# make mrproper
[root @test linux]# make menuconfig
底下开始编译!
Code maturity level options
---
[ ] Prompt fo