9. 编译内核

在本章中,我们将下载 Linux 内核源代码,添加一些补丁,并在硬盘上编译和安装我们自己的定制内核。当我们成功完成这项激动人心的任务后,我们就不再需要从安装启动软盘启动了。

9.1. 为什么要更新内核

到目前为止我们使用的内核是我提供的完整的 2.4 (YellowDog 为 2.2) 内核。这是一个相当稳定且优秀的内核,但不确定它是否是你想要的。你应该制作自己的内核,以便了解你需要哪些补丁,以及在真正需要时可以安装哪些模块。这里有所有源代码和补丁的链接,以及编译新内核的逐步指南。

就像我们刚刚完成的安装一样,你必须从软盘启动。如果能够直接从硬盘启动不是更好吗?顺便说一句,声音支持呢?让我们一起尽快设置好这些。

在开始下载文件和编译内核之前,请检查你是否安装了以下软件包
make
gcc
cpp
glibc-devel
ncurses-devel
kernel-headers
(此列表可能应该更长。)

请注意,这些软件包的名称在不同的发行版中可能会略有不同。

9.2. 需要下载哪些文件

我们将使用最新的 2.4 内核源代码以及一些补丁,其中包括 David Monro 提供的 IBM-E15 帧缓冲补丁,它为我们提供了一个可用的帧缓冲控制台,能够运行 XFree86。这听起来可能很复杂,但请相信我,并非如此。按照下面的步骤操作,我们将在大约一小时内完成。

我们将使用 Linux 内核的标准位置,即 /usr/src/ 。下载内核源代码和补丁时,请将所有文件放在 /usr/src 中。

首先我们必须获取可用的 2.4 源代码。为了获取它,我们将使用 rsync 工具,所以请检查你是否已安装它。一些好心人已经在 source.mvista.com 上设置了 BitKeeper Linux/PPC 开发树的 rsync 服务器。非常感谢他们,请在你的心中和祈祷中记住他们。

注意:你可以使用来自任何 ftp.kernel.org 镜像站点的标准 Linux 内核源代码。像 2.4.21 这样的现代内核应该可以正常工作。我发现 devel 树在 7248 上运行得更好,所以我坚持使用它。

警告:不要通过低速连接(如调制解调器)执行此操作。这将花费很长时间。那么,让我们开始吧。执行以下命令
cd /usr/src
mv linux linux.old
mkdir linux-2.4
ln -s linux-2.4 linux
cd linux
rsync -avz --delete source.mvista.com::linuxppc_2_4_devel .
chown -R root.root .
chmod -R u+w .
请注意,你可能需要等待几分钟才能通过 rsync 同步所有源代码。这是正常的。

然后,从 Leigh Brown 站点页面 http://www.solinno.co.uk/7043-140/files/2.4.19-2/ 获取 David Monro 的 IBM E15 帧缓冲补丁

9.3. 补丁源代码

下一步是修补你刚刚下载的源代码文件。首先添加 IBM E15 补丁
cd /usr/src/linux
patch -p1 < ../030-e15fb.diff
如果你有更多补丁,请以相同的方式添加它们。现在内核源代码已准备好进行配置。

9.4. 配置内核

配置内核的细节超出了本文档的范围。要获得更多帮助,请尝试 内核 HOWTO。在这里,我们将只介绍获取可用内核的基础知识。将 我的内核配置文件 下载到内核树的顶层目录 /usr/src/linux 中。

在顶层目录 (/usr/src/linux) 中,通过执行以下命令启动配置程序
make ibmchrp_config
cp ingvar.config-2.4 .config
make menuconfig
在内核配置系统中,我们检查不同的菜单以了解我们的可能性。不要害怕更改任何内容。我们可以复制原始文件,然后再次加载配置系统。在继续编译和安装之前,需要检查一些事项

9.4.1. 初始内核命令行字符串

你真正应该检查并可能更改的一件事是初始内核命令行字符串,它位于General setup子菜单中。此字符串是以空格分隔的选项列表,这些选项在启动时发送到内核。这实际上是在配置引导加载程序,也是我们在 7248 上最接近 LILO、Grub 或 Yaboot 的方式。将根设备的值更改为你的根 (/) 文件系统挂载到的设备。这是通过 root=device 完成的。一个例子可能是 root=/dev/sda3。如果不确定,请登录到另一个终端并使用 mount 命令进行检查。

9.4.2. 支持集成声卡

7248 配备了内置的 Crystal Audio cs4232 声卡。Linux 内核中支持此声卡。配置内核时,请检查声音设置是否正确。它们应该看起来像这样

  • 声音: Y

  • OSS 声音模块: Y

  • 支持基于 Crystal CS4232 (PnP) 的声卡: M

并为声音部分的其余所有内容检查 N

9.4.3. 支持帧缓冲图形

几分钟前,我们打入了一个 IBM E15 帧缓冲驱动程序的补丁。这是运行 X (以及在启动时获得友好的微笑的 Tux 企鹅) 所必需的。如果由于某种原因你不想 (或不需要) 运行 X,或者你不喜欢帧缓冲控制台 (它比标准 VGA 滚动得慢),请在Console drivers子菜单中删除对 IBM E15 帧缓冲区的支持。

9.4.4. 支持其他内容

还要检查你对文件系统和其他你可能特别需要或感兴趣的东西的个人偏好。下载的配置文件应该具有合理的默认值。

9.4.5. 保存更改

完成配置后,保存我们的新配置以供以后使用(在主菜单的底部),然后选择退出。对有关保存更改的问题回答Yes。现在你已准备好编译内核。

9.5. 编译和安装内核

编译内核非常简单。如果你还没有进入,请进入内核树顶层目录中的 linux 目录,并执行以下命令序列
cd /usr/src/linux
make dep && make clean && make zImage && make modules && make modules_install 
现在,去给自己泡一杯茶或咖啡,或者喝一杯啤酒,或者学习一下圣经,等待几分钟。这可能需要一些时间。如果一切正常,当文本停止滚动时,你最终将拥有一个要安装的内核,这可能需要多达 20 分钟,具体取决于你的内核配置。

现在是时候安装你新鲜出炉的内核了。在大多数基于 Linux 的系统上,例如,我们将内核及其配置文件保存在 /boot 目录中。查看 Makefile 以检查你运行的版本,并在下面的命令中添加正确的版本号
head /usr/src/linux/Makefile
cp /usr/src/linux/arch/ppc/boot/images/zImage.prep /boot/vmlinuz-2.4.21
cp /usr/src/linux/System.map /boot/System.map-2.2.18
假设 sda1 是你的引导设备,带有 PReP 引导分区,并且你的内核版本为 2.4.21,请通过执行以下命令安装新内核
dd if=/boot/zimage-2.4.21 of=/dev/sda1
我们还希望 System map 链接指向我们的新 System.map。执行以下命令
mv /boot/System.map /boot/System.map.old
ln -s /boot/System.map-2.4.21 /boot/System.map

9.6. 配置模块

在重新启动之前,我们必须发送一些参数来配置声音模块。在 YellowDog、SuSE 和 Mandrake 上,这是在 /etc/modules.conf 中完成的。在 Debian 中,使用 /etc/modutils/sound。编辑此文件,并添加以下行
alias sound cs4232
pre-install sound /sbin/insmod sound dmabuf=1
options cs4232 io=0x534 irq=5 dma=1 dma2=0 mpuio=0x330 mpuirq=5
在 Debian 上,完成后运行 /sbin/update-modules

9.7. 祈祷并重启

好了!我们准备好重新启动了。点燃一些蜡烛(有些人喜欢牺牲鸡甚至山羊),取出启动软盘,然后执行命令
reboot
如果一切正常,系统将正常关闭,并且(假设你编译了对 E15 帧缓冲区的支持)再次启动时,Linux 企鹅吉祥物 Tux 会对你微笑。