admin 管理员组

文章数量: 1086019


2024年4月29日发(作者:什么时候用return)

编译你自己的Linux内核(Kernel)

摘要:

你马上就会发现,你也可以获得(get),配置(configure),编译(compile)和安装(install)

属于你自己的Linux内核(Kernel)。

引言

为什么你想要编译并安装一个完全属于你自己的内核(Kernel)?可能是下列原因中的一

种吧:

新内核提供更好的硬件支持能力。

新内核有某些特殊的优点,例如,对多处理器(SMP)更好的支持,或者是支持USB。这

些特性已经被加入到2.4.x内核中。

新内核修正了一些BUG。

你自己定制的内核去除了多余的元素,因此它更快,更稳定。

编译(或说“轧制”)你自己的内核需要对计算机(译者

注:不仅要对机器本身有了解,还要对Linux系统有一定的了解)有一定的理解——这是一

个难题。

因此一个Linux新手是根本不会尝试编译内核的。这篇文章中展示了一些在使用“make

xconfig”命令编译内核过程中的截图。

使用这个命令(“makexconfig”),用户可以通过图形用户界面(GUI)和鼠标来对内核进行

处理。

这里有差不多40张截图,它们解释了在某种特定的情况下为什么你需要或不能选择某个特

定的内核选项(options)。

将这40幅截图逐一讨论看上去似乎有些夸张,但这的确是解释内核的内部工作机理(internal

workings)以及特定内核选项存在的原因和工作原理的比较好的方法。

这些截图是kernel-2.4.6的。最新的内核是2.4.19,但是除去在菜单中有一些新的项目(e.g.

对新硬件的支持)以外,

屏幕的显示以及编译的过程应该是一样的。建议你在开始编译前把这篇文章打印出来,这样

你就可以随时查找必要的信息!

本文的结构如下。首先讨论你在Internet的什么地方能够找到内核的源码以及如何安装这些

源码,

然后通过屏幕截图讨论使用图形界面配置内核。一旦内核配置完毕,它就需要被编译,但

是一个新编译的内核并不能直接使用。

首先,新内核需要和引导程序“lilo”一起安装,然后,在使用lilo前你必须写配置文件

“/etc/”。

另外,还有需要指出一些特殊的要点(specificpoints),比如笔记本电脑需要的PCMCIA支

持。

看上去象信用卡的PCMCIA,小型板卡(smallinserts)通常负责联网任务,在2.4.x的内核

中已经可以直接提供支持。

但之前的内核需要重新编译安装后才能提供PCMCIA支持。SuSELinux还有一个问题,那

就是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包,比如2可以从

/pub/linux/utils/kernel/modutils/v2.4/

。注意modutils的版本号和内核的版本号可以不完全吻合:只需要下载并安装最新的版本

就行。编译并安装modutils将在后面的“安装modutils”讨论,现在我们先讨论内核的安装。

你机器上的内核(译者注:指的是你的老内核)的源码被放在/usr/src/linux/目录下。比较

明智的做法是保证源码的安全,比如通过更名(rename)linux目录:

cd/usr/src

mvlinuxlinux-2.2.19(如果原来的内核源码是2.2.19.的)

只有当你安全的保存了原始内核后,你才可以解包新的内核:你将会看见2

默认将所有东西解包到

“linux”目录,如果这个目录已经存在,它将重写这个目录,然后,你将会遇到一个麻烦:

你无法重新编译老内核,你已经没有它的配置和其他东西。

在这个例子中,我在解包linux-2.4.6.的源码后立即将“linux”更名(rename)为“linux-2.4.6”,

并且创建一个新的符号

链接“linux”到“linux-2.4.6”。这样的优点是你可以马上知道系统现在使用的内核的版本。

另外,还可以很容易的安装一个内核补丁(kernelupgrade)。命令是:(以root身份执行,


本文标签: 内核 编译 需要 安装 源码