我有一台 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 或类似的东西进行二进制补丁以手动启用对我的设备的支持。谢谢你。