0

我有一台 Macbook Air 13"(2017 型号,基本 1.8Ghz),我想看看我是否可以在上面运行 Mavericks。2017 型号与 2015 相同,但升级了处理器和不同的 Board-ID (Mac-937CB26E2E02BB01) . 它的 Board-ID 直到 Sierra 10.12.4 或其他版本才被列入白名单。我可以追溯到 10.10.3 (增加了对 2015 macbook airs 的支持)并仅使用 platformsupport.plist 补丁即可运行完全支持,但我想要更进一步。请记住,Yosemite 和 Mavericks 在架构方面非常相似(很少更改内核功能)AppleIntelBDWGraphics 是 Broadwell Intel HD 6000 的驱动程序。

它有一个 Broadwell 芯片,当然 10.9.5 内核没有将它列入白名单,因此它会拒绝启动。使用这篇有用的帖子 ( https://pikeralpha.wordpress.com/2013/06/11/xnu-10-8-3-haswell-compatibility/ ),我找到了需要编辑的文件以添加对 Broadwell 的支持。我从这里下载了 OS X xnu 源代码:opensource.apple.com/tarballs/xnu/xnu-2422.115.4.tar.gz

并开始工作。自己加了相关资料,终于编译了内核,小牛开机了。(当然在编辑 PlatformSupport.plist 并将我的 board-id 列入白名单之后)mavericks-on-mba2017

然而,几乎一切都没有奏效。键盘背光有效,Broadcom bcm4360 有效,仅此而已。键盘和触控板是 spi,在简单地从 10.10.3(包含它们的第一个操作系统)复制相关的 kext(applehsspihidriver 等)并 kext 加载它们之后,键盘和触控板就好像它们是 Mavericks 原生的一样工作。但是,AppleIntelBDWGraphics 和相关驱动程序不起作用。(也从 10.10.3 中提取)AppleIntelBDWGraphicsFramebuffer 确实加载了,这给了我 CI (CoreImage) 支持,但不是广受欢迎的半透明菜单栏(与 Quartz Extreme 相关),所以我开始工作了。只是立即调用 kextutil 就给了我出了什么问题:

$ sudo kextutil AppleIntelBDWGraphics.kext
Diagnostics for /System/Library/Extensions/AppleIntelBDWGraphics.kext:
Code Signing Failure: code signature is invalid
WARNING - Invalid signature -67061 0xFFFFFFFFFFFEFA0B for kext "/System/Library/Extensions/AppleIntelBDWGraphics.kext"
(kernel) kxld[com.apple.driver.AppleIntelBDWGraphics]: The following symbols are unresolved for this kext:
(kernel) kxld[com.apple.driver.AppleIntelBDWGraphics]:  _IOLockWakeup_darwin14
(kernel) kxld[com.apple.driver.AppleIntelBDWGraphics]:  _gpu_accumulate_time
(kernel) kxld[com.apple.driver.AppleIntelBDWGraphics]:  _gpu_describe
(kernel) Can't load kext com.apple.driver.AppleIntelBDWGraphics - link failed.

我可以轻松修复 IOLockWakeup_darwin14,因为快速的谷歌搜索证实了我的怀疑,即 IOLockWakeup 是相同的,并且截断 darwin14 不会造成任何伤害。我对可执行文件进行了十六进制编辑,这将我未解析的符号减少到仅 _gpu_accumulate_time 和 _gpu_describe。在回到源代码并在 Darwin 14.0.0 (Yosemite) 中追踪到 osfmk/kern/energy_perf.c 的相关代码后,我煞费苦心地复制了所有必要的文件来解决这两个符号,然后手动纠正了编译器错误。一旦内核(最终)编译完成,我立即对其进行了测试,并且确实在加载 kext 时解析了符号:

$ sudo kextutil AppleIntelBDWGraphics.kext
Diagnostics for /System/Library/Extensions/AppleIntelBDWGraphics.kext:
Code Signing Failure: code signature is invalid
WARNING - Invalid signature -67061 0xFFFFFFFFFFFEFA0B for kext "/System/Library/Extensions/AppleIntelBDWGraphics.kext"

$ kextstat | grep AppleIntel
   14    0 0xffffff7f808e7000 0x2b000    0x2b000    com.apple.driver.AppleIntelCPUPowerManagement (217.92.1) <7 6 5 4 3 1>
   24    0 0xffffff7f809a3000 0x3000     0x3000     com.apple.driver.AppleIntelCPUPowerManagementClient (217.92.1) <7 6 5 4 3 1>
   36    1 0xffffff7f80a58000 0x8000     0x8000     com.apple.driver.AppleIntelLpssDmac (2.0.57) <11 10 5 4 3>
   37    1 0xffffff7f80a60000 0xa000     0xa000     com.apple.driver.AppleIntelLpssGspi (2.0.57) <11 10 7 5 4 3>
   43    1 0xffffff7f80b28000 0x14000    0x14000    com.apple.driver.AppleIntelLpssSpiController (2.0.57) <37 36 10 5 4 3>
   78    0 0xffffff7f81248000 0x54000    0x54000    com.apple.driver.AppleIntelBDWGraphicsFramebuffer (10.0.6) <77 76 75 18 11 10 7 6 5 4 3 1>
  111    0 0xffffff7f81689000 0x79000    0x79000    com.apple.driver.AppleIntelBDWGraphics (10.0.6) <110 76 75 11 7 6 5 4 3 1>

我不会详细介绍我在源代码中如何以及编辑了哪些文件,因为仍然存在一个问题:QE(Quartz Extreme)在 GUI 中仍然不起作用。快速检查 Console.app 揭示了原因:

10/2/17 9:19:36.687 PM WindowServer[523]: _CGXGLDisplayContextForDisplayDevice: No matching context for device (0x7ff91241e030) - disabling OpenGL

另一个谷歌搜索没有发现任何有用的信息。所有链接都与简单地使消息静音有关,并且它们与那些显然没有为它们编写 QE/CI 驱动程序的 USB DisplayLink 监视器有关。但是,我正在使用带有已加载 kext 的受支持图形卡,我想看看是否可以对 WindowServer 或类似的东西进行二进制补丁以手动启用对我的设备的支持。谢谢你。

4

1 回答 1

0

我不知道你想要做什么甚至可以在合理的努力下实现。我将假设您有一个很好的理由说明使用虚拟机、旧硬件、在 Thunderbolt 机箱中使用支持 Mavericks 的 GPU 等更明显的解决方案不会这样做……</p>

不过要检查的一件事是是否加载了适当的 WindowServer 插件。为了加速工作,还需要将驱动程序的用户空间部分加载到任何使用它的进程中,包括 WindowServer。对于 Broadwell,这应该是

/System/Library/Extensions/IOAccelerator2D.plugin/Contents/MacOS/IOAccelerator2D
/System/Library/Extensions/AppleIntelBDWGraphicsGLDriver.bundle/Contents/MacOS/AppleIntelBDWGraphicsGLDriver

在 10.11 和更新版本中,当然还有 Metal 版本,但这对 Mavericks 没有帮助。

您可以通过以 root 身份打开活动监视器并检查 WindowServer 进程的“打开文件和端口”来检查它们是否已加载。如果不是,那很可能是您的问题所在。当然,插件无法加载的原因有很多。最明显和最容易修复的一个是如果您没有复制用户空间驱动程序包。然后是构建它的部署目标 - 如果需要,可能可以绕过它。当然,他们有可能在 10.9 和 10.10 之间更改了 WindowServer<->GL 插件接口,在这种情况下,您可能会遇到麻烦。

于 2017-10-03T11:29:14.383 回答