行业资讯
📅 2026/7/8 14:19:26
挑战重重!竟能在 Atari Jaguar 上运行 Linux,是如何做到的?
目录Atari Jaguar 究竟是什么为什么偏偏是 Linuxjmp _linuxjmp _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)