目录
Atari Jaguar 究竟是什么?
为什么偏偏是 Linux?
jmp _linux?
jmp _linux 实际涉及的内容
Linux 启动所需条件
用户空间
供尝试者参考的杂项配置文件
Atari Jaguar 究竟是什么?
Atari Jaguar 于 1993 年 11 月在北美发布,凭借其(备受争议的)64 位强大性能,本有望成为游戏机领域的新宠儿。然而,这款游戏机最终在商业上遭遇了滑铁卢。即便后来推出了 CD 扩展配件 Jaguar CD,其销量也十分惨淡,根本无法与索尼 PlayStation 和世嘉 Saturn 相抗衡。
为什么偏偏是 Linux?
直至今日,Linux 仍保留着适用于 68000 系列处理器的架构代码,存放在 `arch/m68k/` 目录下。摩托罗拉 68000 是一款 CISC 处理器,具备 16 - 32 位混合处理能力,拥有 24 位地址总线,最多可寻址 16MB 内存,于 1979 年推出。它在商业上反响不错,被广泛应用于众多流行的商业硬件中,包括 Atari Jaguar。选择 Linux 的原因是“因为我们能做到”。
jmp _linux?
为基于 68000 的新 Linux 端口进行启动准备并不简单。有一种普遍观点认为 Linux 需要 MMU 才能运行,但 `uClinux` 让在没有 MMU 的情况下运行 Linux 成为可能。在 Linux 的 [`menuconfig`](https://github.com/cakehonolulu/linux_jag/commit/7b769c4bfa748f689463ba4d53eecc811c7d42f2) 中启用必要配置标志,编译后不一定能运行。
jmp _linux 实际涉及的内容
Atari Jaguar 拥有 2MB 的 RAM、最多 6MB 的 ROM,还有两个定制 IC。面临的主要难题是内存占用,需优化 RAM 使用。Linux 允许将内核“拆分”到两个不同的内存区域,只需告诉 Linux RAM 和 ROM 的位置,它就会处理重定位问题。理论上可将 Linux 装进 Atari Jaguar 并执行,但不清楚内核底层发生了什么。
Linux 启动所需条件
启动 Linux 需满足两个条件:有输出方式看内核消息;有系统计时方式。第一个条件可借助 UART,第二个条件可使用 Jerry IC 的定时器。编译代码运行没反应,发现 Ubuntu 软件源中自带的 `m68k - linux -` 交叉编译器会导致系统崩溃,使用专门针对 68000 构建的 `m68k - elf -` 编译器可解决问题。还需将 `vectors` 复制到 RAM 的基地址。从源代码编译 `gdb` 才能与 MAME 的 `gdbtsub` 配合使用。最终看到了一些输出,但 Linux 试图执行 `init` 进程时系统再次崩溃,因为未提供该进程。
用户空间
不能使用 ELF 文件,使用 FLAT 二进制文件给工具链设置带来麻烦。找不到独立编译 `elf2flt` 的方法,但 `buildroot` 解决了 68000 基础版本的问题。启用 m68k 无 MMU 的补丁于 2026 年 5 月发布。让 `buildroot` 完成工作,选择 `busybox`。执行 `init` 时出现内存不足问题,最终只使用 `sh`。有了根文件系统后打包成 `cpio` 格式并嵌入 `vmlinux` 镜像。还需对工具链的 `libc` 进行调整,将内存分配策略修改为 `malloc - simple`。实现了简单的 Tom 控制台驱动程序,在真实硬件上运行 `vmlinux` 需添加偏移量。复制设置的基本思路是编译针对 68000 的 `buildroot`,填充 initramfs 文件结构,告诉 Linux `initramfs.cpio` 文件的位置。
供尝试者参考的杂项配置文件
[Busybox 配置](https://cakehonolulu.github.io/misc/linux_jaguar/busybox.config) [Init 脚本](https://cakehonolulu.github.io/misc/linux_jaguar/init)