本章假设您希望为 JavaStation 编译您自己的 Linux 内核。如果您无法做到这一点,本章末尾会提供指向示例内核的链接。
本章假设您已经知道如何编译 Linux 内核,可能在 PC、运行 Linux 的 SPARC 服务器或任何其他 Linux 移植版本上。如果不是,请阅读 Kernel-HOWTO 和内核源代码的 README 文件。
为 JavaStation 编译内核与在其他地方编译 Linux 内核 没有太大区别。您只需要知道要选择的正确选项。一般来说,您正在为 Sun4M 类架构 编译,并启用 JavaStation 特定的选项。本章的以下章节将带您完成这些步骤。
虽然可以通过交叉编译器在其他平台上编译启用 JavaStation 的内核,但本操作指南假设您将在运行 32 位模式的 基于 Linux/Sparc 的服务器 上进行编译。交叉编译将不在此范围内,并且不接受有关交叉编译的问题。
当在 Sun 服务器上编译您自己的支持 JavaStation 的内核时,您需要确保您工作的机器设置为 32 位模式。因此,如果您在 Ultra 类机器上,请务必先切换到 32 位模式,然后再开始编译。
要检查您所处的模式,请执行uname -a。如果它显示 "sparc",则表示您处于 32 位模式,无需执行任何操作。如果它报告 "sparc64",那么您应该首先执行sparc32 bash以切换到 32 位模式。随后的uname -a应该反映出更改。
您应该使用的内核源代码修订版本取决于您拥有的 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 上运行。
所以基本上,选择哪个内核一直是一场碰运气。尝试几个,直到找到最适合您的一个。
如果您无法编译内核,或者希望避免麻烦或尝试,您可以尝试本文档指向的示例。
当您执行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" 文件系统配置时,您将需要 NFS 和 NFS-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" 文件,其中设置了所需的选项。
如果您已决定使用 "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。本文档的 "问题和故障排除" 部分再次提到了此主题。
要构建内核,您需要输入make vmlinux。如果您来自 x86 Linux 背景,您可能会惊讶于您没有执行make bzImage或make zImage。不要惊慌:此命令是正确的。
编译完成后,您将在内核源代码根目录中找到一个名为 "vmlinux " 的文件。您几乎已准备好使用此内核。
在内核准备好使用之前,您需要对其进行一项更改。您需要将其从 ELF 转换为 AOUT 可执行格式。您可以使用大多数 Linux/SPARC 发行版中包含的 "elftoaout " 实用程序来完成此操作。
要将内核镜像转换为 AOUT 可执行格式,您需要发出命令
elftoaout -o vmlinux.aout vmlinux |
您现在可能需要将镜像文件重命名为更长的名称,其中包含当前日期和您使用的内核修订版本,以免将来与多个启动内核镜像混淆。
elftoaout 程序应该随您的 SparcLinux 发行版一起提供。如果不是,请尝试 VGER 或您最喜欢的内核镜像站点。
这里有一些示例 ".config" 和 JavaStation 就绪内核镜像。它们经过准备和捐赠,旨在帮助您快速上手。
警告:其中一些内核镜像被认为已过时,应避免在生产环境中使用。您需要自行决定运行它们会带来多大的风险。文档作者和内核贡献者不对因使用这些内核而造成的任何损害负责。它们不提供任何保证。
如果由于某种原因您在下载时遇到问题,请在单击链接时尝试按住左 Shift 键。内核镜像使用 bzip2 压缩进行压缩。它们必须在使用前解压缩。内核镜像已转换为 a.out 格式。
如果您镜像这些文件,或者可以验证它们在尚未确认的机器上工作,请 发送电子邮件给我,以便我可以在此处添加您的信息。
.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 上测试:否
.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 上测试:否
.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 上测试:否
.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 上测试:否
其他站点镜像了这里的内核或其他内核示例。以下是截至 2001 年 10 月 31 日的一些已知站点