分类: LINUX
2006-04-20 13:43:35
引言
为什么你想要编译并安装一个完全属于你自己的内核(Kernel)? 可能是下列原因中的一种吧:
• 新内核提供更好的硬件支持能力。
• 新内核有某些特殊的优点,例如,对多处理器(SMP)更好的支持, 或者是支持USB。这些特性已经被加入到2.4.x内核中。
• 新内核修正了一些BUG。
• 你自己定制的内核去除了多余的元素,因此它更快,更稳定。
编译你自己的内核需要对计算机有一定的理解——这是一个难题。 因此一个Linux新手是根本不会尝试编译内核的。这篇文章中展示了一些在使用“make xconfig”命令编译内核过程中的截图。 使用这个命令(“make xconfig”),用户可以通过图形用户界面(GUI)和鼠标来对内核进行处理。 这里有差不多40张截图,它们解释了在某种特定的情况下为什么你需要或不能选择某个特定的内核选项(options)。 将这40幅截图逐一讨论看上去似乎有些夸张,但这的确是解释内核的内部工作机理(internal workings)以及特定内核选项存在的原因和工作原理的比较好的方法。 这些截图是kernel-2.4.6的。最新的内核是2.4.19,但是除去在菜单中有一些新的项目(e.g.对新硬件的支持)以外, 屏幕的显示以及编译的过程应该是一样的。建议你在开始编译前把这篇文章打印出来,这样你就可以随时查找必要的信息!
本文的结构如下。首先讨论你在Internet的什么地方能够找到内核的源码以及如何安装这些源码, 然后通过屏幕截图讨论使用图形界面配置内核。 一旦内核配置完毕,它就需要被编译,但是一个新编译的内核并不能直接使用。 首先,新内核需要和引导程序“lilo”一起安装,然后,在使用lilo前你必须写配置文件“/etc/lilo.conf”。 另外,还有需要指出一些特殊的要点(specific points),比如笔记本电脑需要的PCMCIA支持。 看上去象信用卡的PCMCIA,小型板卡(small inserts)通常负责联网任务,在2.4.x的内核中已经可以直接提供支持。 但之前的内核需要重新编译安装后才能提供PCMCIA支持。SuSE Linux还有一个问题,那就是ALSA声卡驱动程序的音效支持。 这些驱动程序并不是内核的一部分,它们需要被编译进去然后重新安装,因为原始的驱动程序通常没有工作。 更麻烦的是,从一个系列的内核转到另一个系列的内核,比如从2.2.x系列转到2.4.x系列, 可能会由于使用某种(某些)内核工具(kernel utilities)而产生一些问题。 这就是所谓的“modutils”(译者注:可以看为“Modules Utilities”的所写,这样就不会对这个名称感到费解了),包括代码(code)需要载入(load)的内核模块(kernel module):图3解释了什么是内核模块。 有时新内核不知道如何处理老的modutils,所以你必须编译和安装更新版本的modutils。 这样的问题虽然不多但是它们的确存在,而且目前只能预先指出它们。
但是如果你完全按照本文的步骤进行,几乎不会发生错误。新内核被添加到lilo,或者被复制(copy)到loadlin所在的分区。 因此,在紧急情况下,你仍然可以通过老内核启动机器。然后可以在老内核下试着解决新内核的问题。 即使你遇到modutils的问题,你也可以从老内核重新启动计算机,然后通过将它们(内核和modutils)分别编译和安装来修复(fix)这个问题: 所有新版本的modutils都对老内核向下兼容,所以新modutils在老内核下可以很好的工作。
安装内核源码
你在这一节所进行的所有工作都需要root权限,所以你必须以root登录(login)。 首先,也是最重要的,你必须安装内核源码,比如从安装盘上。 在SuSE中,源码是被放在“d”类(为开发准备的文档)的“lx_kernel”包中。 安装适合你的发行版(distribution)的内核是比较适当的,因为不同的GUI在那时都会被自动安装。 一旦这件事情完成,最新版本的Linux内核的tar包,比如linux-2.4.6.tar.bz2可以从。 注意modutils的版本号和内核的版本号可以不完全吻合:只需要下载并安装最新的版本就行。 编译并安装modutils将在后面的“安装modutils”讨论,现在我们先讨论内核的安装。
你机器上的内核(译者注:指的是你的老内核)的源码被放在/usr/src/linux/目录下。 比较明智的做法是保证源码的安全,比如通过更名(rename)linux目录:
cd /usr/src
mv linux linux-2.2.19 (如果原来的内核源码是2.2.19.的)
只有当你安全的保存了原始内核后,你才可以解包新的内核:你将会看见linux-2.4.6.tar.bz2默认将所有东西解包到“linux”目录, 如果这个目录已经存在,它将重写这个目录,然后,你将会遇到一个麻烦:你无法重新编译老内核,你已经没有它的配置和其他东西。 在这个例子中,我在解包linux-2.4.6.的源码后立即将“linux”更名(rename)为“linux-2.4.6”,并且创建一个新的符号链接“linux”到“linux-2.4.6”。 这样的优点是你可以马上知道系统现在使用的内核的版本。 另外,还可以很容易的安装一个内核补丁(kernel upgrade)。 命令是:(以root身份执行,切记!)
cd /usr/src
cp ~/linux-2.4.6.tar.bz2 (加入tar包已经下载)
(进入你的家目录(home-directory ),“~”)
bzip2 -d linux-2.4.6.tar.bz2 (这将花费一段时间 )
tar -xvf linux-2.4.6.tar
mv linux linux-2.4.6
ln -s /usr/src/linux-2.4.6 /usr/src/linux
当你完成这个步骤后,你到kernel的目录下,然后执行:
cd /usr/src/linux
make xconfig
执行“make xconfig”命令后的用于定义(define)你的内核的图形界面。
这是用于定义(define)内核的主菜单。你需要点选(click on)不同的选项。然后点击“Save and Exit”保存你的选择, 然后你就可以编译和安装你的内核了。 但是我们还没有到那一步。(待续)