本帖最后由 deadbull 于 2017-8-16 23:49 编辑
VN7-591G-50LW抛弃传统静态dsdt使用hotpatch方式配置
几句废话:
其实之前就看过hotpatch的帖子,知道这个东西不错。但是看起来略复杂,而且想着之前的dsdt一直工作正常,懒癌发作就一直没弄。
直到前天,10.13dp4升级dp5失败,猜测跟dsdt有点关系,而且其他方式都试过未果的情况下,本着死马当作活马医的心态,就把它给折腾了。
也不知道是狗屎运,还是真的跟这个有关系,dp5的安装居然可以引导了。而且经测试各项功能都正常(显卡、亮度、屏蔽独显、USB、声卡等)。
个人觉得:这个方式感觉比折腾传统dsdt简单很多,大家可以放心开搞。
还有就是,我这个折腾可能也还存在问题,欢迎大家指出,共同学习。
好了,废话就说到这里,下面进入正题:
一、几篇教程: 为了表示对大神的敬意,把这部分放到前面来。 1、Rehabman的官方教程 https://www.tonymacx86.com/threads/guide-using-clover-to-hotpatch-acpi.200137/ https://bbs.pcbeta.com/viewthread-1745275-1-1.html 2、论坛里的几篇教程: https://bbs.pcbeta.com/viewthread-1733965-1-1.html https://bbs.pcbeta.com/viewthread-1742550-1-1.html
https://bbs.pcbeta.com/viewthread-1741377-1-1.html 这里有一篇翻译为中文的: 二、简单说说对hotpatch的理解和总结
简单说点自己的理解,也算是自己梳理一下吧。 如果不想看这里可以直接跳过看第三部分使用方法。
传统dsdt方式,是提取机器的dsdt,反编译后进行改错、编辑、打补丁,然后再次编译,最后把编译好的dsdt拿来用。 原理上来说没啥毛病,但是这个反编译和编译却是问题所在,否则为什么要排错啊。 然后,大神就提出这种方法,可以不提取dsdt,免去了反编译带来的问题。 这种方法是其实可以理解为外挂。基于clover的dsdt二进制patch也就是二进制字符替换,再配合ssdt来实现的,
我们知道,对dsdt修改,总结来说就是改名、删除、修改代码 有些dsdt简单修改,在clover里可以直接通过勾选相应FIX功能实现。 另外对于其他的改名和删除,还可以利用clover的patch功能,实现一些字符替换,直接实现对dsdt重命名和删除的修改。 但是还有一些是要修改对象和方法里的代码。这个怎么办。没关系,在上面的基础上,然后把要需改的代码放到单独的ssdt里,二进制字符替换和ssdt配合使用即可实现修改代码的操作。 更改调用时的方法名或者对象名,指向新ssdt里用新名字定义的对象或者方法,这叫重定向和替换。 直接把dsdt里的对象或方法的名字改掉,然后在ssdt里重写该对象或方法的定义,这就是重命名和替换。
上面几点对应到Rehabman的教程里,就是hotpatch的四种修改类型: 1、重命名ACPI对象(Renaming ACPI objects) 2、删除方法(Removingmethods) 3、重定向和替换(Redirectand Replace) 4、重命名和替换Rename andReplace)
(具体细节的在大神的教程里说的很清楚,我就不展开赘述了。)
这种方式免去了dsdt提取、反编译和编译的过程,从而减少了这几个过程出现的错误。 而且从方式上来说,hotpatch这种方式也比较“科学”。
三、hotpatch使用说明 上面一部分是原理,这部分说说hotpatch使用说明。 首先直接去Rehabman的官方地址下载: https://github.com/RehabMan/OS-X-Clover-Laptop-Config 其中hotpatch文件夹里就是我们需要用到的。 这里有下载好的: 下面说说这些的文件 1、config.plist 这个就是hotpatch方式下clover配置文件模板,里面有rehabman做好的补丁,在clover config助手里,需要哪个就启用哪个。如果如要配合ssdt,就把相应的ssdt编译成aml文件放到clover的patched文件夹里,并在clover配置里添加该aml的引用 2、SSDT-Config.dsl 这相当于就是hotpatch的ssdt全局变量配置,根据自己的机器架构更改里面的参数,这些全局变量定义在注释里写的很清楚。 3、其他SSDT-*.dsl 其他的SSDT-*.dsl就对应了一些dsdt补丁,一般来说,就是配合config.plist里面的补丁。
四、传统静态dsdt迁移到hotpatch配置步骤: 新方式只变动两个地方:patched文件夹和config.plist文件。其他的和之前一样。 这里为了照顾所有的人都能看懂,只讲简单操作。 迁移配置步骤: 1、把原有的clover配置,添加(注意是添加)到下载的hotpatch里自带的这个config上,最好是对比着一点点添加过来。 但是有几个地方需要修改: ACPI里的Drop Tables里不要添加之前添加的dsdt和ssdt,SSDT里也不要要勾选drop OEM。 还有就是SortedOrder里的内容也删掉。 2、删除patched文件夹里所有之前的dsdt和ssdt。如果你有用ssdtPRGen生成的ssdt,那么只留下这一个(SortedOrder里也需要留下对应的引用)。 3、在下载的hotpatch文件夹里,找到SSDT-Config.dsl,根据自己的情况打开并编辑里面的全局变量。然后编译并保存到patched文件夹 4、对于之前对dsdt的补丁,如果clover的fix功能里有,就直接用这个代替。 如果之前打的补丁没有相应fix选项。就用hotpatch来代替。 代替的方法是在新的config里,dsdtpatches里启用你需要的补丁,如果该补丁需要ssdt配合,就把下载的hotpatch文件夹里的相应ssdt编译成aml并放到clover的patched文件夹里。 补充1:有些补丁有两个参数的版本,怎么确定自己用哪个? 首先需要你有一个最早提取的dsdt,没有修改过的。 然后用iasl -l DSDT.dsl命令,生成dsdt.lst。 用记事本打开这个文件,搜索看看有没有补丁里的字符串。搜索的时候字符见要用空格隔开。 例如,补丁里是“5f505453 09”,那么在记事本里搜索就是“5f 50 54 53 09” 如果搜索不到,那么这个补丁不适合于你的dsdt。 补充2:有一个SSDT-PluginType1.aml,这个是配合变频用的,没有使用的时候cpu利用率偏高。如果没有ssdtPRGen的ssdt,haswell架构的要用上,其他架构变频要是有问题可以试试看。 。 补充3:有几个补丁,之前不太认识,查了一下是usb睡眠相关的,之前dsdt补丁没有(或者是不一样) change Method(_PTS,1,N) to ZPTS, pair withSSDT-PTSWAK.aml change Method(_WAK,1,S) to ZWAK, pair withSSDT-PTSWAK.aml change Method(XWAK,0,S) to ZWAK, pair withSSDT-XWAK.aml change Method(XSEL,0,S) to XSEZ, pair withSSDT-XSEL.aml change Method(ESEL,0,S) to ESEZ, pair withSSDT-ESEL.aml change Method(GPRW,2,N) to XPRW, pair withSSDT-GPRW.aml change LANC Method(_PRW,0,S) to Method(XPRW,0,..),pair with SSDT-LANC_PRW.aml 酌情试试看。反正我这个睡眠后usb失败,就打上这几个补丁才ok。
5、补丁工作完成以后,把所有的aml的文件名都加入到config.plist里的SortedOrder里,添加所有aml的引用。 6最后,当然就是重启看效果啦
四、我自己的配置 我这个机器是宏碁的VN7-591G-50LW。是haswell架构的,看样子好像和hotpatch配合良好。
启用的hotpatch补丁(其他补丁不做讨论):
change _OSI to XOSI, pair withSSDT-XOSI.aml change EHC1 to EH01, optionally pair withSSDT-EH01.aml change EHC2 to EH02, optionally pair withSSDT-EH02.aml change EUSB to EH01, optionally pair withSSDT-EH01.aml change USBE to EH02, optionally pair withSSDT-EH02.aml change GFX0 to IGPU, optionally pair withSSDT-IGPU.aml change B0D3 to HDAU, optionally pair withSSDT-HDAU.aml change HDAS to HDEF, optionally pair withSSDT-HDEF.aml change AZAL to HDEF, optionally pair with SSDT-HDEF.aml change HECI to IMEI, optionally pair withSSDT-IMEI.aml change MEI to IMEI, optionally pair withSSDT-IMEI.aml change Method(_PTS,1,N) to ZPTS, pair withSSDT-PTSWAK.aml change Method(_WAK,1,S) to ZWAK, pair withSSDT-PTSWAK.aml change Method(XWAK,0,S) to ZWAK, pair withSSDT-XWAK.aml change Method(XSEL,0,S) to XSEZ, pair withSSDT-XSEL.aml change Method(ESEL,0,S) to ESEZ, pair withSSDT-ESEL.aml change Method(GPRW,2,N) to XPRW, pair withSSDT-GPRW.aml change LANC Method(_PRW,0,S) to Method(XPRW,0,..),pair with SSDT-LANC_PRW.aml
patched文件夹下文件: SSDT-ssdtPGen.aml SSDT-Config.aml SSDT-Disable_DGPU.aml SSDT-EH01.aml SSDT-EH02.aml SSDT-ESEL.aml SSDT-GPRW.aml SSDT-HDAU.aml SSDT-HDEF.aml SSDT-IGPU.aml SSDT-IMEI.aml SSDT-LANC_PRW.aml SSDT-LPC.aml SSDT-PNLF.aml SSDT-PTSWAK.aml SSDT-SMBUS.aml SSDT-UPRW.aml SSDT-XHC.aml SSDT-XOSI.aml SSDT-XSEL.aml SSDT-XWAK.aml
Ssdt-config的参数配置: Name (TYPE, One) Name (HIGH, One) Name (IGPI, 0x0A260006) Name (DPTS, Zero) Name (SHUT, Zero) Name (XPEE, Zero) Name (AUDL, 0x03) Name (BKLT, Zero) Name (LMAX, Ones)
Name (FBTP, Zero) |