在 Xbox 上运行 Linux

作者:Michael Steil

2001 年 11 月,微软推出了 Xbox 进入视频游戏机业务,这台机器在处理器速度和视频性能方面继续超越所有其他游戏机。与 SEGA Dreamcast 一样,黑客们在 2002 年 5 月开始将 Linux 移植到 Xbox。仅仅三个月后,互联网上发布了来自运行 Linux 的 Xbox 的第一批内核消息。现在,在该项目启动一年后,Linux 在所有版本的 Xbox 上都能可靠运行,Xbox Linux 已准备好日常使用。

Xbox 硬件

Xbox 由 733MHz Intel Celeron 处理器驱动,包含 64MB DDR RAM(与视频共享)、NVIDIA GeForce3 图形处理单元 (GPU)、8GB 或 10GB 硬盘、DVD-ROM 驱动器、以太网连接、四个 USB 式控制器连接器和电视输出(图 1 列出了详细信息)。此硬件概述听起来更像是对一台像样的 PC 而不是游戏机的描述。Xbox 不仅仅包含一些典型的 PC 组件,例如 Intel CPU 或 NVIDIA GPU,它实际上就是一台较小的黑色外壳中的 PC,只有细微的修改。Xbox 芯片组由 NVIDIA 的 NV2A 北桥和 MCPX 南桥组成。用于 PC 的 NVIDIA nForce 芯片组几乎与 Xbox 芯片组相同。其南桥 IC 标记为 MCP,并且包含与 MCPX 完全相同的功能:两个 USB 控制器、一个 IDE 控制器、一个以太网设备和 AC97 兼容的杜比数字声音。

图 1. 以树状图查看的 Xbox 硬件。右侧的数字是 PCI 位置和 ID。

Xbox 的背景很简单。由于微软已经拥有用于 PC 的操作系统、系统库和 DirectX 库,他们决定基于这种众所周知的架构构建 Xbox。最初,微软希望 AMD 生产 Xbox 的 CPU 和芯片组;视频芯片将来自 NVIDIA。但微软后来改变了主意,转而使用英特尔的 CPU。因此,NVIDIA 从 AMD 获得了芯片组的许可,为 Xbox 制造了 IC,并将相同的设计作为 nForce 出售给 PC 市场。

Xbox 与 PC 的相似性不仅使安装和运行 Linux 的过程变得更加容易,而且也使人们将 Xbox 用作计算机变得更有意义。与 Dreamcast、PlayStation 2 或 GameCube 不同,Xbox 始终配备硬盘和以太网。PC 硬件也使得在 Xbox 上使用标准 Linux 发行版成为可能,只需进行细微修改。

由于其价格和紧凑性,运行 Linux 的 Xbox 可以用作台式计算机(参见图 2)或服务器,取代标准 PC,并且由于其电视连接功能,它也可以用作观看视频或收听音频的娱乐设备。

Running Linux on the Xbox

图 2. 在运行 Mandrake Linux 9.0 的 Xbox 上以 640 × 480 分辨率显示的 KDE 桌面

安全

尽管 Xbox 与标准 PC 非常相似,但在 Xbox 上安装 Linux 并非仅仅是插入安装 CD 的问题。首先,Xbox 启动过程与 PC 的启动过程大不相同。PC 在 ROM 中有一个 PCBIOS(基本 I/O 系统),其中包含用于键盘、视频和硬盘 I/O 的 16 位库例程,以及一个简单的引导加载程序,该程序从存储设备读取第一个扇区并运行它。Xbox 没有这样的 BIOS。它的 256KB ROM 映像包含一个静态链接的、精简的、基于 Windows 2000 的内核,该内核在 Xbox 开机时立即运行。硬盘——它由单独的 ATA 密码锁定,因此当连接到计算机或更换为另一个硬盘时无法读取——不包含任何操作系统组件。当 Xbox 内核启动时,它会解锁硬盘并尝试从 CD 或 DVD 运行 default.xbe 文件。如果找不到此类文件,它将从硬盘运行 xboxdash.xbe。这是永久存储在硬盘上的系统配置和音频 CD 播放器应用程序。

这些 .xbe 文件是可执行文件,它们很像 Linux ELF 文件,只是它们使用微软的 2048 位 RSA 密钥进行数字签名。更改文件中的单个字节会使签名无效,并且该文件将被 Xbox 内核拒绝。由于缺少微软的私钥,Xbox Linux 项目无法复制有效的签名;因此,我们无法创建标准 Xbox 接受的可执行文件。有两种方法可以使您自己的代码运行:更换 ROM 或找到一个可以利用的漏洞的游戏。

大多数人在 Xbox 上运行 Linux 的标准方法是打开盒子并安装一个替换 ROM 芯片,该芯片会覆盖板载 ROM 芯片。这种所谓的 modchip 可以包含微软 ROM 的破解版本,该版本禁用了签名测试、硬盘测试和一些其他内容,或者包含一个干净的 ROM 实现,使 Xbox 具有常规 PC 的个性。尽管 Xbox Linux 提供了一个引导加载程序,使 Linux 能够在破解的微软 ROM 上运行(Linux 站点不提供,但可以在互联网上找到),但出于法律原因,建议使用 Xbox Linux 项目的干净 ROM 实现,称为 Cromwell。Cromwell ROM 不运行 Xbox 游戏。

Running Linux on the Xbox

图 3. Xbox 解剖图:飞利浦 DVD 驱动器在左侧,希捷硬盘在右侧。背景中的绿色板是一个 modchip,在本例中,它连接到计算机的并行端口。

可以从互联网上的许多视频游戏硬件商店购买替换板载 ROM 的 Modchip,价格约为 50 美元。第一代 modchip 必须焊接到与原始闪存芯片平行的 Xbox 板上,这需要大约 30 根导线。第二代 modchip 连接到 Xbox 板上的 LPC 总线,它们通常只需要九根导线。当前的 modchip 可以拧到板上,无需任何焊接。它们通常空运,并且可以完全关闭自身,因此如果您使用 Xbox Linux Clean BIOS,您仍然可以运行 Xbox 游戏。

由于原始 ROM 内容存储在 Xbox 板上的可重编程闪存芯片中,因此也可以覆盖闪存内容,以便拥有一台永久改装的机器,而无需安装任何额外的硬件设备。这可以通过安装 modchip、桥接板上的两对点以禁用闪存 IC 的写保护、运行 Linux、禁用 modchip,最后在 Linux 中运行一个名为 raincoat 的应用程序来重新编程板载闪存来完成。现在,modchip 可以永久移除,因此您可以使用一个 modchip 将大量 Xbox 转换为 Linux。

最近,一位匿名研究人员在 Electronic Arts 游戏 007 Agent Under Fire 中发现了一个可利用的漏洞。在 Xbox 论坛上的一篇文章中,他解释了如何使用修改后的保存游戏来运行 Linux 引导加载程序。通过连接板上的写保护桥,这种方法可以用于在由修改后的保存游戏启动的 Linux 实例中重新编程板载闪存,甚至无需临时安装 modchip。这是使 Xbox 兼容 Linux 的最便宜和最简单的方法。

所有这些方法仅适用于迄今为止市场上销售的 Xbox 游戏机。微软一直在改变 Xbox 的设计。当您阅读本文时,Xbox 的新主板布局可能已删除 LPC 总线或板载闪存的可重编程性。有关此主题的最新信息,请参阅 Xbox Linux 网站。

USB

拥有改装的 Xbox(带有修改后的微软 BIOS 或 Xbox Linux BIOS)意味着您可以启动 Linux 安装——但是您如何与安装程序交互呢?Xbox 确实具有 USB 连接功能;所有控制器、存储单元和 Xbox Live 耳机都是标准 USB 1.1 设备,但连接器不同。通过连接适配器,您可以连接 PC 版 Linux 支持的任何 USB 键盘、鼠标、网络摄像头、打印机或扫描仪。这些适配器在互联网上以约 10-15 美元的价格出售,但也可以轻松地自行构建。您只需要一根 Xbox 控制器延长线,它的一侧有一个插入 Xbox 的连接器,以及一个 USB 母连接器。两条电缆都包含四根不同颜色的导线;只需剪断两条电缆并将导线重新连接即可创建一个 USB 母头到 Xbox 公头适配器电缆。

Running Linux on the Xbox

图 4. 通过使用 XBox 控制器延长线和右侧的 USB 母连接器,可以轻松构建 USB 适配器电缆。您也可以购买像左侧那样的预制电缆。

控制器上的存储单元插槽是另一个 USB 端口,因此您也可以将 USB 母连接器焊接到那里。

如果您计划为 Xbox 购买 USB 键盘和鼠标,请尝试购买带有内置 USB 或 PS/2 鼠标连接器的键盘。这样,您只需要一个 Xbox 到 USB 适配器。Macintosh 键盘已被证明非常好用——而且它们也没有 Windows 键。

发行版

有了改装的 Xbox、键盘和鼠标,您现在可以选择自己构建 Xbox Linux,或者采用我们的预构建安装。目前,Xbox Linux 提供三个主要发行版:Mandrake、Debian 和 Xbox Linux Live System。后者是 Linux 的一个版本,没有 X 但有 Trolltech 的 Qtopia。它不会安装到硬盘中,并且可以使用 Xbox 控制器进行控制。它旨在让新手了解 Linux 可用的可能性。Mandrake 和 Debian 是完整发行版,安装到硬盘中。Mandrake 9.0 现在可用,9.1 即将推出。两者都基于 PC 版本的 Mandrake Linux,并且与其 RPM 软件包 100% 兼容。它们包含 GNOME、KDE 和许多流行的应用程序。Xbox 版本的 Debian 可以从 CD 启动到 X,但也可以安装到硬盘。Debian 具有较小的发布周期并且更新频率更高,因此大多数开发人员都使用它。

引导加载程序

所有不想使用预构建发行版但想自己完成一切的人,以及那些想知道它是如何工作的人,都应该看看 Xbox Linux 引导加载程序、内核和 XFree 补丁。

如前所述,Xbox Linux 可以通过 Xbox Linux Clean BIOS 启动,也可以从假装是游戏并在修改后的微软 BIOS 上启动 Linux 的未签名 .xbe 文件启动。这两个应用程序都基于相同的引导加载程序代码,该代码从 CD/DVD 或硬盘加载内核和初始 RAM 磁盘,为视频保留 4MB RAM,并将 60MB 传递给 Linux 内核。有关内核和 initrd 文件名和位置的详细信息从 linuxboot.cfg 文件中读取,在 Microsoft BIOS 的情况下,该文件必须与 .xbe 文件位于同一目录中。在 Clean BIOS 的情况下,用户可以选择从何处读取它。

内核补丁

为了使 Linux 内核在 Xbox 上工作,只需要更改一个字节——但对于完美适配的内核,您需要更多更改。Xbox 的 PCI 芯片组存在严重错误,当 Linux 尝试在启动时枚举 PCI 设备时,会导致机器崩溃。通过缩小检查的 PCI 设备编号区域,可以避免此崩溃。另一个问题是定时器频率:Xbox 系统定时器偏差约 6%,导致音乐播放速度过快,并使内核错误地报告 CPU 时钟频率。

Xbox 上的关机和重启序列处理方式不同,但通过向内核添加一些代码,它能够正确重置和关闭机器。由于在其他游戏机上经常通过先插入合法的游戏,然后快速将其替换为副本的方式来规避复制限制,因此默认情况下,如果您按下弹出按钮,Xbox 会重启。软件可以通过回复 PIC16L 芯片发送的请求(表示不要重启)来避免这种情况。内核中的另一个补丁负责处理此事。还有一些其他代码修补了 DVD 驱动器的报告,该报告声称不支持视频 DVD,但实际上支持。在 Xbox Linux 网站上,您可以下载一些知名内核版本的补丁,其中包括所有这些修改,以及对 Xbox 硬盘分区方案和 Xbox 硬盘文件系统 (FATX) 的支持。修改后的文件也可以在 Xbox Linux CVS 中找到。您必须在内核配置中启用 Xbox 支持选项。

Xbox Linux 在 VESA 帧缓冲模式下运行良好;也就是说,引导加载程序设置了一个固定的图形模式,Linux 继承了它,始终写入视频内存,但从不访问实际的视频硬件。或者,可以使用 rivafb 加速帧缓冲驱动程序的修补版本,该版本允许在运行时更改控制台视频模式。在任何情况下,您都必须在内核配置中启用帧缓冲驱动程序,因为 Xbox Linux 尚不支持文本模式。

通过对 ALSA 声音系统的最小补丁(同样可以从 Xbox Linux CVS 获得),Xbox 声音硬件可以使用 i810 驱动程序工作。您可以从 NVIDIA 网站下载的 NVIDIA nForce 卡的仅二进制网络驱动程序无需任何修改即可在 Xbox 上工作。如果您想启用弹出修复或访问主板上的 256 字节 EEPROM,则需要 SMBus 驱动程序。您可以使用 Xbox Linux CVS 中的 i2c-xbox 模块或 lm_sensors 项目中的 amd-756 模块。两者效果都一样好。

XFree86

如果您使用帧缓冲驱动程序并在配置文件中关闭 PCI 枚举,XFree 可以开箱即用。nvdrv 驱动程序的修改版本提供了运行时视频模式更改和 2D 加速(GLX 扩展)。多媒体应用程序可以将其窗口渲染到屏幕外缓冲区中,并且视频硬件在显示时将其拼接到可见屏幕中,并在硬件中对其进行缩放。驱动程序的预编译版本可用。nvdrv 是 NVIDIA 图形硬件的开源驱动程序,它不支持 3D 加速。正在努力修补可从 NVIDIA 获得的仅二进制、支持 3D 的 XFree 驱动程序。

优化应用程序

Xbox 硬件细节非常令人印象深刻,足以在 Linux 中播放 DVD 或 DivX 视频。但为了获得最佳性能,您应该尝试优化应用程序的编译以适应实际硬件。机器的 Celeron 是 Pentium III 级 CPU,它支持 686 指令集以及 MMX 和 SSE。包括 mplayer 在内的应用程序会自动检测到这一点。如果您使用 nvdrv XFree 驱动程序,您可以为视频应用程序启用 GLX 支持。例如,mplayer 在使用 nvdrv 驱动程序的 X 模式下速度最快,甚至比在帧缓冲模式下更快。此外,请记住,您应该降低硬件分辨率,而不是让应用程序缩放视频输出。在 640×480 模式下,PlayStation 模拟器 epsx 在图片缩放到 400 × 300 像素时运行良好。

Running Linux on the Xbox

图 5. 一个德国数据中心正在使用基于 Xbox 的 Domino Server,运行一个与 IBM pSeries 上的 Domino 集群环境。Xbox 是左侧的小型系统。

尽管 Xbox 仅配备 64MB RAM——通过出色的焊接技术可以扩展到 128MB——但桌面环境(如 GNOME 和 KDE)以及 OpenOffice.org 等应用程序运行良好。借助 VMware,您甚至可以在 Xbox 上使用 MS-DOS 和 Windows 95/98/NT/2000。使用最小的 X 窗口、没有桌面环境和没有窗口管理器,您可以使用高达 48MB RAM 的 Windows。

结论

凭借 PC 的通用 Linux 发行版的 1:1 端口以及在 Xbox 上运行的所有主要 Linux 应用程序,它已准备好在台式计算机、服务器或多媒体设备上使用。凭借其出色的硬件和 PC 兼容性,它不仅仅具有简单的破解价值。

资源

Running Linux on the Xbox
Michael Steil 在德国慕尼黑工业大学学习计算机科学。他于 2002 年 5 月发起 Xbox Linux 项目并一直维护至今。您可以通过他的网站 www.michael-steil.de 或通过电子邮件 mist@c64.org 与他联系。
加载 Disqus 评论