使用ssdtPRGen.sh生成处理器变频配置SSDT.aml

2020-04-04 / 1.73w / 教程 / 4.48k / 13分钟

写在前面

本文最后更新时间:2020年4月28日

本文主要讲解如何使用 ssdtPRGen.sh 生成处理器变频数据,合并 CPUFriend.kext 生成的电源管理数据。但只有你的黑果变频不正常才需要进行生成,如果正常则不需要。操作略为复杂,新手请务必看仔细,过程中如果出错请务必检查细节操作并多重试,如有问题请留言。

大部分情况下,只有第五代以及更早的酷睿,以及早期特殊型号的Xeon,还有赛扬、奔腾等苹果从未使用过的处理器可能会存在无法变频问题。如果你使用了合适的 SMBIOS ID 并且是常见的较新的酷睿处理器,一般不会存在变频问题。而不同的机型ID也会使同一个CPU的变频数据不同。例如,i9-9900k 在 iMac19,1 机型中,默认变频范围一般是 1.3GHz — 5.0GHz,但在 MacPro7,1 中是 2.0GHz — 5.0GHz。

长期使用不正确的变频数据可能会损坏你的电脑,风险自担。最后,如果本文未能解决您的问题,请见谅。

 

准备工作
  • CPUFriend.kext 生成的 ssdt-data.dsl 文件
  • ssdtPRGen.sh,添加了 Coffee Lake 家族数据;
  • MaciASL.app,用于生成的 dsl/aml 文件编辑和排错;
  • AppleIntelInfo.kext,输出 CPU 的 P-States;
  • IORegistryExplorer.app,用于查看 CPU 的状态和数据,非必须;
  • 代码编辑器,如 Visual Studio Code 或 Sublime Text(非必须)
超级会员免费 永久超级会员免费

已有148人查看

 

检查变频状态

首先使用 Intel Power Gadget 观察变频情况,如果频率(Frequency)显示一条很稳定的线,并且温度和功耗很高,那代表变频有问题;如果上下起伏,代表频率在不断变化,可运行几个软件进一步观察。

如果你的CPU频率即使在待机时也类似下图,那代表变频有问题:

还可以核查是否已加载 X86PlatformPlugin 和 X86PlatformShim,运行终端(不知道什么是终端的百度一下)命令:

kextstat | grep -y x86plat

如果正常,应该会返回 X86PlatformPlugin 和 X86PlatformShim 的加载信息,如图:

或到  图标 → 关于本机 → 系统报告 → 软件 → 功能扩展检查加载状态

已载入那一栏,显示为“是”即代表是正常的。下一步验证现有变频数据是否加载,终端命令:

sysctl -n machdep.xcpm.vectors_loaded_count

如果是正常情况,应该返回1。同时,也可以使用 IORegistryExplorer 查看 CPU 的 [email protected] 下的 Plugin-Type 状态,如果是 0x1 则代表正常:

可以在 X86PlatformPlugin 看到变频数据(在Skylake家族以后,CPU状态显示为[email protected]形式,之前为[email protected]形式),如图:

最后,如果你的 CPU 变频不正常的话,需要检查CPU的 P-States。把 AppleIntelInfo.kext 解压到到桌面,打开终端,运行以下命令:

sudo kextutil ~/Desktop/AppleIntelInfo.kext

然后系统会提示输入登陆密码。如果出现类似“Code Signing Failure: not code signed”的提示,是权限问题,使用以下两个命令解决(可直接复制运行):

sudo chown -R root:wheel ~/Desktop/AppleIntelInfo.kext

第二个:

sudo chmod -R 755 ~/Desktop/AppleIntelInfo.kext

然后回到第一步命令,完成后可能依旧提示“Code Signing Failure: not code signed”,但其实已经在 /tmp 目录生成了文件,可以使用 Visual Studio Code 打开,或使用下面这个命令在终端输出内容:

sudo cat /tmp/AppleIntelInfo.dat

案例输出内容:

图中所示 8-50 的数字,指的是 CPU 的 Multiplier(倍频),例如本文案例 i9-9900k,外频是 100MHz,8x的倍频就是 800MHz,50x的倍频是 5000MHz,也就是 5.0GHz,也就是说理论上这个CPU应该实现0.8GHz—5.0GHz的频率变化。「注意」部分特定型号处理器,尤其是 Xeon,外频可能是 133MHz,请在英特尔官网查询确认

如果仅显示一个或几个倍频(以20或25最常见),或显示了很多倍频但却不工作,那就可以考虑阅读下一步生成变频数据(在此之前务必确认使用了合适的SMBIOS ID)。

 

自动生成变频数据

把 ssdtPRGen.sh-Beta 解压到桌面(直接把 ssdtPRGen.sh 放到桌面),然后打开终端,输入:

chmod +x ~/desktop/ssdtPRGen.sh

这一步是给予 sh 脚本运行权限。然后输入:

sudo ~/ssdtPRGen.sh

这一步是创建运行环境。接下来,我们可以通过以下命令简单生成 ssdt:

~/ssdtPRGen.sh -p 'i7-4790K'

比Kaby-lake 家族(第七代酷睿)更新的 CPU 可能会提示失败,不要紧,先往下看。在访达按下 Command + Shift + G,跳转到以下目录:

~/Library/ssdtPRGen/

你会发现这个目录里有一套 ssdtPRGen.sh 下载的配置文件。如果上一步你成功生成了 ssdt.aml,会在在这个目录看到生成的 ssdt 文件,见图:

接下来还需要编译 ssdt.dsl,请继续看手动生成模式后半部分。

 

手动生成变频数据

该脚本支持指定参数生成,下面是一个基本功能表(也可以使用 -h 参数查看):

参数缩写功能说明备注
-acpi-aProcessor name
example: CPU0, C000
指定第N个处理器
默认第一个是CPU0
-bclk frequency-bclkbase clock frequency处理器外频频率
一般是100
-board-id-bexample: Mac-F60DEB81FF30ACF6Board-ID,生成三码就有了
可以参考这里
-cpu type [0/1/2/3]-c 0/1/2/30 = Sandy Bridge
1 = Ivy Bridge
2 = Haswell
3 = Broadwell
如果你的都不是,不要指定
-debug output [0/1/3]-d 0/1/30 = no debug injection/debug output
1 = inject debug statements in: ssdt.dsl
2 = show debug output
3 = both
debug 输出,需要时使用
-frequency-fclock frequency处理器基础频率
-help info-hthis help帮助说明
-lfmode-lfmlowest idle frequency空闲最低频率
-logical processors-llogical processors逻辑处理器数量
4核8线程应填8
-model-mmodels, example: MacPro6,1SMBIOS ID,例如MacPro6,1
-open the previously generated SSDT-oopen the previously generated SSDT打开之前生成的ssdt
一般不用
-processor model-pcpu model, example: 'E3-1285L v3'cpu型号,例如 i9-9900k
-show supported board-id and model combinations-sBroadwell
Haswell
Ivy Bridge
Sandy Bridge
显示支持的board-id和cpu型号组合
一般不用
-turbo maximum-turboturbo frequency
6300 for Sandy Bridge and Ivy Bridge
8000 for Haswell and Broadwell
处理器最大睿频频率
Sandy-B和Ivy-B需要填6300
Haswell和Broadwell需要填8000
-tdp-ttdp design处理器热设计功耗
-workarounds for Ivy Bridge-w 0/1/2/30 = no workarounds
1 = inject extra (turbo) P-State
at the top with maximum
(turbo) frequency + 1 MHz
2 = inject extra P-States at the bottom
3 = both
Ivy Bridge特殊调整
-xcpm mode-x 0/1

0 = XCPM disabled
1 = XCPM enabled

是否开启XCPM
默认开启

其中,内核的电源管理模式仅支持 IvyBridge、Haswell、Broadwell 家族处理器。下面以 Haswell 的 i7-4790K 举例:

参数实际值应用参数备注
名称i7-4790K-a CPU0大小写敏感
基础外频100MHz-bclk 100处理器外频
机型的Board-IDMac-42FD25EABCABB274-b Mac-42FD25EABCABB274三码附带生成
处理器家族Haswell-c 2
排错参数debug参数-d 3可选0/1/2/3
基础频率4000MHz-f 40004.0GHz = 4000MHz
空闲最低频率800MHz-lfm 800
逻辑处理器数量4核8线程-l 8填线程总数
机型IDiMac15,1-m iMac15,1注意英文逗号
处理器型号i7-4790K-p i7-4790K注意大小写敏感
最大睿频频率4400MHz-turbo 44004.4GHz = 4400MHz
热设计功耗88瓦-t 88
XCPM模式-xcpm 1Haswell可开启

把以上参数全部组合起来,输入到终端:

~/ssdtPRGen.sh -a CPU0 -bclk 100 -b Mac-42FD25EABCABB274 -c 2 -d 3 -f 4000 -lfm 800 -l 8 -m iMac15,1 -p i7-4790K -turbo 4400 -t 88 -xcpm 1

如果看到类似“Permission Denied”的提示,打开 root 权限:

sudo -s

如果你还没有获取 root 权限,请百度一下如何获取。

下面是成功示例(点击放大):

这个时候,可以在 ~/Library/ssdtPRGen/ 目录看到生成的文件:

接下来,把 ssdt.dsl 复制一份到桌面,然后使用 MaciASL.app 打开生成的 ssdt.dsl 文件:

按下 Command + F 打开搜索,搜索关键词:plugin-type(只有1个结果):

把用 CPUFriend.kext 生成的 ssdt-data.dsl 拿出来,使用 Visual Studio Code 或类似的代码编辑器打开(也可以使用 MaciASL.app),复制以下内容,如图所示:

超级会员免费 永久超级会员免费

已有148人查看

然后,把完成的文件导出,见图:

改为大写 SSDT.aml,并选择保存到桌面,然后选择 ACPI Machine Language Binary,完成。

最后,把生成的 SSDT.aml 放到 /EFI/Clover/ACPI/Patched(Clover方式),或者 /EFI/OC/ACPI(OpenCore方式),重启生效。

可以使用 Intel Power Gadget 查看变频情况:

 

不被支持的处理器

目前脚本作者因为个人时间的关系,仅更新到第七代酷睿,停更了很久,不过该脚本可以手动添加CPU型号,笔者已经手动添加了 Coffee Lake 家族的型号代码(含第8/9代酷睿、奔腾G、赛扬G),在本站下载到的版本是带有这些型号的。但从测试生成结果来看仍然有错误提示,推测其核心程序仍要处理一些额外的机型数据,而这部分并不是开源的,无从知晓。

超级会员免费 永久超级会员免费

已有148人查看

完成后,你就可以通过使用 -p 参数+名称的方式生成,也可以手动指定各项参数。

 

如有错误,欢迎指正。

 

0. 本站所有资源解压密码均为 heipg.cn
1. 本站资源收集于网络,仅做学习和交流使用,请于下载后24小时内删除。如果你喜欢我们推荐的软件,请购买正版支持作者。
2. 如有无法下载的链接,请及时邮箱[email protected],或到QQ群进行反馈,我们将及时进行处理。
3. 本站发布的内容若侵犯到您的权益,请联系站长删除,联系方式:[email protected],我们将第一时间配合处理!
扫描QQ二维码加入【黑苹果星球交流群】

黑苹果星球 » 使用ssdtPRGen.sh生成处理器变频配置SSDT.aml

3 评论

  1. 命令是不是明显出现错误了啊?比如:第一步授权是在桌面上的脚本,第二步又是在home目录!??

    1. 运行桌面上的脚本,生成的文件在另一个目录哦

  2. 这个厉害了,好好研究下

发表评论