DistroHopper39B/NTATV

The NTATV Project:将 Windows NT (Windows XP, Windows 2003, ReactOS) 带到初代 Apple TV。由 DistroHopper39B (YouTube: @DistrosProjects, Mastodon: @distrohopper39b) 创建,并得到了一些 ReactOS 开发者的帮助 (见 Credits)。

NTATV Logo

想在你的 Apple TV 上运行它吗?阅读 Guide

想学习我是如何做到这一点的吗?阅读 Write-Up

状态

Windows XP 和 2003 现在已经可以在初代 Apple TV 上启动了!经过 2 年的工作,已经有足够的驱动程序可以让这两个操作系统进入桌面。然而,由于 HAL 问题,ReactOS 尚不可用。你可以进入桌面,但是没有 PCI 或 USB 功能。

| 操作系统 | Kernel | PCI | USB | 基本视频 | 加速视频 | 以太网 | WiFi | RCA 音频 | 光纤音频 | HDMI 音频 | 遥控器 | 重启/关机 | | ------------------ | ------ | ------- | ------- | -------- | -------- | -------- | ------- | -------- | -------- | --------- | ------ | -------- | | Windows XP | 工作中 | 工作中 | 工作中 | 工作中 | Working*** | 工作中 | 工作中 | 部分工作中** | 工作中 | 损坏 | 工作中 | 损坏 | | Windows Server 2003 | 工作中 | 工作中 | 工作中 | 工作中 | 未测试 | 工作中 | 未测试 | 未测试 | 未测试 | 损坏 | 未测试 | 损坏 | | ReactOS | 工作中 | 损坏 | 损坏 | 工作中 | 损坏 | 损坏 | 损坏 | 损坏 | 损坏 | 损坏 | 损坏 | 损坏 |

* Non-working PCI prevents all of these from working. ** Audio plays, but at an extremely low volume. *** Later versions of the driver do not work; seeGuide

那些可能永远无法工作的事情

HDMI 音频

Apple TV 在 HDMI 音频方面使用了一种非常奇怪的配置,即 Intel 芯片组,而不是 NVIDIA 显卡,负责 HDMI 端口上的音频。来自 GMA 950 驱动程序的 Intel HDMI 音频驱动程序将安装,但不会显示任何设备。为了使其工作,我需要完全重写 Intel HDMI 音频驱动程序以支持 Apple TV,这可能会非常复杂。如果有人想做这项工作,请告诉我。

NTVDM

Windows XP 上的 NTVDM 需要一些旧版 BIOS 功能(可能是扩展的 BIOS 数据区和 GPU 的旧版 VGA 功能),因此无法工作。只需使用 DOSBox 或 winevdm/otvdm 来运行 DOS/早期 Windows 应用程序。

已知问题

背景

自从 2018 年或 2019 年我观看了 The 8-Bit Guy 的视频 "Hacking the Apple TV 1st Generation" 以来,我就对初代 Apple TV 感到着迷。我一直想知道它是否有可能运行 Windows XP,但真正开始尝试是受到了 Michael MJD 的这个视频 的启发。 很快之后,我就开始了破解我的 Apple TV,经过 700 多天的断断续续的工作,Windows XP 终于可以运行了!

为什么这如此复杂

虽然 Apple TV 使用标准的 x86 CPU 甚至是 IDE 硬盘,但其固件与标准 Windows XP 不兼容。Windows XP 需要旧版 BIOS 固件,而 Apple TV 仅支持 EFI。不仅如此,Apple TV 的 EFI 实现方式也很_奇怪_ - 它只能启动一个 EFI 可执行文件,即 Apple 官方的 boot.efi。然而,黑客很快意识到 Apple TV 对启动过程中下一阶段的验证为零,即 Mac OS X 内核文件。在 Apple TV 发布三周内,Linux 通过一个自定义加载程序启动,该加载程序将 Linux 内核嵌入到静态链接的 Mach-O 可执行文件中,与 Linux 内核使用的类型相同。使用这个概念,我们可以在硬件上启动,嗯,任何东西!

然而,让 Windows 在非标准硬件上运行比 Linux 困难得多。首先,它是专有的 - 当 Apple TV 的第一个 Linux 支持在 2007 年开发时,由于 Linux 当时对 EFI 的支持很少,因此安装 Linux 过去需要大量的 kernel 补丁。启动 Windows 也比启动 Linux 复杂得多;虽然 Linux 引导加载程序可能只包含几个总共不到 5000 行代码的文件,但启动 Windows 涉及解析注册表并单独加载数十个驱动程序。值得庆幸的是,我不需要这样做。通过创建 Apple TV 版本的 ReactOS 极其可移植的引导加载程序 FreeLoader,我能够成功启动 ReactOS 和 Windows 的内核。

在此基础上取得任何进展都需要让视频驱动程序工作。感谢一些用于 ReactOS 的 alpha 阶段 UEFI 视频驱动程序,我能够在该操作系统上进入桌面;Windows 花费了更多的精力,我在我的 write-up 中详细介绍了这一点。

我的自定义 FreeLoader 端口和图形驱动程序的源代码位于 here。我希望最终能将其上游到 ReactOS 中。

Credits

如果我使用了您的代码或想法并且您想要署名,请提出 issue。

源代码 & 构建说明

我的 FreeLoader 端口的源代码位于 https://github.com/DistroHopper39B/reactos/tree/AppleTV-Desktop。要构建它:

mach_kernel 将位于 output-MinGW-i386/boot/freeldr/freeldr/mach_kernel

更新日志

v0.2

v0.1.1

修复了早期视频驱动程序导致某些分辨率下启动标志损坏的问题

v0.1

首次发布!