← 返回信息流
AI 资讯Hacker News·4 小时前

Sega 32X成功运行Linux:硬件同步原语并非必需

原标题:Linux on the Sega 32X. Who needs hardware synchronization primitives anyway?

速览

开发者通过巧妙方法在1994年的Sega 32X扩展硬件上运行了Linux,绕过了传统硬件同步原语的依赖。这一成果展示了复古硬件与现代操作系统结合的潜力,对嵌入式系统和复古计算爱好者具有技术参考意义。

AI 深度解读

Linux on the Sega 32X. Who needs hardware synchronization primitives anyway?

来源:Hacker News

背景

这篇文章是作者在成功将 Linux 移植到 Atari Jaguar 之后,将目光投向了另一款经典主机——Sega 32X 的后续。作者首先感谢了读者对之前 Jaguar 文章的关注,并特别提到了 linuxmd 项目的贡献。该文章曾在 Hacker News 上引发热议,收到了不少有趣的问题。

作者解释了自己为何持续进行这类“复古 Linux 移植”工作:主要目的是提升板级 bringup(板级启动)技能。他已在固件/操作系统/嵌入式领域工作超过两年,而“从零开始完成板级 bringup”是求职时常见的要求。除了求职之外,让一块芯片运行自己参与制作的系统本身就是一件非常有趣的事——需要接触模拟器、技术文档、实验、调查等工程环节。尽管阅读 90 年代初的扫描版数据手册并非他的爱好(有些文档甚至只是 PDF 中嵌入的图片),但这个过程总有一种吸引力让他不断回来。

作者最早在 2013/2014 年(当时他 12/13 岁)就开始了类似实践。他父母给他买了第一部手机——基于联发科 MT6589 四核处理器、1GB RAM 的设备。当时 Google 发布了 Android 5.0 Lollipop,但厂商决定不提供升级。作者于是开始动手:他要求厂商遵守 GPL 协议发布 Linux 内核源码,起初遭到拒绝,但在社区努力下厂商最终放出了源码(以及部分其他机型的代码)。然而源码质量极差,板级配置甚至无法启动。幸运的是,作者找到了一个泄露的联发科 ALPS 全源码包(针对 MT6589 的一个变种),包含了完整的 Little Kernel 引导加载程序、基带、预加载器、Linux 内核和 AOSP。他花了几个月时间逆向工程手机厂商提供的 stock boot image 中的 zImage,填补联发科代码中的缺失部分(如 LCM、电池、芯片组 quirks 等),最终成功让 Android 5.0 运行在手机上——虽然蓝牙、硬件加速、媒体引擎等还不完善,但看到纯正的 Material Design 界面时,他感到无比震撼。

Sega 32X 于 1994 年 11 月在美洲/欧洲(日本 12 月)发布,是 Sega 为 16 位 Genesis 到 32 位 Saturn 过渡而设计的附加组件。它的诞生伴随着 Sega 日本与 Sega 美国之间的内部斗争,故事颇为曲折。在此之前,Sega 已经推出了 CD 附加组件 Sega CD(欧洲/日本称 Mega CD),它连接在 Genesis 的扩展槽上,支持 CD 音频流和游戏资产流,并拥有比 Genesis 更高主频的 68000 处理器。Sega CD 有两种型号:前装式(Model 1)和顶装式(Model 2)。而 32X 则直接插在 Genesis 的卡带槽上,需要独立的电源砖和视频输出,其视频信号叠加在 Genesis 的视频输出之上。如果同时连接 Sega CD 和 32X,就会形成著名的“Tower of Power”组合——三个独立电源砖、大量线缆。

核心内容

32X 的硬件远比基础主机强大:

| 组件 | Genesis | 32X | |------|---------|-----| | CPU | 68000 @ 7.6 MHz | 2× SH2 @ 23 MHz | | RAM | 64 KB | 256 KB + 64 KB | | 视频 | 256×224, 64 colors | 320×240, 32,768 colors | | 音频 | YM2612 + PSG | 立体声 PCM(通过 SH2 控制) |

不幸的是,32X 的发布几乎与索尼 PlayStation 1 同时,而 PS1 以更简单的架构迅速占领市场;同时 Sega Saturn 也即将上市,消费者感到困惑。这一切都体现了 Sega 的一贯作风。

既然作者已经让 Linux 在 Jaguar 上运行,理论上也能在 32X 上实现类似目标。关键在于让 Linux 在两个 SH2 处理器上运行,并能够通过 UART 输出有意义的信息。这需要设置三个 CPU:两个 SH2 和 68000。作者找到了现成的示例——Chilly Willy 的 Sega MD/CD/32X 开发套件。

查看原文 →cakehonolulu.github.io