编译内核

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

为什么要更新内核

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

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

在开始下载文件和编译内核之前,请检查你是否已安装以下软件包

make
gcc
cpp
glibc-devel
ncurses-devel
kernel-headers
(此列表可能应该更长。)

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

要下载哪些文件

我们将使用最新的 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 帧缓冲补丁

修补源代码

下一步是修补你刚刚下载的源代码文件。首先添加 IBM E15 补丁

cd /usr/src/linux
patch -p1 < ../030-e15fb.diff
如果你有更多补丁,请以相同的方式添加它们。现在内核源代码已准备好进行配置。

配置内核

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

在顶层目录 (/usr/src/linux) 中,通过发出以下命令启动配置程序

make ibmchrp_config
cp ingvar.config-2.4 .config
make menuconfig
在内核配置系统中,我们检查不同的菜单以了解我们的可能性。不要害怕更改任何内容。我们可以复制回原始文件,然后再次加载配置系统。在继续编译和安装之前,有一些事项需要检查

初始内核命令行字符串

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

对集成声卡的支持

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

  • Sound: Y

  • OSS sound modules: Y

  • Support for Crystal CS4232 based (PnP) cards: M

并检查声音部分中其他所有内容是否为 N

对帧缓冲图形的支持

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

对其他内容的支持

还要检查你对文件系统和其他你可能特别需要或感兴趣的内容的偏好。下载的配置文件应该具有合理的 value。

保存更改

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

编译和安装内核

编译内核非常简单。如果你还没有进入,请进入内核树顶层的 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

配置模块

在重新启动之前,我们必须发送一些参数来配置声音模块。在 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

祈祷并重启

好了!我们准备好重新启动了。点燃一些蜡烛(有些人更喜欢献祭鸡甚至山羊),取出启动软盘,然后发出命令

reboot
如果一切正常,系统将正常关闭,并且(假设你编译了对 E15 帧缓冲区的支持)重新启动后,Linux 企鹅吉祥物 Tux 会在启动时对你微笑。