NTATV:将 Windows NT (Windows XP, Windows 2003) 带到初代 Apple TV
DistroHopper39B/NTATV
The NTATV Project:将 Windows NT (Windows XP, Windows 2003, ReactOS) 带到初代 Apple TV。由 DistroHopper39B (YouTube: @DistrosProjects, Mastodon: @distrohopper39b) 创建,并得到了一些 ReactOS 开发者的帮助 (见 Credits)。
想在你的 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 应用程序。
已知问题
- 安装 NVIDIA 驱动程序后,如果显示器进入待机状态,则需要拔下并重新插入 HDMI 电缆才能获得画面。为了避免此问题,请在电源选项控制面板中将“关闭监视器”设置为“从不”。
- 分量视频在使用 NVIDIA 驱动程序时无法正常工作。显然,只显示蓝色分量通道,并且尝试同时使用 HDMI 和分量视频会破坏系统。
- 当使用非英语版本的 Windows XP 时,FreeLoader NTFS 驱动程序在安装驱动程序后无法读取硬盘。使用 FAT32 用于非英语 Windows。请参阅 #9。
- 在 FreeLoader 的某些分辨率下,屏幕底部有一行损坏的字符。这会在 Windows kernel 开始加载后消失,并且不会影响桌面。
- RDP 连接失败,原因可能与 NVIDIA 驱动程序有关。
背景
自从 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
- Justin Miller (The_DarkFire_) 和 Hermès Bélusca-Maïto,感谢他们对 ReactOS UEFI 视频和引导加载程序的支持(以及在这个项目中提供的巨大帮助)。
- Edgar (gimli) Hucek, MythicBeasts 的 James McKenzie, Scott Davilla, 和 Dmitri (loop333),感谢他们对 Apple TV Linux 所做的工作。
- Christoph Cantillon 和 Peter Korsgaard 的 atvclient,感谢他们提供的遥控器和前 LED 驱动程序。
如果我使用了您的代码或想法并且您想要署名,请提出 issue。
源代码 & 构建说明
我的 FreeLoader 端口的源代码位于 https://github.com/DistroHopper39B/reactos/tree/AppleTV-Desktop。要构建它:
- 安装 RosBE(在 LINUX 上,不要使用 PPA,它已过时。)
- 运行 RosBE(在 Linux 上,它位于
/usr/local/RosBE/RosBE.sh
) - 克隆我的存储库:
git clone https://github.com/DistroHopper39B/reactos -b AppleTV-Desktop
cd
到存储库- 运行
./configure.sh -DSARCH=appletv && cd output-MinGW-i386
- 运行
ninja freeldr
mach_kernel
将位于 output-MinGW-i386/boot/freeldr/freeldr/mach_kernel
。
更新日志
v0.2
- NTATV 的 FreeLoader 现在与 ReactOS 的 FreeLoader (version 3.2) 同步!
- IDE 驱动程序问题已解决(理论上),Apple TV 现在应该可以从任何 IDE 驱动器启动,包括 IDE 到 SATA 适配器和 SSD,没有任何问题。
- 新的预构建镜像增加了对 NVIDIA 驱动程序的支持,开箱即用
v0.1.1
修复了早期视频驱动程序导致某些分辨率下启动标志损坏的问题
v0.1
首次发布!