Hacker News 中文摘要

RSS订阅

在Sega 32X上运行Linux:谁还需要硬件同步原语? -- Linux on the Sega 32X. Who needs hardware synchronization primitives anyway?

文章摘要

作者分享了在Sega 32X上运行Linux的体验,感谢社区支持,并解释此举旨在提升板级启动技能,享受从零搭建系统的工程乐趣。

文章总结

好的,这是根据您的要求,对原文进行中文重述和精简后的版本。


标题:在Sega 32X上运行Linux:谁说一定要硬件同步原语?

前言与动机

作者首先感谢了读者对之前“在Atari Jaguar上运行Linux”项目的喜爱,并解释了为何持续进行这类移植工作:主要是为了提升自己的“板级bring-up”技能。这项工作涉及阅读技术文档、使用模拟器、进行实验和逆向工程,过程充满乐趣。作者从12、13岁起就因手机厂商未提供系统更新而开始接触底层开发,并曾通过社区力量迫使厂商遵守GPL协议发布内核源码,最终成功为手机移植了Android 5.0。

Sega 32X硬件简介

Sega 32X是1994年发布的Genesis/Mega Drive主机的扩展附件,旨在作为16位主机与32位Saturn之间的过渡产品。其硬件规格远超基础主机:

  • CPU:从单核7.6MHz的68000升级为双核23MHz的Hitachi SH2。
  • 色彩:从64色提升至32768色。
  • 内存:系统RAM从64KB增至256KB以上,并拥有独立的256KB显存。
  • 图形:从精灵图转向软件渲染的3D多边形。

尽管性能强大,但由于与PlayStation和Sega Saturn的发布时间过于接近,32X在商业上并不成功。

移植Linux的关键挑战与解决方案

  1. 内存限制:32X仅有256KB SDRAM,远不足以运行Linux。解决方案是使用Krikkz的Mega Everdrive烧录卡,其“扩展SSFv2映射器”功能可以将卡带中的ROM空间映射为可写的RAM,从而获得4MB的可用内存。作者通过调整,为Linux内核和initramfs保留了约540KB的ROM空间,其余部分用作RAM。

  2. 编译与启动:作者制作了sh2eb-elf交叉编译器,并解决了GCC的一个内部编译错误。随后,他编写了一个简单的earlycon驱动,利用Genesis主机的UART输出信息。他还修复了Linux内核中针对SH2架构的几个汇编代码问题,例如ashlsi3等函数错误地破坏了寄存器,以及shrd指令在32X的SH2上不存在。

  3. SMP(对称多处理):这是最大的挑战。32X的两个SH2 CPU缺乏硬件同步原语(如原子操作)和缓存一致性。作者的解决方案是:

    • 软件同步:借鉴SPARC32架构的思路,使用纯软件的Peterson算法来实现cmpxchg等必要的同步原语。
    • 中断传递:让Genesis的68000 CPU充当“总线仲裁器”和“中断路由器”。当SH2需要发送处理器间中断(IPI)时,它会向68000发送命令,由68000来实际触发另一个SH2的中断线。
    • CPU识别:利用SH2内部一个未使用的硬件除法器寄存器(DVSR)来存储CPU ID,供Linux内核查询。
    • 缓存问题:将Peterson算法使用的flagturn变量放在非缓存映射的内存区域,以避免CPU因缓存了过时的值而陷入死循环。

最终,作者成功启动了双核SMP,尽管性能因总线争用而非常低下。

成果与配置

作者还编写了一个简单的控制台显示驱动,使得Linux的启动信息可以直接显示在电视屏幕上。整个项目需要大量的精细调整,包括解决内存不足(OOM)问题,并对Linux内核和Busybox进行“瘦身”。

文章末尾提供了Linux内核源码、Busybox配置文件和初始化脚本的链接,供有兴趣的读者尝试。

评论总结

根据评论内容,主要观点和论据如下:

1. 技术实现与可行性(高认可度) - 评论1(cakehonolulu)指出,即使没有硬件同步原语,也能在32X附加组件上实现SMP就绪的Linux,并提供了GitHub链接。 - 评论4(mikepavone)质疑是否在真实硬件上测试,因为SH-2处理器无法写入卡带区域,可能限制RAM使用,并引用Spritesmind论坛讨论。

2. 硬件潜力与扩展(中等认可度) - 评论2(jonhohle)认为这令人兴奋,但未提及I/O细节,猜测串口可用于终端或键盘输入,并指出Sega CD可提供更多RAM和更快的68k处理器。 - 评论5(Dwedit)解释SuperH架构类似ARM THUMB,使用16位指令和双寄存器,但存在分支延迟槽等RISC特性。

3. 历史回顾与类比(低认可度) - 评论3(pizzaiolo)将此事与2000年代人们尝试从任何类计算机设备启动Linux的潮流类比。

4. 算法参考(低认可度) - 评论6(ajb)提及Petersen算法,并引用Lamport的类似快速互斥算法。

平衡总结:多数评论认可技术突破,但硬件兼容性(如卡带写入限制)和实际测试存疑;部分评论关注扩展潜力(如Sega CD)或架构类比;少数评论提供历史或算法背景。