积分 620 最后登录 2023-6-8 精华 0 阅读权限 40 主题 69 UID 2937488 帖子 1475 PB币 2164 威望 5 贡献 0 技术 34 活跃 975
UID 2937488 帖子 1475 PB币 2164 贡献 0 技术 34 活跃 975
本帖最后由 yearjinheng 于 2017-10-6 18:54 编辑
最近我为很多小伙伴做屏蔽独显hotpatch,发现有些成功,有些失败。失败其实还是停留于High macOS Sierra10.13 正式版“Window Server Service only ran for 0 seconds”的错误。今天终于找到了解决的方法!特此分享给大伙!希望该帖子能帮助到各位!
方法是老外RehabMan 发现的!
[FIX] "Window Server Service only ran for 0 seconds" with dual-GPU
【以下为教程内容以RehabMan 主导来编写的!】
在解决“Window Server Service only ran for 0 seconds”这个错误提前大伙需了解什么叫做屏蔽独显。屏蔽独显顾名思义就是把笔记本中的独显禁用掉,由于双显卡的笔记本装黑苹果大多数情况下用的是集成显卡,而独显一般不做任何处理,虽然它貌似不工作,但是它也会消耗一定的电量,使电池电量快速消耗掉。我们通常可以在笔记本BIOS禁用显卡,但是假如你想切回Windows玩游戏那么你还得把笔记本BIOS中独显开启,这样来回实在太麻烦!于是世人便想出了一个两全其美的绝招:通过APCI问题屏蔽独显!
当然了,目前N卡系列出了最新的“WebDriver-378.10.10.10.15.114.pkg”和AMD出了“WhateverGreen.kext”,使得一些苹果发烧友在笔记本上更想发挥独显的优越所在!这个另当别论!本主题主要讲如何屏蔽独显!
【屏蔽独显的方法】
第一种:直接在DSDT SSDT上做修改
第二种:通过自己手动制作一个hotpatch屏蔽独显SSDT已达到屏蔽独显的作用! 个人推荐,较为模块化!
【以下内容是Rehubman原帖翻译】
获取ACPI路径
为了使用附加的SSDT能注入所需的属性,您首先必须要获取设备的ACPI路径。如果您有ioreg(例如从一台安装好的Sierra上运行),你可以从ioreg中获取它的路径(如果有人有获取类似的ioreg文件,请附上它,好以作为这篇文章的例子)。
但您也可以通过查看提取的ACPI文件来确定它。
过程:
-使用Clover F4将本机的ACPI文件提取到ACPI /origin这个目录下
-反编译这些文件
-搜索一个名为_OFF的方法
-检查文件的结果以确定ACPI的路径
首先,我们需要研究要拆分的文件(见iasl和拆分ACPI补丁制作指南)
接下来,我们使用搜索方法定义来搜索名为_OFF的方法定义:
grep -l Method.*_OFF *.dsl
对于这些文件被搜索出来的结果:
SSDT-10.dsl
SSDT-11.dsl
现在我们已经搜索到被调用_OFF方法的文件,因为一旦找到了_OFF方法,就很容易看到_OFF方法所处的ACPI路径。
打开SSDT-10.dsl。我们在PowerResource宏中找到了_OFF方法,这不是我们想要的:
PowerResource (PC05, 0x00, 0x0000)
{
Name (_STA, One) // _STA: Status
Method (_ON, 0, Serialized) // _ON_: Power On
{
...
}
Method (_OFF, 0, Serialized) // _OFF: Power Off 复制代码
视线转移到SSDT-11.dsl,发现这个_OFF方法是我们所需要的。
Method (_OFF, 0, Serialized) // _OFF: Power Off
{
If (LEqual (CTXT, Zero))
{
\_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero)
If (LNotEqual (GPRF, One))
{
Store (VGAR, VGAB)
}
Store (One, CTXT)
}
SGOF ()
} 复制代码
如果您在所在的方法中单击,您将看到MaciASL状态栏显示ACPI路径:
这对应于所在该范围内定义该方法的代码:
Scope (\_SB.PCI0.RP05.PEGP)
{
...
Method (_OFF, 0, Serialized) // _OFF: Power Off
{
... 复制代码
现在我们已获取了路径:_SB.PCI0.RP05.PEGP,是时候创建SSDT与其相对应。
创建一个名为Spof的SSDT
参考资料中提供的原始代码:
// save as SSDT-DiscreteSpoof.aml
DefinitionBlock ("", "SSDT", 2, "hack", "spoof", 0)
{
Method(_SB.PCI0.PEG0.PEGP._DSM, 4)
{
If (!Arg2) { Return (Buffer() { 0x03 } ) }
Return (Package()
{
"name", Buffer() { "#display" },
"IOName", "#display",
"class-code", Buffer() { 0xFF, 0xFF, 0xFF, 0xFF },
})
}
} 复制代码
但我们的路径原始代码不相同,所以
// save as SSDT-DiscreteSpoof.aml
DefinitionBlock ("", "SSDT", 2, "hack", "spoof", 0)
{
Method(_SB.PCI0.RP05.PEGP._DSM, 4)
{
If (!Arg2) { Return (Buffer() { 0x03 } ) }
Return (Package()
{
"name", Buffer() { "#display" },
"IOName", "#display",
"class-code", Buffer() { 0xFF, 0xFF, 0xFF, 0xFF },
})
}
} 复制代码
我们通过MaciASL,并创建一个名为” SSDT-DiscreteSpoof.aml”的文件。选择File -> New,将代码粘贴到编辑窗口中,选择File->Save As,格式设置为: ACPI Machine Language Binary,并将文件命名为” SSDT-DiscreteSpoof.aml”保存到你容易找到的地方(例如桌面)。
然后把生成的文件放在EFI/Clover/ACPI/patched/SSDT-DiscreteSpoof.aml
Other considerations 其他注意事项
该方法是在SSDT中通过使用_DSM的方法来注入属性。如果您本地的ACPI在该路径上存有一个现有的_DSM方法,您将需要重命名它,否则本地的_DSM方法会与SSDT添加的_DSM方法相冲突。一般情况下,通过对Config.plist二进制补丁_DSM -> XDSM来完成对/ACPI/DSDT/Patches补丁处理。这个补丁已在我的配置文件里,但它处于禁用状态。
这是通过Xcode打开后的样子,为启用状态:
另外,如果您在Config.plist中使用了SortedOrder(通常Clover安装后默认没有设置),你需要在其内添加SSDT-DiscreteSpoof.aml项。如果指定了SortedOrder,则Clover只加载其中指定的SSDT。如果没有出现在列表中,即使在ACPI/patched中,它也不会加载。
教程陆续更新!尽情关注 屏蔽独显可福利啦-可帮大伙屏蔽独显 | https://bbs.pcbeta.com/forum.php?mod=viewthread&tid=1758942
展开阅读全文​