文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Linux 核心编译与管理<2>

Linux 核心编译与管理<2>

时间:2007-06-17  来源:wolfman55

然而由于『核心的主要工作是在控制硬件!』所以编译核心之前,请先了解一下您的硬件配备,与您这部主机的未来功能!由于核心是『 越简单越好!』所以只要将这部主机的未来功能给他编进去就好了! 其它的就不用去理他啦!

核心的版本与何处下载最新核心

既然这一章的内容要讨论的是如何编译核心,那么我们就来聊一聊核心的版本吧!

·  核心的版本:

由于不同的核心版本之间,使用的函式库并不相同,所以,我们必须要知道自己的 Linux 核心版本之后,才能够取用最新支持的核心版本来编译新的核心啊!那么要在哪里找到这个核心的信息呢? 应该还记得那个 uname 查看的信息吧!没错!就是他了,可以使用其功能来查询目前在工作的核心版本:

[root@linux ~]# uname -r

2.6.13-1.1532_FC4

# 因为鸟哥的 FC4 已经升级核心多次,所以这个版本应该与你的不同!

看到了吧!那个东西就是核心版本的信息啦!好了!我们依照 RPM 版本的先例,也来谈一谈 kernel 的版本吧!基本上, kernel 的版本可以区分为:

[主版本].[次版本].[释出版本(release)]-[修改版本]

整个版本的定义当中,最需要注意的是前两个,亦即主版本与次版本。 相同的[主][次]版本,代表他使用的函式库是差不多的,所以,可以直接升级到较高的[释出版本]上。 值得注意的是,由于核心功能的增加速度实在太快了,一般商业用户与一般使用者,根本不需要很多的测试中的功能,因此,[主][次]版本中,依据[次版本]的奇偶数,又分为底下两种版本:

  • 如果[次版本]是奇数的话,例如 2.3, 2.5 等等,那表示他是一个『 测试性质功能的核心版本 』, 这种核心通常是在推出稳定版本的核心之前,用来给 developer ( 核心维护更新测试者!) 测试用的!虽然功能较为强大,但是由于是属于测试性质,所以可能会有些许的 bugs 也说不定;
  • 如果[次版本]是偶数的话,例如 2.4, 2.6 等等,那表示他是一个经过测试之后才释出的 『稳定核心版本,这种核心较为稳定不容易出错, 比较适合一般个人或者是商业使用!

所以啦!我们要升级的时候,大多就是使用那种偶数的核心版本啦!不过这里还是要再提一遍!就是『 2.4 与 2.6 是两个具有相当大差异的核心版本, 两者之间使用到的函式库基本上已经不相同了,所以在升级之前,如果您的核心原本是 2.4.xx 版,那么就升级到 2.4.xx 版本的最新版,不要由 2.4.xx 直接升级到 2.6.xx 版,否则到时可能会欲哭无泪~~』, 这个问题在讨论区一再地被提起!这里再次说明!

Tips:
为什么不能从 2.4 升级到 2.6 呢?其实还是可以啦!只是过程很复杂! 我们知道软件 (packages) 是架构在系统核心上面来进行编译、安装与执行的, 也就是说,这些 packages 与核心之间,是有相关性的!这些 packages 会用到很多核心提供的功能。 但是不同的[主][次]版本之间,他们提供的功能架构差异太大,因此,若你由 2.4 升级到 2.6 的话, 那么绝大部分的软件『都需要重新再编译!』这样了解为何不要在不同的版本间升级了吧?

此外,2.4.xx 与 2.6.xx 的比较中,并不是 2.6.xx 就一定比 2.4.xx 还要新,因为这两种版本同时在进行维护与升级的工作!如果有兴趣的话,可以前往 Linux 核心网站 http://www.kernel.org 一看究竟,您就可以了解目前的核心变动情况了!

基本上,目前最新的 distributions ,包括 FC, SuSE, Mandriva 等等,都使用 2.6 的核心, 所以,您可以直接由 http://www.kernel.org 下载最新的 2.6.xx 版本的核心来尝试编译啊!目前 (2005/11/20) 鸟哥可以查到的最新版本是 2.6.14-2 , 底下我们将主要以这个版本来测试。另外,由于较新的核心版本可能会多出一些选项,因此若有不同的项目也没有关系!稍微查看一下说明内容就可以了解啦!

例题:什么是『释出版本』?
答:

由于核心的新功能增加太快,为了要统合这些功能,因此,每隔一段时间的稳定性测试后, 这些新功能才会被放到原本的核心内,最后被推出。而为了与前一个核心原始码作区别, 所以就被加上一个数字较高的『释出版本』数字了。

例题:那什么是『修改版本』?
答:

由于原本的核心原始码可能有点 bugs 在里面,经过程序开发人员的程序代码修改后 (debug), 再重新推出的一个类似加强版的意思。基本功能是不变的,只是有问题的地方被克服而已。

 

·  核心下载地点:

Linux 的核心目前是由其发明者 Linus Torvalds 所属团队在负责维护的, 而其网站在底下的站址上,在该网站上可以找到最新的 kernel 信息!不过,美中不足的是目前的核心越来越大了 ( linux-2.6.14.2.tar.bz2 这一版,这一个档案大约 37MB 了! ),所以如果你的 ISP 连外很慢的话, 那么使用台湾的映射站台来下载不失为一个好方法:

  • http://www.kernel.org/
  • 交大资科:ftp://linux.cis.nctu.edu.tw/kernel/
  • 义守大学:http://ftp.isu.edu.tw/pub/Linux/kernel/

核心原始码的取得与升级

既然核心是个档案,要制作这个档案给系统使用则需要编译,既然要有编译,当然就得要有原始码啊!那么原始码怎么来?除了刚刚前一个小节提到的,需要注意核心的版本之外,还有哪些要注意的事项??

取得原本的 distributions 提供的 kernel source

事实上,各大主要 distributions 在推出他们的产品时,其实已经都附上了核心原始码了! 以我们的 FC4 为例,你如果有安装工具程序的话,那么应该就可以利用 rpm 找到套件名称为 kernel-devel 的套件,那就是我们的核心原始码了(这个套件名称在各个不同的版本上头都不一样!所以,您应该要使用 rpm -qa | grep kernel 来寻找喔!)。如果还是找不到,那表示你没有安装啊!此时,拿出原版光盘,一片一片去 mount 且搜寻一下,肯定可以找到的啦! 然后安装他就好了!

既然要重新编译,那么干嘛还要使用原本 distributions 释出的原始码啊?真没创意~ 话不是这么说,因为原本的 distribution 释出的原始码当中,含有他们设定好的预设设定值, 所以,我们可以轻易的就了解到当初他们是如何选择与核心及模块有关的各项设定项目的参数值,那么就可以利用这些可以配合我们 Linux 系统的预设参数来加以修改,如此一来, 我们就可以『修改核心,调整到自己喜欢的样子』啰!而且编译的难度也会比较低一点!

取得最新的核心

虽然使用原本的 source code 来重新编译核心比较方便,但是,如此一来, 新硬件所需要的新驱动程序,也就无法藉由原本的核心原始码来编译啊!所以啰,如果是站在要更新驱动程序的立场来看,当然使用最新的核心会比较好啊!

取得最新的核心版本,上一个小节已经讲过了,请自行前往 http://www.kernel.org 去下载吧!

保留原本设定:利用 patch 升级核心原始码

如果你曾经自行以最新的核心版本来编译过核心,那么你的系统当中应该已经存在前几个版本的核心原始码,以及上次你自行编译的参数设定值才对。如果您只是想要更新到最新版本的核心, 原本的参数设定值并不要进行大幅度的修改,那么该如何是好?

呵呵!每一次核心释出时,除了释出完整的核心压缩档之外,也会释出『该版本与前一版本的差异性 patch 档案』,关于 patch 的制作我们已经在 原始码与 tarball 章节当中提及, 您可以自行前往参考。这里仅是要提供给您的是,每个核心的 patch 仅有针对前一版的核心来分析而已, 所以,万一你想要由 2.6.10 升级到 2.6.14 的话,那么你就得要下载 2.6.11, 2.6.12, 2.6.13 及 2.6.14 的 patch file ,然后『依次』一个一个的去进行 patch , 才能够升级到 2.6.14 喔!这个重要!不要忘记了。

在进行完 patch 之后,你可以直接检查一下原本的设定值,如果没有问题,就可以直接编译,而不需要再重新的选择核心的参数值,这也是一个省时间的方法啊! 至于 patch file 的下载,同样是在 kernel 的相同目录下,寻找文件名是 patch 开头的就是了。

核心目录下的次目录信息

假设你已经有安装了核心的原始码,以 FC4 为例,他的预设核心原始码放置在 /usr/src/kernels/2.6.11-1.1369_FC4-i686/ 这个目录下,在该目录下,基本上有这几个目录:

arch    :与硬件平台有关的项目,例如 CPU 的等级等等;

crypto  :核心所支持的加密的技术,例如 md5 或者是 des 等等;

drivers :一些硬件的驱动程序,例如显示卡、网络卡、PCI 相关硬件等等;

fs      :核心所支持的 filesystems ,例如 vfat, reiserfs, nfs 等等;

lib     :一些函式库;

net     :与网络有关的各项协议数据,还有防火墙模块 (net/ipv4/netfilter/*) 等等;

sound   :与音效有关的各项模块;

每个目录底下也都含有很多不同的次目录,例如 drivers 目录下就含有 net, sound, usb, pci, vedio... 等等多到数不清的次目录,这些目录底下还是含有相关的硬件驱动模块等等~呵呵~想要完整的了解是很难的啦! 例如,核心使如何让工作排到 CPU 去执行的?核心是如何存取物理内存与 Swap ? 核心是如何读取各不同的 filesystems 等等,如果有兴趣的话, 那么最新核心档案解压缩之后,都会有个 Documentation 的目录, 可以进去查阅各个相关的说明啊! ^_^

设定核心的编译设定 (Makefile)

就如同我们在原始码与 tarball 的章节当中提到的, 由于各个主机硬件都不相同,所以当然需要针对我们的主机环境来选择可以编译的项目啦!那就是 Makefile 的编辑。但是核心的数据实在多到不行~所以,核心有提供不少的工具来让我们简单的进行参数的设定喔!

如何编辑核心的 Makefile

在这一章当中,鸟哥假设你是以 http://www.kernel.org 这个核心官方网站下载最新的核心版本来编译的,鸟哥下载的是 2.6.14-2 版,下载的完整网址在:

http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.2.tar.bz2

如果你是以 FC4 系统预设的核心原始码来重新编译, 那么请自行安装 kernel-devel 这个套件,以及前往 /usr/src/kernels/ 目录下,找到核心原始码;如果您之前已经以下载的核心档案编译过核心, 那么请依序下载各 patch 档案,然后请自行参考 patch 的用法以及找到相关的路径吧!反正,这一章当中,我假设您与我一样, 使用的是最新版的核心就是了。

假设你下载之后将整个档案放置到 /root 内,那么首先请解压缩吧!

[root@linux ~]# cd /usr/src

[root@linux src]# tar -jxvf /root/linux-2.6.14.2.tar.bz2

# 这个时候就会产生一个 /usr/src/linux-2.6.14.2 的目录,该目录就是 source code。

# 不过,这个目录下有个 README 的档案务必参考,此外,

# 还有个 Documentation 的目录,也可以仔细的看一看喔!

 

[root@linux src]# cd linux-2.6.14.2

[root@linux linux-2.6.14.2]# make mrproper

# 这个过程在删除一些以前留下来的 .o 档案。

特别留意一下,核心的原始码最好不要直接放置到 /usr/src/linux 这个目录,这是因为该目录是很多的软件读取核心功能的目录,如果你将这个新核心放置到 /usr/src/linux 下时, 可能会让某些软件读到错误的核心档案。因此,您才可能看到目前的核心原始码都放到 /usr/src/kernels/ 目录下 (FC4 的预设放置目录)。 所以,我们新的核心主要建议您还是放置到 /usr/src/ 目录下,但是目录名称保持 linux-2.6.14.2 即可,不必更名为 linux 啰!这点重要!

另外,在进行核心的参数设定之前,务必要执行『 make mrproper 』这个项目, 还记得原始码的编译过程吧?编译过程会有 *.o 的目标档案对吧!那这些 *.o 必须要先删除啊!否则可能会产生旧的数据啊!这个要注意。

另外,其实我们也知道,整个原始码的编译过程当中,那个 Makefile 占有举足轻重的地位的! 这是因为我们的 make 取用的参数数据都是记录在 Makefile 档案当中啊! 所以啰,你必须要确定你的系统已经安装了 make, gcc 等等的编译套件, 否则是无法进行编译的。此外,核心的 Makefile 没有办法像一些软件一样, 简单的使用 ./configure 就能够自动的侦测主机。这是因为每个人对于核心的要求都不一样嘛!好了,那么如何建立 Makefile 啊?难道要手动去编辑??当然不是啦! 我们可以透过核心提供的功能,就是那个 make menuconfig 来达成喔!

  • make menuconfig:
    利用类似选单模式的方式来进行核心参数的挑选,好处是,他是纯文字模式的! 不需要启动 X Window ,还可以远程登入进行核心参数的挑选!真方便!
  • make xconfig:
    利用 X Window 的功能来进行挑选,是图形接口的,很华丽~不过,当然就比较耗系统资源。 如果你的服务器没有安装 X Window ,那就别提了!
  • make gconfig:
    利用 GDK 函式库的图形接口来选择,也是需要 X Window 的支持才行!

还有一些早期的编译流程,不过不好用,所以鸟哥就不介绍了。我这里推荐您使用 make menuconfig 来进行核心参数的挑选。这是因为很多的服务器本来就可能没有 X Window , 加上 make menuconfig 也可以作类似图形化接口的选单模式,可以随时作参数的选择,方便又好用! ^_^。只要在 /usr/src/linux-2.6.14.2 目录下,输入『make menuconfig』 就可以出现如下的画面喔!


图、核心编译工作前的参数挑选


看到上面的图是之后,你会发现主要分为两大画面,一个是大框框内的反白光柱,另一个则是底下的小框框,里面有 select, exit 与 help 三个选项的内容。这几个组件的用法如下:

  • 最底下的 <Select> <Exit> <Help> :可以使用『左右键』来移动光标;
  • 上下键可以移动上面大框框部分的 Code maturity level options 那一行! 若该行有箭头『 ---> 』则表示该行内部还有其它细项需要来设定的意思;
  • 当以『上下键』选择好想要设定的项目之后,并以『左右键』选择 <Select> 之后, 按下『 Enter 』就可以进入该项目去作更进一步的细部设定啰;
  • 在细部项目的设定当中,如果前面有 [ ] 或 < > 符号时,该项目才可以选择, 而选择可以使用『空格键』来选择;
  • 若为 [*] <*> 则表示编译进核心;若为 <M> 则表示编译成模块! 尽量在不知道该项目为何时,且有模块可以选,那么就可以直接选择为模块啰!
  • 当在细项目选择 <Exit> 后,并按下 Enter ,那么就可以离开该细部项目啰!

基本上建议只要『上下左右 空白 及 Enter 』这六个按键就好了!不要使用 Esc ,否则一不小心就有可能按错的!另外,关于整个核心的内容选择上面,建议您可以这样思考:

  • 『肯定』核心一定要的功能,直接编译进核心内;
  • 『可能在未来会用到』的功能,那么尽量编译成为模块;
  • 『不知道那个东西要干嘛的,看 help 也看不懂』的话,那么就保留默认值,或者将他编译成为模块;

总之,尽量保持核心小而美,剩下的,就编译成为模块,尤其是『需要考虑到未来扩充性』,像鸟哥之前认为螃蟹卡就够我用的了,结果,后来竟然网站流量大增,鸟哥只好改换 3Com 的网络卡。 不过,我的核心却没有相关的模块可以使用~因为.....鸟哥自己编译的核心忘记加入这个模块了。 最后,只好重新编译一次核心的模块,呵呵!真是惨痛的教训啊!

排行榜 更多 +
爱是小事最新版

爱是小事最新版

休闲益智 下载
悬案2刹那惊颤游戏

悬案2刹那惊颤游戏

冒险解谜 下载
几何飞行内购修改版

几何飞行内购修改版

飞行射击 下载