返回

文章详情

在Atari Jaguar上运行Linux。真的。

Hacker News2026年7月6日 18:35

Atari Jaguar到底是什么鬼?1993年11月在北美发布的Atari Jaguar承诺成为新一代的酷玩意,因为它那(高度争议的)64位纯力量。Atari Jaguar主机最终成为了一场商业灾难,即使在发布了CD附加组件Jaguar CD后,销量也更低,试图与索尼PlayStation和世嘉Saturn竞争。为什么偏偏是Linux?有趣的是,直到今天,Linux仍然支持68000系列处理器的架构代码,包括68040、68030、68010……甚至原始的68000处理器。所有代码都整齐地结构在arch/m68k/下。作为温馨提示,摩托罗拉68000是一款CISC处理器,具有混合的16-32位能力(通常由于寄存器宽度长度被描述为32位,而数据总线为16位,所以一次为2字节传输)。它有一个24位地址总线,最多可以寻址约16MB的内存。该处理器于1979年发布,用以与当时即将发布的16位CPU竞争。摩托罗拉68000总体上获得了大量商业成功;它被广泛应用于许多流行的商业硬件中。其最大的竞争者是原始的Macintosh(以及Apple Lisa)、Commodore Amiga系列计算机(涵盖不同代的68000)、Sega Genesis/Megadrive、Neo-Geo AES、Plexus工作站……以及Jaguar。现在让我们解决这个房间里的大 elephant,为什么是Linux。好吧,这很简单;因为我们能够(有点)。执行 _linux?进行针对新的68000架构的Linux移植应该很简单……对吧?嗯……你会有一个很好的时光。如你所知(或不知道),长期以来有一种说法认为,Linux需要一个内存管理单元(MMU)来运行(使用虚拟内存是一件好事,如果我们想要运行软件而不被头痛所困扰)。从技术上讲,你说得对,但有uClinux;它使这一点成为可能。在某个时候,它不再是Linux的下游分支,而是成为其一部分;幸好它被集成在m68k中(而且,对于一个没有MMU的系统而言,平坦内存模型及其他要求你们可以想象)。好的,因此,我们在Linux menuconfig中启用所有所需的配置标志(基本上告知它不使用MMU而使用平坦内存模型),我们编译,它应该可以运行,对吗?好吧,是的……但也不是。执行 _linux 实际上涉及到的内容 Jaguar有2MB的RAM(映射在0x000000),(最多)6MB的ROM(卡带,基本上)映射在0x80000,还有2个定制IC(Tom & Jerry,一个“GPU”和一个DSP),也都是内存映射的。我们面临的主要障碍是内存占用;虽然说它有相当好的数量,但仍然不是无限的(我们讨论的是MB,而非GB)。我们基本上需要找到一种方法来优化我们的RAM使用。我们可以先做简单的事情,比如从内核中删除功能,禁用调试……老方法;但我们可能仍然会遇到无法将内核加载到RAM中而导致OOM的问题(天哪,我们甚至此时还没有考虑initramfs,这也很庞大)。幸运的是,Linux足够聪明,可以让我们“拆分”内核为两个独立的内存区域。我们可以利用可以将它的只读部分(想想.rodata或.text)存储在卡带(ROM)中,而动态部分(.data或.bss)则存储在RAM中(想想XIP;便地执行)。对我们来说,重要的是告诉它我们有RAM的地方,以及我们有ROM的地方,它(Linux)为我们处理重定位。酷,我们现在可以将Linux适配到Jaguar上,并且应该能够执行……对吧?当然,你可以尝试指定内核的基址(记住,非PIC代码)将其加载到那里,然后执行jmp $80000……但是,我们如何知道内部在发生什么?Linux启动所需的内容 在启动Linux的上下文中,我们需要两样东西(至少,在进行引导时):任何类型的输出,以便我们可以查看内核消息 任何系统时钟的方式(基本上是计时器) 第一个要求通常涉及到老式的UART。Jaguar的DSP(Jerry)具有TXD和RXD引脚(至少在启动Linux时)可以被重新用于进行串行输出(如果忽略与声音有关的任何东西)。编写一个小的控制台驱动程序,使用位带方式操作引脚,足以开始查看一些earlyprintk消息。第二个则有点棘手。但我们基本上可以利用Jerry IC的两个计时器;商业游戏与软件将它们用于与声音相关的任务,但我们可以用它们基本上让Linux校准并设置调度器,以及也依赖于PIT的系统。它们的有趣之处在于,它们可以在Jerry本身上触发中断,也可以在68000上触发。我们基本上可以覆盖Linux上68000的特定初始化,并将其指定为L的PIT。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡