Linux内核如何从2.4升级到2.6
作为2.6.0的最后一个测试版本,2.6测试版经历了更多的检测器的检验,尤其是在当前对开发者进一步追捕内核bugs和稳定工作有非常重大的意义。一旦2.7版本开发树开展起来,必定将带来其新特征的研究热潮。本文的目的在于为2.4内核的读者提供一些升级到2.6内核的技巧。因为2.6内核仍然是个发展中的内核,或许你在运行中会遇到些问题,但是它的总体性能和稳定性还是非常好的。
小知识:Linux采用了双树系统。一个树是稳定树(stable tree),另一个树是非稳定树(unstable tree)或者开发树(development tree)。一些新特性、实验性改进等都将首先在开发树中进行。如果在开发树中所做的改进也可以应用于稳定树,那么在开发树中经过测试以后,在稳定树中将进行相同的改进。一旦开发树经过了足够的发展,开发树就会成为新的稳定树。
目标用户
本文主要针对Lunix2.4内核的用户。(如果之前没有的,可见The Linux Kernel HOWTO)
准备工作:首先做好重要数据的备份工作
在开始之前,请确定你的所有数据已经备份。
第一步:当前2.6内核的安装(获取)
首先,所有Linux内核的官方版本可以在http://kernel.org/. 找到。通过镜像站点下载内核程序可以比较快捷迅速些。kernel.org 镜像站点列表:http://kernel.org/mirrors 。
然后下载GnuPG ,它主要用于检验新的内核程序的真实性和合法性。(http://www.kernel.org/signature.html.)
第二步:熟悉已有文件
至少需要熟悉顶级README文件、Documentation目录中的change文件,它们都是分布式的Linux内核源代码。
因为2.6.0-test是内核发展中的一个阶段(2.6.0没有扩展名-test,即是2.6的最初版本),所以其顶级README文件引自2.5开发内核的README文件。你将从这个文件中获得许多成功编译Linux内核的技巧。(具体内容见附1)
“Documentation/Changes”文件列出了发展2.5内核的新需求,提供了新内核程序升级的软件列表。(主要内容见附2)
第三步:升级系统内每个change文件的版本
新的2.6内核的升级工作涉及到许多实用程序的升级。对于某些change文件中列出的实用程序也不必担心,它们或许只是某种文件系统的特殊例子而已。但是,下面的文件还是必须至少要满足到下表给出的的最低版本:
Name: | Minimum version: | How to find version: |
Gnu C Compiler | 2.95.3 | gcc--version |
Gnu Make | 3.78 | make--version |
binutils | 2.12 | ld-v |
util-linux | 2.10o | fdformat--version |
module-init-tools | 0.9.9 | depmod-V |
procps | 2.0.9 | ps--version |
[procps 2.x] | [procps .x] |
(若有变动,参见“Documentation/Change”中的最新更新。具体可见附2)
下面的实用程序是文件系统中的特殊程序。若运行ext2 或ext3,那么就必须升级e2fsprogs。若运行jfs,就必须升级jfsutils,等等。如:
Name: | Minimum version: | How to find version: |
e2fsprogs | 1.29 | tune2fs |
jfsutils | 1.0.14 | fsck.jfs -V |
reiserfsprogs | 3.6.3 | reiserfsck–V 2>&1| grep reiserfsprogs |
xfsprogs | 2.1.0 | xfs_db -V |
nfs-utils | 1.0.5 | showmount --version |
另外,少数实用程序当你用到它时才需要升级的有:
Name: | Minimum version: | How to find version: |
pcmcia-cs | 3.1.21 | Cardmgr -V |
quota-tools | 3.09 | Quota -V |
PPP | 2.4.0 | ppd--version |
isdn4k-utils | 3.1pre1 | Isdnctrl 2>&1 | grep version |
oprofile | 0.5.3 | oprofiled--version |
如果首次运行ALSA,请访问http://www.alsa-project.org/获取最新的alsa-lib 和 alsa-utils。
第四步:配置新内核
这里,你所注意到的首要变化之一就是新的结构体系的形成。旧的TK/Tcl“xconfig”结构由新的QT“xconfig”所取代。当然,GTK“gconfig”也行。
2.6内核配置包括:
Make config
与2.4内核配置“config”相似,做为简单的配置方法,它仅仅要求你选择每个配置选项。需要“bash”。
Make menuconfig
与2.4内核配置的“menuconfig”相似。
Make xconfig
新的默认的图形化的配置系统,利用了QT库。它非常方便易用。
Make gconfig
该选项是xconfig的新的克隆,用GTK库代替了QT库。不幸的是,在测试中发现其中有bug。运行时会不停的重复提示同样的错误信息。
Make oldconfig
在内核升级中,该选项非常有用。乍一看它有点象简单的“make config”,实际上,oldconfig是读取和自动响应设置当前的.config设置。它向你提示新的配置选项的功能。如要用,只需简单地复制入你的old.config文件,再运行“make oldconfig”即可。
(注:首次配置2.6内核时,查看Linux代码顶级README文件时请注意以下技巧: ①多余的驱动将增大内核,在一定条件下会导致问题的出现
②内核hacking配置信息的选择常常导致内核更庞大更缓慢,甚至导致内核的不稳定。因此在回答“development”、“experimental”或“debugging”特征时多数选择“N”。)
ALSA:
从2.4版本到2.6版本的升级,这就要使用到ALSA(Advanced Linux Sound Architecture即:新的 Linux 音频体系结构)。它取代了OSS(Open Sound System)。配置内核时,选定ALSA的OSS API效法选项(SND_OSSEMUL、SND_MIXER_OSS和SND_PCM_OSS)和适当的声音驱动(PCI 驱动)。最后,下载和安装最新的alsa-lib和alsa-utils。
第五步:创建新内核
创建2.6内核比2.4的更容易些,不必进行“make dep”这一步。创建新的内核,进行“make bzlmage”。如果选择了编译模块,那么还需要运行“make modules”和“make modules_install”。可以一起进行:“make bzlmage && make modules && make modules_install”。
第六步:安装新内核
创建了内核,需要将之复制到一个位置,若x86的机子,其位置路径就是“a