OS X WindowServer:实际mac

时间:2017-10-03 01:25:27

标签: macos darwin kernel-extension xnu

我有一台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

并开始工作。我添加了相关信息,最后编译了一个内核和Mavericks启动。 (当然在编辑PlatformSupport.plist并将我的board-id列入白名单后)mavericks-on-mba2017

然而,几乎一切都不起作用。键盘背光工作,Broadcom bcm4360工作,就是这样。键盘和触控板是spi,在简单地从10.10.3(第一个操作系统包括它们)复制相关的kexts(applehsspihidriver等)并加载它们之后,键盘和触控板就好像它们是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(优胜美地)中追踪相关代码到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或类似的东西来手动启用对我的设备的支持。谢谢。

1 个答案:

答案 0 :(得分:0)

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

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

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

在10.11和更新的时候当然还有一个Metal,但这对小牛队没有帮助。

您可以通过以root身份打开Activity Monitor并检查WindowServer进程的“打开文件和端口”来检查它们是否已加载。如果没有,那可能就是你的问题所在。当然,有很多可能的原因导致插件可能无法加载。最明显且易于修复的是,如果您没有复制用户空间驱动程序包。然后是构建它的部署目标 - 必要时可以绕过它。当然,他们可能会在10.9和10.10之间更改WindowServer&lt; - &gt; GL插件接口,在这种情况下,您可能会遇到困难。