Linux 在 Atari Jaguar 上:将现代内核移植到 64 位游戏机硬件
Linux 在 Atari Jaguar 上:将现代内核移植到 64 位游戏机硬件
Atari Jaguar 是一款 1993 年推出的游戏机,宣传为 64 位强力机,现在已经支持现代 Linux 内核。通过利用 uClinux 实现无 MMU 操作,并实现执行就地 (XIP) 来管理有限的 RAM,系统可以启动到一个可用的 Busybox shell。
使用 XIP 和 uClinux 克服内存限制
将 Linux 移植到 Atari Jaguar 的主要挑战是只有 2 MB RAM 的严峻内存限制。为了让内核能够容纳进来,项目使用了 uClinux——一种为没有内存管理单元 (MMU) 的处理器设计的 Linux 变体。这使系统能够使用平坦内存模型而不是虚拟内存。
为了进一步优化 RAM 使用,内核被拆分为两个内存区域,采用执行就地 (XIP):
- ROM(卡带): 存放只读段,如
.rodata和.text。 - RAM: 存放动态段,如
.data和.bss。
通过告诉 Linux 内核 RAM 与 ROM 的边界位置,内核会自动处理重定位,防止在启动过程中出现内存不足 (OOM) 崩溃。
硬件启动:UART、定时器和向量处理
启动内核需要两个基本组件:输出方式和系统定时器。
通过 Jerry IC 的串行输出
Jaguar 的 "Jerry" IC(DSP)拥有 TXD 和 RXD 引脚。开发者编写了一个小型控制台驱动,通过位操作这些引脚,实现了类似 UART 的串行输出,以捕获 earlyprintk 信息,这对调试启动过程至关重要。
系统定时器与调度器
Jerry IC 还提供了两个定时器。其中一个被重新用于充当可编程间隔定时器 (PIT),让 Linux 内核校准延迟循环、设置调度器并管理系统时钟。这需要覆盖对 Motorola 68000 CPU 的板级初始化。
向量重定位
由于 ROM 映射在 0x80000 而不是 0x0,Motorola 68000 CPU 在复位时会尝试跳转到向量基址寄存器 (VBR) 0x0。为防止系统崩溃,开发者实现了将中断向量 memcpy 到 RAM 基址的操作。
工具链挑战与编译器修复
标准交叉编译器常常与基础的 Motorola 68000 不兼容。项目遇到了两个重要的工具链障碍:
- 未对齐内存访问: Ubuntu 软件源中的
m68k-linux-交叉编译器会生成未对齐的内存访问指令,而基础的 68000 无法处理,导致立即崩溃。通过使用专门为m68k-elf-构建的源码编译器解决了此问题。 - 平坦二进制文件: 由于系统没有 MMU,标准 ELF 文件不可用。项目使用
buildroot(具体为linuxmd项目在 2026 年 5 月的补丁)生成 FLAT 二进制文件。
实现用户空间与根文件系统
为了获得可用的 shell,项目将一个 cpio 打包的根文件系统直接嵌入到 vmlinux 镜像中。
Busybox 与内存优化
选择 Busybox 作为用户空间环境是因为它支持 nommu 目标。然而,即使使用 Busybox,内存仍然非常紧张。为防止在执行 init 时出现 OOM 惊慌,做了以下优化:
- 简化 Init: 将
init脚本简化为仅调用/bin/busybox sh的 shebang,以避免--install命令带来的内存开销。 - uClibc malloc 策略: 通过
buildroot的 menuconfig 将uClibc库的 malloc 策略改为malloc-simple。这可以防止更复杂分配策略的元数据占用剩余 RAM。
硬件部署
在真实硬件上部署时,vmlinux 二进制必须在相对于 0x80000 的固定偏移处编译,以适配 Jaguar 卡带头部。这需要在 CONFIG_ROM_START、CONFIG_ROM_LENGTH、CONFIG_ROMVEC 和 CONFIG_ROMSTART 中添加 8 KB 的偏移。
此外,还实现了一个简单的 "Tom" IC(GPU/位块器)控制台驱动,使内核能够直接在实际硬件的屏幕上输出文本。
社区见解
爱好者之间的讨论突显了 Motorola 68000 架构的历史意义,它曾驱动从原始 Macintosh 到 Sega Genesis 的各种设备。一位贡献者指出,Linux 源码树中仍保留对 68k 的支持,主要是因为它在打印机、汽车和 PDA 等领域的广泛历史部署。
社区的其他技术建议包括:
- RAM 扩展: 可以制作自定义卡带,以在 8 MB 地址空间中增加额外的 RAM。
- GPU/DSP 利用: 完全利用 Jaguar 的 GPU 与 DSP 将使项目超越 "被美化的 Atari ST" 的体验。