新鲜出炉的内核的味道

作者:Marcel Gagné

Mon Dieu! François! 从桌子底下出来,immédiatement! 你很幸运,我们的顾客还没有到。竟然看到你因为要重新编译内核而躲起来。 Qu'est-ce que je vai faire avec toi? 坐下,让我给你倒一杯酒来稳定你的情绪。好了。感觉好些了吗? Bien。(Mon Dieu! François! 天啊!弗朗索瓦!,immédiatement 立即,Qu'est-ce que je vai faire avec toi? 我该拿你怎么办?, Bien 好)

登录,让我来告诉你它有多么容易。 你知道吗,弗朗索瓦,我一直在从其他开源大厨那里收集一些很棒的秘方,旨在让整个内核过程对你来说更具吸引力,non? Quoi? Ah, mes amis. 欢迎光临!弗朗索瓦,你坐在那里喝酒做什么?带我们的客人入座。 完成后,从酒窖里拿出1996年的默尔索热内夫里耶尔。(non 不是吗?, Quoi 什么?, Ah, mes amis 啊,我的朋友们)

Pardon, mes amis。 抱歉,我的朋友们。 弗朗索瓦和我正在讨论Linux内核构建的复杂性。 我忠实的侍者正要构建他的第一个内核,而且我必须告诉你,他对这个想法有点害羞。 正是为了弗朗索瓦和像他这样的人,我才在今晚的菜单上寻找了一些项目。(Pardon, mes amis 对不起,我的朋友们)

构建内核不像以前那样是一种折磨了。 我必须承认,部分原因是对于普通用户来说,需要重新编译内核变得越来越不是必需的了。 大多数现代发行版开箱即用地包含了对更流行的设备的支持,无论是在内核中还是通过一组可编译加载模块。 然而,有时,分发的内核可能不支持您的硬件。 您可能还需要特定的功能,这些功能虽然不常见,但在您的环境中是必需的。

这通常意味着需要 Linux 提供的最新和最棒的功能。 如果你想知道 Linux 内核的最新版本是什么,无论是稳定版本还是开发版本,请尝试以下 finger 命令

finger @finger.kernel.org

几秒钟后,系统会做出如下响应

[zeus.kernel.org]
The latest stable version of the Linux kernel is:
        2.2.17
The latest beta version of the Linux kernel is:
        2.4.0-test10
The latest prepatch (alpha) version *appears* to be:
        2.4.0-test11/pre5
当然,这假设您当前已连接到互联网。 我看到我们的一位用餐者举起了手,嘴里说着always这个词。 Bravo, mon ami。(Bravo, mon ami 好极了,我的朋友)

掌握了最新的内核信息后,您现在可以访问您最喜欢的内核源代码镜像并下载您需要的内容。 请注意,我说的是mirrors(镜像)。 访问您当地的镜像非常简单。 您只需将您的国家代码夹在 kernel.org 的 “ftp” 或 “www” 之间即可。 例如,假设我身在加拿大(国家代码 “ca”)。 ftp 和 www 站点的地址如下:

ftp.ca.kernel.org
www.ca.kernel.org

同样,如果我在法国,我会使用这些镜像:

ftp.fr.kernel.org
www.fr.kernel.org
如果您不确定这些代码中的任何一个,请访问 www.kernel.org/pub/mirrors 获取完整列表。

掌握所有这些信息也可能是一件苦差事。 您可能必须非常密切地关注内核开发(可能每天都要关注)。 假设您有一张新卡,可以让您通过思维传输将命令直接输入到您的系统(Incroyable!),并且内核支持目前正在开发中。 无论您的原因是什么,Darxus 都为您提供了一个很好的小型 Perl 脚本来帮助您。 它被称为 dlkern,可从他的网站获得(请参阅“资源”)。 使用 dlkern,您只需告诉脚本您想要内核的稳定版本(-s 选项)、开发或 beta 版本(-b 选项)还是预补丁 alpha 版本(-p 选项)。 就这些。 请允许我演示一下。 在下一个示例中,我检索最新的稳定内核

./dlkern -s -w

您会注意到我也使用了 -w 选项。 这告诉 dlkern 使用 wget 作为下载新内核的方式。 默认值为 ncftpget。 其中一个或两个程序可能已经安装在您的系统上或包含在您的发行版中。 这里有一个小提示; 确保将脚本的权限更改为可执行 (chmod 755 dlkern[)。 如果您确实在关注特定驱动程序的开发,一种选择是将 dlkern 放入 crontab 条目中,以便下载可以自动发生(在夜间或任何有意义的时间)。

所以,现在我们已经选择并下载了我们的内核源代码发行版。 当然,下一步是构建内核。 我意识到有很多文档解释了内核编译的步骤(本刊的其他作者过去和将来无疑会对此进行介绍)。 然而,为了真正欣赏我们下一位大厨的作品,我们应该简要回顾一下这个过程。

有了源代码,现在是时候解压缩和提取源代码了。 常规和首选位置往往是 /usr/src。 来自任何 kernel.org 镜像的内核都倾向于提取到一个名为 “Linux” 的层次结构中。 这意味着您的内核源代码位于 /usr/src/linux 中。 但是,您可能会发现 /usr/src/linux 实际上是指向实际内核源代码所在位置的符号链接。 例如,如果我在我的一个服务器上执行 ls -l,我会得到如下所示的内容

# cd /usr/src
# ls -l linux
lrwxrwxrwx  1  1  root  11 Nov 14 1999 linux -> linux-2.2.5

请注意,它指向一个名为 “linux-2.2.5” 的目录。 如果您想直接从源代码中提取,请首先将链接重命名为其他名称,然后提取内核。 树将被称为 “Linux”。 现在,将目录更改为 linux 目录并键入 make config。 即使在您键入该命令之前,我也应该告诉您,这是旧的,甚至可以说,classic(经典)的方式。 您将获得一个逐行问答会话,旨在帮助您完成新内核的配置过程。 如果您键入 make menuconfig,您将获得一个基于 ncurses 的屏幕,它更友好一些,您可以称之为控制台集的 GUI,non? 最后一个选项是 make xconfig,它使用 X 环境进行构建。

正如我提到的,这是一个问答环节。 您可以通过回答 “Y” 表示是,“N” 表示否,以及 “M” 表示模块来决定您想要在内核中包含什么。 在过程中的任何时候,如果您不知道某件事的具体作用,都可以寻求帮助。 内核 make 过程非常擅长引导和帮助您完成此过程。 如果它告诉您应该包含它,那就这样做。

完成此操作后,如果您想仔细检查,实际上可以返回并进行一些修改。 在 /usr/src/linux 目录中,您会找到一个名为 .config 的文件。 使用 picovi 或任何让您满意的编辑器,您仍然可以进行更改。 列表 1 是最近构建的 .config 文件的示例。

列表 1. 示例配置文件

下一步是执行 make depend(它处理所有依赖项并创建您的 Makefile),然后执行 make clean。 如果这是您的第一次构建,您会看到消息声称正在清理和删除实际上不存在的文件。 现在,是时候实际编译您的内核了。 您可以通过执行 make bzImage 来完成此操作。 下一步可能需要一段时间,具体取决于您的计算机速度,因此请考虑在等待时坐下来享用一杯美味的博若莱葡萄酒。 完成所有操作后,您将在目录 /usr/src/linux/arch/i386/boot 中找到您的新内核。 正如您可能期望的那样,它被称为 bzImage,因为这就是我们告诉系统要制作的,non? 现在,您想将您的新内核映像包含在 LILO 的可引导内核列表中。 在此示例中,我直接从源代码构建了 2.2.17 内核。 完成后,我使用 vi 编辑器修改了我的 /etc/lilo.conf 文件。 列表 2 显示了我开始之前的样子。

列表 2. /ect/lilo.conf 文件

您会注意到,在此示例中,我没有更改任何其他内容。 我的默认启动仍然是 vmlinuz-2.2.14-5.0,这是我的系统附带的库存内核。 以 image=/boot/vmlinuz-2.2.17 开头的行是我事后添加的。 我现在要让我的 Linux 系统通过运行以下命令重新读取配置文件

/sbin/lilo

在 LILO 处理完您的 /etc/lilo.conf 文件后,它应该返回如下内容

Added linux *
Added linux-2.2.17
这是来自厨房的一个快速提示,mes amis。 有时,我曾说过凯撒沙拉中放太多的蒜是不可能的。 我开玩笑,但你明白的,non? 我告诉你这个是为了让你更好地理解以下声明。

您永远不会运行 /sbin/lilo 太多次,但您可能会运行得太少。 如果您对内核或 /etc/lilo.conf 文件进行了更改,但忘记运行 /sbin/lilo您的系统将无法启动。 这非常重要。 如果您不确定是否已运行 LILO,请再次运行它。 有时,我为了确保安全会运行两三次。 我在开玩笑,但只是一点点,non?

我们只剩下几件事要做了。 既然您无疑已经定义了几个要包含在新内核中的模块,您也需要制作它们。 您可以使用 make modules 命令来完成此操作,然后执行 make modules_install

就是这样。 总而言之,整个过程并没有那么复杂。 只是有很多事情要记住,而忘记了非常重要的 LILO 步骤可能会给您带来很大的麻烦(更不用说这可能会给您的酒窖带来真正的打击)。

无论如何,对于许多人(包括弗朗索瓦)来说,构建内核都是一项令人生畏的体验。 这就是 buildkernel 发挥作用的地方。 它由 William Stearns 编写,是一个很棒的小型(大型)bourne shell 脚本,几乎可以自动化整个过程。 如果您有本地内核源代码,它将使用它,否则,buildkernel 将为您下载最新的稳定内核。 如果您愿意,您可以要求该软件获取最新的开发版本。 然后,它会提取它,创建适当的链接,并通过启动 make xconfig 开始配置过程。 一旦您决定了您想要什么,您的工作就几乎完成了。

在构建内核模块后的某个时候,buildkernel 会中断您,并要求您验证其对 /etc/lilo.conf 的更改。 它通过将您置于默认编辑器中并允许您进行更改来完成此操作。 以下是此时的样子。 这不是整个文件,而只是 buildkernel 添加的更改

#The following boot section was added by
#buildkernel on Wed Nov 8 13:06:21 EST 2000
#Please feel free to move this section, edit it
#and remove these comments.
image=/boot/bzImage-2.2.17-1
        label=2.2.17-1
        root=/dev/hda1
        read-only
#End of autoinstall

如果您对此感到满意,请退出编辑器并让程序继续。 它将完成新内核的安装,运行 LILO,就这样完成了。 无需担心您是否忘记了某些步骤。 Oui,确实如此。 尽管我向您保证我亲自观看了 buildkernel 运行 LILO,但我仍然再次运行了它。(Oui 是的)

当您查看生成的 /etc/lilo.conf 文件时,请注意默认启动配置是您的旧内核——buildkernel 保持了原样。 Merci。 现在,要启动您的新内核,只需关闭您的系统并在 LILO 提示符下键入(在我的上述示例中)2.2.17-1。(Merci 谢谢)

有些参数您可能明智地预先设置。 这些参数位于名为 /etc/bkrc 的控制(或配置)文件中,它们允许您选择默认值,例如您的本地镜像下载站点 (BKFTPSITE)、映像类型 (BKBUILDTYPE),或者您是否要使用稳定内核或开发内核 (BKKERNELTOBUILD)。

看来结束时间很快就到了。 Mon Dieu! 再次,我要感谢大家光临我的餐厅。 弗朗索瓦,请再给我们的朋友们倒一杯酒。 正如您所看到的,使用 Linux 内核不必是一种可怕的体验。 在世界各地敬业的开源大厨的帮助下,任何人都可以近距离亲自体验 Linux 内核。 甚至弗朗索瓦也可以。(Mon Dieu 天啊!)

期待下次光临,您的餐桌将永远在 Chez Marcel 等候着您。(Chez Marcel 马塞尔餐厅)

 vôtre santé! Bon appétit!

资源

Smell of Fresh-Baked Kernels
Marcel Gagé 居住在安大略省的密西沙加市。 在现实生活中,他是 Salmar Consulting Inc. 的总裁,这是一家系统集成和网络咨询公司。 他还是一名飞行员,撰写科幻小说和奇幻小说,并编辑科幻、奇幻和恐怖杂志 TransVersions(现在是一本选集)。 他热爱 Linux 和所有 flavors 的 UNIX,甚至会在公共场合承认这一点。 事实上,他刚刚完成撰写 Linux 系统管理:用户指南,即将由 Addison-Wesley Longman 出版。 可以通过电子邮件 mggagne@salmar.com 与他联系。 您可以从他的网站 http://www.salmar.com/marcel/ 了解更多信息。
加载 Disqus 评论