4. 构建您的内核

4.1. 开始之前

本章假设您希望为 JavaStation 编译您自己的 Linux 内核。如果您无法做到这一点,本章末尾会提供指向示例内核的链接。

本章假设您已经知道如何编译 Linux 内核,可能在 PC、运行 LinuxSPARC 服务器或任何其他 Linux 移植版本上。如果不是,请阅读 Kernel-HOWTO 和内核源代码的 README 文件。

JavaStation 编译内核与在其他地方编译 Linux 内核 没有太大区别。您只需要知道要选择的正确选项。一般来说,您正在为 Sun4M 类架构 编译,并启用 JavaStation 特定的选项。本章的以下章节将带您完成这些步骤。

虽然可以通过交叉编译器在其他平台上编译启用 JavaStation 的内核,但本操作指南假设您将在运行 32 位模式的 基于 Linux/Sparc 的服务器 上进行编译。交叉编译将不在此范围内,并且不接受有关交叉编译的问题。

4.2. 确保您使用 32 位模式

当在 Sun 服务器上编译您自己的支持 JavaStation 的内核时,您需要确保您工作的机器设置为 32 位模式。因此,如果您在 Ultra 类机器上,请务必先切换到 32 位模式,然后再开始编译。

要检查您所处的模式,请执行uname -a。如果它显示 "sparc",则表示您处于 32 位模式,无需执行任何操作。如果它报告 "sparc64",那么您应该首先执行sparc32 bash以切换到 32 位模式。随后的uname -a应该反映出更改。

4.3. 支持的 Linux 内核 版本

您应该使用的内核源代码修订版本取决于您拥有的 JavaStation 型号以及您正在使用的内核系列。当前的“稳定”系列 Linux 内核是 2.4.x,但正如我们稍后将读到的,这可能不是最佳选择。

首先,关于 2.2.x 和 2.3.x 系列的一些说明。Mr. Coffee 自内核版本 2.2.5 左右开始就得到了内核支持,并且肯定可以与 RedHat 6.0+/SPARC 发行版内核 开箱即用。Krups 支持直到 2.3.x 内核周期的后期才开箱即用。Krups 支持在早期的 2.3.x 序列中添加,但 MMU 对 32 位 SPARC 内核 的更改使其无法干净地编译,直到稍后才解决。

HOWTO 作者使用 2000 年 3 月 17 日的 CVS 内核为 Mr. Coffee 和 Krups 编译的内核都很干净,并且包含在示例内核部分中。. Krups 支持已向后移植到 2.2.x 内核(其中 x>15)。最新的 2.2.x 内核“应该”可以为 Mr. Coffee 和 Krups 型号干净地编译,但您的结果可能会有所不同。

现在进入 2.4.x 系列。

唯一经过测试并为 Mr. Coffee 和 Krups 干净编译的内核是 2.4.2 版本。所有其他版本都已损坏或需要补丁。

原因是内核的 sparc32 分支已经数月没有活跃的维护者。有些人正在贡献修复程序,但在没有活跃维护者的情况下,事情进展缓慢。

还有另一个理由对 2.4.x 系列保持警惕。从 2.4.0 到 2.4.9,发现内核的 VM 在重负载下不足,随后在 2.4.10+ 中被替换。这对于所谓的“稳定”内核系列来说是一个很大的变化。

更糟糕的是,在所有 2.2.x 内核系列以及直到 2.4.12 的内核中都检测到了安全漏洞。这在 pre-2.2.20 和 2.4.12+ 中得到了修补。截至撰写本文时,作者尚未检查 2.4.12+ 是否在 JavaStations 上运行。

所以基本上,选择哪个内核一直是一场碰运气。尝试几个,直到找到最适合您的一个。

如果您无法编译内核,或者希望避免麻烦或尝试,您可以尝试本文档指向的示例。

4.4. 必需的内核配置选项

当您执行make config命令进入内核配置阶段时,您需要启用一些选项。请注意,以下选项名称来自 2.2.x 内核,并且在 2.4.x 系列内核上可能略有不同。如有疑问,请查看本章后面的示例文件。

对于所有 JavaStation,您都需要启用 PCI 支持

CONFIG_PCI=y 

不要忘记您的鼠标

CONFIG_BUSMOUSE=y 
CONFIG_SUN_MOUSE=y 

您需要视频,使用 Linux 帧缓冲接口 完成

CONFIG_FB_TCX=y (for Mr. Coffee) 
CONFIG_FB_PCI=y 
CONFIG_FB_IGA=y (for Krups/Espresso) 

音频通过 Crystal Audio 4231 芯片组 完成

CONFIG_SPARCAUDIO=y 
CONFIG_SPARCAUDIO_CS4231=y 

不要忘记您的网络接口

CONFIG_SUNLANCE=y (Mr. Coffee) 
CONFIG_HAPPYMEAL=y (Krups/Espresso) 

您无疑需要支持文件系统

CONFIG_EXT2_FS=y 

您需要 IP 自动配置和 RARP/BOOTP 支持

CONFIG_IP_PNP=y 
CONFIG_IP_PNP_BOOTP=y 
CONFIG_IP_PNP_RARP=y 

当进行 "NFS-Root" 文件系统配置时,您将需要 NFSNFS-Root 支持

CONFIG_NFS_FS=y 
CONFIG_ROOT_NFS=y 

当进行 "Embedded-Root" 文件系统时,配置 RAM 磁盘和 "initial ramdisk" 支持

CONFIG_BLK_DEV_RAM=y 
CONFIG_BLK_DEV_INITRD=y   (for 2.4.x, also configure size of ramdisk)

您可以在本章后面获得一个有效的 ".config" 文件,其中设置了所需的选项。

4.5. "Embedded-Root" FS 配置的必要补丁

如果您已决定使用 "Embedded-Root" 文件系统选项,您将需要首先对 RAM 磁盘驱动程序源代码进行补丁。

使用 RAM 磁盘驱动程序时,RAM 磁盘的默认大小为 4 MB。您很可能需要大于该大小的嵌入式文件系统,尤其是在您开始考虑运行 X server 或包含 Java 运行时时。

对于 2.2.x 内核,您可以通过手动编辑或使用下面指向的补丁来做到这一点。更改是在文件 <LINUXROOT>/drivers/block/rd.c 中的单行编辑。查找一行说

int rd_size = 4096; /* Size of the RAM disks */ 

并将其更改为您希望的 RAMdisk 的大小。通常,大多数嵌入式系统都在 16 MB 以下,因此常见的编辑是将该行更改为

int rd_size = 4 * 4096; /* Size of the RAM disks */ 

如果您无法做到这一点,下面的补丁会为您进行编辑。

4MB 到 16MB 内核补丁文件位于: http://dubinski-family.org/~jshowto/Files/patches/ramdisk_patch.txt

2.4.x 系列中的内核允许您选择 RAM 容量作为配置选项。这些内核不再需要补丁。

还应在本节中指出,由于 PROLL 的实现,目前所有 JavaStation 型号的 Linux 启动镜像大小都有限制。此限制在技术上为 8 MB。本文档的 "问题和故障排除" 部分再次提到了此主题。

4.6. 构建 JavaStation 就绪内核

要构建内核,您需要输入make vmlinux。如果您来自 x86 Linux 背景,您可能会惊讶于您没有执行make bzImagemake zImage。不要惊慌:此命令是正确的。

编译完成后,您将在内核源代码根目录中找到一个名为 "vmlinux " 的文件。您几乎已准备好使用此内核。

4.7. 将内核从 ELF 转换为 a.out 格式

在内核准备好使用之前,您需要对其进行一项更改。您需要将其从 ELF 转换为 AOUT 可执行格式。您可以使用大多数 Linux/SPARC 发行版中包含的 "elftoaout " 实用程序来完成此操作。

要将内核镜像转换为 AOUT 可执行格式,您需要发出命令

elftoaout -o vmlinux.aout vmlinux 

您现在可能需要将镜像文件重命名为更长的名称,其中包含当前日期和您使用的内核修订版本,以免将来与多个启动内核镜像混淆。

elftoaout 程序应该随您的 SparcLinux 发行版一起提供。如果不是,请尝试 VGER 或您最喜欢的内核镜像站点。

4.8. JavaStation 就绪内核镜像、System.map 和 .config 文件示例

这里有一些示例 ".config"JavaStation 就绪内核镜像。它们经过准备和捐赠,旨在帮助您快速上手。

警告:其中一些内核镜像被认为已过时,应避免在生产环境中使用。您需要自行决定运行它们会带来多大的风险。文档作者和内核贡献者不对因使用这些内核而造成的任何损害负责。它们不提供任何保证。

如果由于某种原因您在下载时遇到问题,请在单击链接时尝试按住左 Shift 键。内核镜像使用 bzip2 压缩进行压缩。它们必须在使用前解压缩。内核镜像已转换为 a.out 格式。

如果您镜像这些文件,或者可以验证它们在尚未确认的机器上工作, 发送电子邮件给我,以便我可以在此处添加您的信息。

4.8.1. 2.3.99pre3_embedded_RSD

.config (md5sum c59329ceb2e831f2502c1e410ece141c): http://dubinski-family.org/~jshowto/Files/kernels/2.3.99pre3_embedded_RSD/config__2.3.99pre3_embedded_RSD.txt

kernel (md5sum 8e8d28b13961b92e3f95e4ba98f6f319): http://dubinski-family.org/~jshowto/Files/kernels/2.3.99pre3_embedded_RSD/vmlinux__2.3.99pre3_embedded_RSD.bz2

System.map (md5sum 43205a86fcb0b16ecae7313d38fcbb2c): http://dubinski-family.org/~jshowto/Files/kernels/2.3.99pre3_embedded_RSD/system.map__2.3.99pre3_embedded_RSD.txt

描述

此内核由 Robert Dubinski 捐赠。它曾在 Marquette 大学用于构建嵌入式 root 启动镜像。它基于 2000 年 3 月 17 日的 CVS 内核。它包括对 Mr. Coffee 和 Krups 机器的支持。

在 Mr. Coffee 上测试:是

在 Krups 上测试:是

在 Espresso 上测试:否

4.8.2. 2.3.99pre3_nfsroot_RSD

.config (md5sum e715370346ac298555dd7ce099c8f80a): http://dubinski-family.org/~jshowto/Files/kernels/2.3.99pre3_nfsroot_RSD/config__2.3.99pre3_nfsroot_RSD.txt

kernel (md5sum fd141e8e8f639df67427d5ecd0ecba76): http://dubinski-family.org/~jshowto/Files/kernels/2.3.99pre3_nfsroot_RSD/vmlinux__2.3.99pre3_nfsroot_RSD.bz2

System.map (md5sum fd141e8e8f639df67427d5ecd0ecba76): http://dubinski-family.org/~jshowto/Files/kernels/2.3.99pre3_nfsroot_RSD/system.map__2.3.99pre3_nfsroot_RSD.txt

描述

此内核由 Robert Dubinski 捐赠。它曾在 Marquette 大学用于原型设计文件系统。它基于 2000 年 3 月 17 日的 CVS 内核。它包括对 Mr. Coffee 和 Krups 机器的支持。

在 Mr. Coffee 上测试:是

在 Krups 上测试:是

在 Espresso 上测试:否

4.8.3. 2.4.2_embedded_RSD

.config (md5sum dd1a9dd2e92b9b175b7ba747c94edca7): http://dubinski-family.org/~jshowto/Files/kernels/2.4.2_embedded_RSD/config__2.4.2_embedded_RSD.txt

kernel (md5sum 5a1592b7e0a37909ae16374296a7070e): http://dubinski-family.org/~jshowto/Files/kernels/2.4.2_embedded_RSD/vmlinux__2.4.2_embedded_RSD.bz2

System.map (md5sum 1de202e0fab7a9e661bebc80255605b7): http://dubinski-family.org/~jshowto/Files/kernels/2.4.2_embedded_RSD/system.map__2.4.2_embedded_RSD.txt

描述

此内核由 Robert Dubinski 捐赠。它是 2.4.x 系列的演示内核,尚未经过测试...但即将测试。它包括对 Mr. Coffee 和 Krups 机器的支持。

在 Mr. Coffee 上测试:否

在 Krups 上测试:否

在 Espresso 上测试:否

4.8.4. 2.4.2_nfsroot_RSD

.config (md5sum cabd1d98613ad169b372666b7eaa869b): http://dubinski-family.org/~jshowto/Files/kernels/2.4.2_nfsroot_RSD/config__2.4.2_nfsroot_RSD.txt

kernel (md5sum c24f42f72c58920c00ac7ff7aaffadde): http://dubinski-family.org/~jshowto/Files/kernels/2.4.2_nfsroot_RSD/vmlinux__2.4.2_nfsroot_RSD.bz2

System.map (md5sum 6af2b374c7d3fc3f97d48ab71b335062): http://dubinski-family.org/~jshowto/Files/kernels/2.4.2_nfsroot_RSD/system.map__2.4.2_nfsroot_RSD.txt

描述

此内核由 Robert Dubinski 捐赠。它是 2.4.x 系列的演示内核,尚未经过测试...但即将测试。它包括对 Mr. Coffee 和 Krups 机器的支持。

在 Mr. Coffee 上测试:否

在 Krups 上测试:否

在 Espresso 上测试:否

4.8.5. 外部内核镜像站点

其他站点镜像了这里的内核或其他内核示例。以下是截至 2001 年 10 月 31 日的一些已知站点

  1. ftp://atari-source.com/pub/javastation/

  2. http://people.redhat.com/pjones/krups