积分 7611 最后登录 2019-10-18 精华 1 阅读权限 205 主题 389 UID 2881599 帖子 18654 PB币 94497 威望 24 贡献 1 技术 23564 活跃 2824
求71狐狸尾巴当抱枕......外出南极洲旅游至今未归
UID 2881599 帖子 18654 PB币 94497 贡献 1 技术 23564 活跃 2824
发表于 2014-12-28 11:02:34
IP属地加拿大
| 显示全部楼层
本帖最后由 neycwby09 于 2015-1-9 16:29 编辑
======= 第四篇:细节完善与进阶 =======
前言:
个人认为,这部分才是黑果真正的开始,也是最有意思最具有挑战的部分。
没有完美,只有无限接近完美。
细节决定成败,完成声网显的驱动工作后,接下来的部分主要是 DSDT 的进一步完善与修改。
九、原始 DSDT 以及编译改错
首先,在 Windows 下使用 AIDA64 Engineer 或者 Business 版,打开 ACPI 浏览器,提取一份原始 DSDT。
重命名 acpi_dsdt.bin 为 acpi_dsdt.aml;然后回到 OS X 下,用 MaciASL 打开。
查询主板的说明文档,得知使用的是 ACPI 5.0 规范。
确保把 MaciASL 里的 iasl5 更新到 20141107 版本。
然后打开 MaciASL 的设置,修改编译属性为:ACPI 5.0 规范 (如图所示)
MaciASL 以及 iasl 新版可以到 daxuexinsheng 的帖子里下载:
https://bbs.pcbeta.com/viewthread-1495779-1-1.html
请勿使用多线程下载工具下载论坛附件!
更新完 iasl 版本后,编译这份原始的 DSDT,会返回3个错误。
请勿使用多线程下载工具下载论坛附件!
分别定位到各个错误。
请勿使用多线程下载工具下载论坛附件!
看到这个 Arg0 单独占一行,顿时感到很熟悉。
没记错的话,ACPI 4.0 里直接报 unexpected Arg0 错误。
只需删掉这个 Arg0 ,第二个和第三个错误便解决了。
具体的编译原理我还没学过也不懂,国外高人给出的原因如下:
请勿使用多线程下载工具下载论坛附件!
这样还剩下一个 ZERO 的错误,定位到出错的那行,把那一群 ZERO 全都删掉即可。
请勿使用多线程下载工具下载论坛附件!
至此,DSDT排错就完成了,保存。
十、CPU电源管理与变频
1. 加载 AppleLPC 电源管理
GA-Z97X-UD3H-BK 的 Z97 LPC 控制器的硬件ID是 0x80868cc4 ,这个ID并不在AppleLPC的原生支持ID列表内。
注意:
(1)不在原生支持的列表内,我们就需要仿冒我们的 LPC Controller 的硬件ID。
(2)与s1025xfei的再讨论如何修改DSDT来加载原生电源管理 帖子里的情况不同。
他的LPC硬件ID在原生列表里,但系统并没有加载AppleLPC驱动;
所以他需要把自己LPC的ID注入到DSDT中,供系统读取并加载驱动。
根据 Rehabman 的 Haswell LPC 补丁,把 LPC 的硬件ID仿冒成 0x80869c43。
(P.S 个人觉得应该不是千篇一律地仿冒成 0x80863a18,各个平台可能不太一样,毕竟3a18和9c43不是在同一列的ID)
DSDT里搜索 0x001F0000 或者 Device (LPCB)
加入下列代码:
Method (_DSM, 4, NotSerialized)
{
If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }
Return (Package()
{
"compatible", "pci8086,9c43",
})
} 复制代码 (备注:上述代码不调用 DTGP 函数)
或者用传统方式修改亦可:
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"device-id",
Buffer (0x04)
{
0x43, 0x9C, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
} 复制代码
编译DSDT然后保存。重启后 AppleLPC 应该会正常加载。
(2)SSDT、变频 与 X86PlatformPlugin
前言:
LPC电源管理加载完毕后,我们需要为自己的CPU生成一份合适的SSDT用于加载X86PlatformPlugin 以及让变频正常工作。
引用 toleda 的话:
The existing processor frequency/power state reporting tools (i.e., MSRDumper, HWMonitor) stopped reporting power states between idle and max non turbo. This led to an incorrect conclusion that native Mavericks power management was not working. A new tool, Intel Power Gadget, shows Mavericks power management is working as designed.
Reference:http://www.tonymacx86.com/maveri ... wer-management.html
翻译过来就是:
(对于新的处理器,从论坛数据来看Haswell处理器居多)传统的查看变频工具如 MSRDumper、HWMonitor等工具只会返回 最低频率以及非睿频的最高频率。 这让很多人以为他们的CPU电源管理没有正常工作。新的工具 —— Intel Power Gadget 以及 Pike R. Alpha 的 AppleIntelCPUPowerManagementInfo.kext(*) 可以来看变频。
脚注*:
1)Pike R. Alpha 的 AICPUPMInfo.kext 在原文没有提及,但是可以查看 Haswell CPU 的变频。
2)Pike R. Alpha 的 AICPUPMInfo.kext 在某些机器上会造成五国(比如我的机器上就没法用这个驱动),所以请谨慎使用。
了解到以上信息后,回归正题,借助 Pike R. Alpha 的 ssdtPRGen.sh 脚本来生成一份适合我们当前的CPU以及当前SMBios的SSDT。
打开终端
输入如下命令:
cd Desktop
curl -o ~/ssdtPRGen.sh https://raw.githubusercontent.com/Piker-Alpha/ssdtPRGen.sh/master/ssdtPRGen.sh
chmod +x ssdtPRGen.sh
./ssdtPRGen.sh 复制代码 分行解释下:
第一行:进入 Desktop 目录,这样Pike的脚本就下载到桌面上了,而不是 /Users/当前用户/ 下,亦方便以后使用,防止找不到下载的脚本。
第二行:从 Pike 的 Github 上下载最新版本的 ssdtPRGen.sh
第三行:修改脚本的权限,防止因权限问题而无法执行。
第四行:运行脚本
请勿使用多线程下载工具下载论坛附件!
运行后脚本会自动生成 SSDT.aml,可以在 /Users/当前用户/Library/ssdtPRGen/ 下找到生成好的 SSDT.aml
复制出来,放入 /EFI/Clover/ACPI/Patched/ 下。
同时我们还需要如下 SSDT:
标识符(table id)为 CpuPm 的 SSDT(脚本刚刚生成的就是这个(包含了P-State数据))
标识符(table id)为 Cpu0Ist 的 SSDT(注意:这里的 I 是大写的英文字母 i )
那么我们该如何找到这些SSDT,如何确认他的标识符,以及如何调用他们呢?
首先我们先把所有的SSDT提取出来
方法1) 可以使用 AIDA64 的 ACPI 浏览器提取所有 SSDT。
方法2) 在 Clover 引导界面按 F4,然后在 /EFI/Clover/ACPI/origin 下找到所有提取出来的ACPI表。
如图所示,这些是我的SSDT(SSDT.aml SSDT1~5.aml)
请勿使用多线程下载工具下载论坛附件!
OEM Table ID 后面写的就是这个 SSDT 的 Table ID
我电脑上 SSDT-1.aml 对应着 Cpu0Ist;SSDT-5.aml 对应着 CpuPm
(不过这个SSDT-5.aml是原始的,我们已经有了新的 CpuPm SSDT了,所以这个原始的我们不需要复制到 /Patched 下面)
至此,找到了需要的SSDT,接下来调用他们很简单
方法1) 把对应的 SSDT*.aml (在这里是SSDT-1.aml)复制到 /EFI/Clover/ACPI/Patched/ 下面
方法2) 设置 Clover 自动加载指定的 SSDT,如下图所示。
打开 Clover Configurator,在 ACPI 模块下找到 Drop Tables 部分。
点击+号,添加项目,选择并输入对应数据即可。
请勿使用多线程下载工具下载论坛附件!
至此,SSDT部分就完事了,重启就可以在-v里看到 X86PlatformPlugin 加载成功的字眼。
打开控制台,搜索 XCPM,看到如下日志就说明原生电源管理加载成功了
kernel[0] XCPM: registered
kernel[0] IOPPF: XCPM mode 复制代码
请勿使用多线程下载工具下载论坛附件!
至此,CPU电源管理、SSDT以及变频工作就完成了。
V1.2 Preview 更新:
i7-4790K @ 4.00GHz 基本上已解决
7档变频档位基本符合我在Haswell白果上看到的规律。
x8,x26,x40,x41,x42,x43,x44
Pike R. Alpha 的 AppleIntelCPUPowerManagementInfo.kext 的日志:
请勿使用多线程下载工具下载论坛附件!
HWMonitor 里监测到 CPU 的档位为 x26.0
请勿使用多线程下载工具下载论坛附件!
抽空将在本楼更新方法注意事项等。
P.S 本人对Haswell变频问题的看法:
感谢80F的指正,通过log来看确实只有 x8 x40 x41 x42 x43 x44 这六个档位
分别对应 800MHz 4.0GHz 4.1GHz(TB) 4.2GHz(TB) 4.3GHz(TB) 4.4GHz(TB)
查看了搭载第四代酷睿处理器的 Retina MacBook Pro、iMac、MacBook Air 的变频档位,发现也是最低,最高(非睿频)以及所有睿频档位,唯一的不同就是,白果还有个中间档位。
这个中间档位,举个例子:RMBP 13inch 2.6GHz i5,在最低档800MHz(x8)以及最高非睿频档(x26)之间存在一个中间档位1.7GHz(x17)。
也许是变频的“定义”变了。
在第一代酷睿以及SNB时代(也可能包括IVB),处理器只有最低档和最高档通常被认为变频是不正常的。
举个例子:Core i3 380M 2.53GHz 的变频会有6~8档。(我的是 x7 x9 x12 x15 x18 x19)
对于 Haswell,也许不需要那么多中间档位了吧。CPU空闲时保持最低频率就好,需要工作时,直接升到最高频率。
能正常睿频,正常在最低最高切换,而不锁定在一个单独档位上,也许这对于 Haswell 处理器的变频就是正常的吧。
以上仅为个人对 Haswell 变频的看法,欢迎各位指正。
最近超级忙,也没测试那么深,找时间再看看白果的数据以及SMBios等等。
十一、GTX970 显卡 HDMI音频输出
前言:
与10.7时代不同,麦克斯韦架构的N卡无需修改 AppleHDA 二进制文件里的 HDMI codec ID 以及 AppleHDAController 二进制文件里的 HDMI Device ID了。
只需必要的 DSDT 修改即可开启显卡的 HDMI 音频输出。
但是这中间有个小插曲,修改完DSDT后,不管改不改 HDMI codec ID 以及 HDMI Device ID,在系统偏好设置里始终不出现 HDMI 输出的选项。
后来询问 toleda 得到的回复如下:
Nvidia HDMI audio is broken with 343.02.01f01, use 343.01.02f01 or older.
No kext edits are required for Maxwell HDMI audio.
Correct dsdt edits are required, attach edited dsdt.
简言之,Nvidia 官方的 WebDriver 343.02.01f01 版本把 HDMI 音频给弄没了。
因此更换老版本的 343.01.02f01(10.10.1用)的驱动后,HDMI果然出来了。
回归正题,DSDT修改还是和以前一样,加入 Device (HDAU) 以及在显卡设备描述里加入 hda-gfx
(1)首先确定显卡位置
打开 IORegistryExplorer,搜索 display
请勿使用多线程下载工具下载论坛附件!
如图所示,显卡位置在 Device (PEG0) 下的 Device (PEGP) 里
打开DSDT,定位到 Device (PEGP) 下
在里面加入如下代码:
Device (HDAU)
{
Name (_ADR, One) // _ADR: Address
Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method
{
Local0 = Package (0x02)
{
"hda-gfx",
Buffer (0x0A)
{
"onboard-1"
}
}
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
Device (PEGP)
{
Name (_ADR, Zero) // _ADR: Address
Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method
{
Local0 = Package (0x0A)
{
"@0,connector-type",
Buffer (0x04)
{
0x00, 0x08, 0x00, 0x00
},
"@1,connector-type",
Buffer (0x04)
{
0x00, 0x08, 0x00, 0x00
},
"@2,connector-type",
Buffer (0x04)
{
0x00, 0x08, 0x00, 0x00
},
"@3,connector-type",
Buffer (0x04)
{
0x00, 0x08, 0x00, 0x00
},
"hda-gfx",
Buffer (0x0A)
{
"onboard-1"
}
}
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
} 复制代码 注意:其中 @x,connector-type 可能不是必须要加入的代码。
如果你的显卡是借助变色龙的 Graphics Enabler = Yes 或者 Clover 的 Inject Nvidia = Yes 驱动的,你可能需要加入这段代码,并且要根据你的显卡实际接口来。
下面的 @0~@3 定义了4个接口,所以在 IOReg 里也只能看到4个接口。
"@0,connector-type",
Buffer (0x04)
{
0x00, 0x08, 0x00, 0x00
},
"@1,connector-type",
Buffer (0x04)
{
0x00, 0x08, 0x00, 0x00
},
"@2,connector-type",
Buffer (0x04)
{
0x00, 0x08, 0x00, 0x00
},
"@3,connector-type",
Buffer (0x04)
{
0x00, 0x08, 0x00, 0x00
}, 复制代码
修改完 DSDT 后保存,重启即可看到 系统偏好设置 > 声音 > 输出 里有 外接显示器/电视的 HDMI 输出了。
(注意:OS X 不提供 HDMI 音频输出的控制,如控制音量,声道等。)
请勿使用多线程下载工具下载论坛附件!
至此,GTX970显卡HDMI音频输出就完成了。
十二、ALC1150声卡驱动进阶篇 —— 使用 Clover 驱动 达到升级免折腾
注意:
用 Clover 驱动声卡会牺牲显卡 HDMI 音频输出,可能是Clover的BUG或者是其他原因。
我笔记本的CX20585换Clover驱动后,A卡HDMI音频也挂掉了。进一步等待开发者大神们的回复。
之前写了一帖 适用于K52J和T410的 CX20585 AppleHDA 仿冒 Clover免替换驱动法分享 + 简要视频教程
其实修改的方法和原理都是一样。
通过分析toleda脚本以及根据以往的仿冒声卡制作知识,
修改部分大致为:
(1)AppleHDA二进制文件里的 ALC1150 Codec ID(0x10EC0900)
(2)在 AppleHDAHardwareConfigDrvier.kext 里的 Info.plist 加入对应的 ConfigData
(3)加入修改好的 Platform.xml.zlib 以及 LayoutXX.xml.zlib(Pathmap节点 & 输入输出设备设置定义)
既然toleda已经做好了节点和输入输出设置的文件(即第三部分的 Platform.xml.zlib 以及 LayoutXX.xml.zlib),
我们只需要让 Clover 修改 AppleHDA 里的 Codec ID 以及让 FakeSMC.kext 注入改好的 ConfigData 即可。
打开 Clover Configurator,定位到 Kernel and Kexts Patch 部分
加入三个条目,分别为:
(1)AppleHDA
Find:
Replace:
说明:ALC1150 的 AppleHDA codec ID 补丁
(2)AppleHDA
Find:
536F756E6420617373657274696F6E20696E202573206174206C696E652025640A002573002564 复制代码
Replace:
000000000000000000000000000000000000000000000000000000000000000000000000000000 复制代码
说明:去除控制台里的一堆 Sound Assertion at XXX 的提示
(3)AppleHDA
Find:
Replace:
说明:让 AppleHDA 读取 *.zml.zlib 而不是原版的 *.xml.zlib
设置完就是这样:
请勿使用多线程下载工具下载论坛附件!
接下来,把toleda的 ConfigData 转移到 FakeSMC.kext 里的 Info.plist 下即可。
方法详见上面提到的我的帖子。
改好后如图所示:
请勿使用多线程下载工具下载论坛附件!
最后把 toleda 改好的 Platform.xml.zlib 以及 Layout1.xml.zlib,Layout2.xml.zlib 分别重命名为:
Platform.zml.zlib,Layout1.zml.zlib,Layout2.zml.zlib。
将他们复制到原版 AppleHDA.kext/Contents/Resources 下。
至此,用 Clover 来驱动 ALC1150 声卡工作就完成了。
其他声卡方法原理一样。
展开阅读全文​
2
查看全部评分