【教程】加载AppleBacklightInjector.kext来驱动笔记本背光
简介此教程来源https://www.tonymacx86.com/threads/guide-laptop-backlight-control-using-applebacklightinjector-kext.218222/,感谢Rehabman的无私奉献。本帖大部分是翻译上述链接的内容,另加上本人的小修改。最近看到很多人的笔记本有这样那样的背光问题,而且现有的教程贴大多数是过时的或者不完善的,遂写此贴。
注意:仅支持系统版本10.12.4+,这篇教程还简要讲述了如何驱动原生亮度热键,如果有时间我也会翻译整理好。
这篇教程是由Rehabman根据他的另一篇教程https://www.tonymacx86.com/threads/native-brightness-working-without-blinkscreen-using-patched-applebacklight-kext.121031/简化而来。原教程略显复杂,这篇教程简单易懂一些,包括以下三个内容来达到驱动背光的目的:
- 一份做好的AppleBacklightInjector.kext
- 在config.plist/KernelAndKextPatches/KextsToPatch里给AppleBacklight打补丁
- SSDT-PNLF.aml,用来激活AppleBacklight驱动
- SSDT-ALS0.aml,用来空加载环境光感应让亮度保存更完美。
要求
这篇教程仅支持英特尔显卡笔记本
这篇教程支持的CPU类型有Arrandale, Sandy Bridge, Ivy Bridge, Haswell, Broadwell, Skylake和Kaby Lake
准备
下载目前最新的SSDT-PNLF.aml, AppleBacklightInjector.kext, 和 config_patches.plist,我已经打包好放在帖子底部了。
安装
驱动屏幕背光需要这三个步骤:
- 放置SSDT-PNLF.aml 进 ACPI/patched
- 在config.plist/KernelAndKextPatches/KextsToPatch给AppleBacklight打补丁
- 放置AppleBacklightInjector.kext到/L/E或CLOVER/kexts/Other(二者选其一)
注意:Rehabman对/L/E(/资源库/Extensions)有一种莫名的执念,他的教程全部推荐把驱动装进这个目录,经测试发现把驱动装在/L/E或者CLOVER/kexts/Other效果是一样的。如果“config.plist - System Parameters - Inject Kexts”里是Detect或者No, 那么驱动需要装进/L/E。如果是Yes,驱动需要装进CLOVER/kexts/Other
注意:如果你已经对SSDT/DSDT打过"Brightness"补丁(PNLF),你需要移除他们!如果你在使用Clover的AddPNLF_1000000,也需要移除。
再次注意:SSDT-PNLF.aml基于GFX0(或者VID在Thinkpads上)已经被重命名为IGPU。亮度控制不会运行如果你的IGPU方法不位于_SB.PCI0.IGPU。
解压包,得到SSDT-PNLF.aml, 复制/替换到EFI/Clover/ACPI/patched。如果你的SSDT是以数字排列的,就把SSDT-PNLF.aml加进去,并且确保SSDT-PNLF.aml加载顺序位于OEM SSDTs之后。
解压包,得到config_patches.plist,把里面comment是"change F%uT%04x to F%uTxxxx in AppleBacklightInjector.kext (credit RehabMan)"的补丁复制进你自己config里面。最好用文本编辑器或者Xcode,不推荐用Clover Configurator。
解压包,复制AppleBacklightInjector.kext到/L/E或者CLOVER/kexts/Other
我觉得我不用提到这一点,但以防万一:你需要移除 IntelBacklight.kext 或者 ACPIBacklight.kext如果你之前装过的话。
装完这一切后第一次重启可能不会生效,因为有缓存。这时候运行Kext Utility或者别的可靠软件来重建系统缓存,然后再次重启生效。
定制
在一些特别的情况下,你可能希望调整PWMMax值来匹配你的显卡。尤其是当你的ig-platform-id不那么普遍,而且这个id采用与众不同的PWMMax值。
一个符合这个情况的例子就是Haswell的 ig-platform-id 是 0xa2e0008,采用了 0x56c而不是 0xa260006用的 0xad9。
这个情况下你需要提供一个默认LMAX值,因为PWMMax不匹配你的ig-platform-id。
也可以通过修改
// LMAX: Backlight PWM MAX.Must match framebuffer in use.
//
// Ones: Default will be used (0x710 for Ivy/Sandy, 0xad9 for Haswell/Broadwell)
// Other values: must match framebuffer
Name(LMAX, Ones)变成:// LMAX: Backlight PWM MAX.Must match framebuffer in use.
//
// Ones: Default will be used (0x710 for Ivy/Sandy, 0xad9 for Haswell/Broadwell)
// Other values: must match framebuffer
Name(LMAX, 0x56c)
重启后亮度保存
AppleBacklight.kext会在NVRAM保存亮度,重启不会丢失。亮度信息保存在NVRAM里的变量“backlight-level”。
为了让保存亮度工作,你需要正确加载NVRAM。如果你的笔记本不支持原生NVRAM,你需要一个 EmuVariableUefi-64.efi 放在 EFI/CLOVER/drivers64UEFI。没有EmuVariableUefi-64.efi的话,原生NVRAM会被启用。有EmuVariableUefi-64.efi的话,模拟的NVRAM会被启用,关机时保存在磁盘里(nvram.plist),开机时加载。为了让模拟的NVRAM运行,你需要安装CLOVER安装器里的 "RC scripts"。如果没有装 "RC scripts",但drivers64UEFI文件夹下有EmuVariableUefi-64.efi,会导致nvram.plist无法保存NVRAM设置。
在一些电脑里,原生的NVRAM可能可以工作(不需要EmuVariableUefi-64.efi)。如果你在使用AptioMemoryFix.efi而不是OsxAptioFix*.efi,那么你的电脑应该支持原生NVRAM。所以也可以尝试下载AptioMemoryFix.efi放到EFI/CLOVER/drivers64UEFI,但不一定在每台机子上正常运行。
其次,确保config.plist/SystemParameters/BacklightLevel里没有任何值。
最后, Clover Options -> Graphics Injector里的默认背光等级是0xFFFF。为了避免这个现象,确保Clover Options -> Graphics Injector里的设置留空。
模拟光感
一些机子有环境光感应方法在他们的DSDT里。这会影响到背光保存,而且这些环境光感应无法在MacOS驱动因为他们缺少Mac SMC依赖。
这些机子需要禁用环境光感应,让_STA返回0.
你可以检查你的DSDT,寻找环境光感应设备通过查找他的_HID标示:ACPI0008。
比如:
Device (ALSD)
{
Name (_HID, "ACPI0008")// _HID: Hardware ID
Method (_STA, 0, NotSerialized)// _STA: Status
{
If ((ALSE == 0x02))
{
Return (0x0B)
}
Return (Zero)
}
...你可以修改_STA方法让它返回0:
Device (ALSD)
{
Name (_HID, "ACPI0008")// _HID: Hardware ID
Method (_STA, 0, NotSerialized)// _STA: Status
{
Return (0)
}
...
对于一些系统,你可能需要伪造一个环境光设备(可能KabyLake的机子都需要)来达到亮度完美保存的效果。操作如下:
解压包,复制SSDT-ALS0.aml到EFI/CLOVER/ACPI/patched。
问题反馈
本人高三党,不一定有时间解答所有问题。力所能及的尽量回答。如需专业帮助,求助站内大神或者推荐注册个tonymacx86的账号,并在https://www.tonymacx86.com/threads/guide-laptop-backlight-control-using-applebacklightinjector-kext.218222/下提问
(要英文)。
有时间会写一篇完整的亮度热键的教程,写完了链接会贴在这里。
技术帖,必须顶 感谢分享。写的挺好 论坛上有好几个人翻译了这个教程,基本过一段时间就沉了{:5_264:}
不过也不一定都是这个步骤,像我的直接用SSDT-PNLF.aml就ok了,加了驱动反而不行
我穿越了?? 本帖最后由 fsl37 于 2018-4-25 08:45 编辑
我 不懂dsdt ,麻烦你邦我搞好。谢谢!
群里的大神 。过来顶上去 fsl37 发表于 2018-4-24 21:53 https://www.pcbeta.com/static/image/common/back.gif
我 不懂dsdt ,麻烦你邦我搞好。谢谢!
这篇教程基本上是通过热补丁的方式实现亮度控制的,最好发一下你的clover文件夹。能让附件不需要pb币下载吗,我有点穷。。。 daliansky 发表于 2018-4-24 17:31 https://www.pcbeta.com/static/image/common/back.gif
技术帖,必须顶
谢谢兵哥大神 https://bbs.pcbeta.com/viewthread-1736908-1-1.html去看看,你只要把热键弄出来就行, qini95 发表于 2018-4-24 18:13 https://www.pcbeta.com/static/image/common/back.gif
感谢分享。写的挺好
嘿嘿谢谢支持 yjplayer 发表于 2018-4-24 19:36 https://www.pcbeta.com/static/image/common/back.gif
论坛上有好几个人翻译了这个教程,基本过一段时间就沉了
不过也不一定都是这个步骤,像我的直接用 ...
666,能解决的方法就是好方法。 liningy123 发表于 2018-4-24 22:32 https://www.pcbeta.com/static/image/common/back.gif
群里的大神 。过来顶上去
谢谢,大神不敢当 liwenloveyou 发表于 2018-4-24 22:35 https://www.pcbeta.com/static/image/common/back.gif
https://bbs.pcbeta.com/viewthread-1736908-1-1.html去看看,你只要把热键弄出来就行,
好,我尽快,每个版块我觉得应该都要有个类似的亮度贴,而且我这个自认为讲的很细。 郑世祺 发表于 2018-4-24 22:47 https://www.pcbeta.com/static/image/common/back.gif
好,我尽快,每个版块我觉得应该都要有个类似的亮度贴,而且我这个自认为讲的很细。
不错,你的很细,这个热键我很想弄好,弄完就完美了 挖坑备用 其实clover勾上addpnlf就可以了...
学习了,谢谢分享哈 郑世祺 发表于 2018-4-24 22:36 https://www.pcbeta.com/static/image/common/back.gif
666,能解决的方法就是好方法。
个人经验,SSDT-PNLF.dsl里面的绿色字注释,_UID 最好也根据注释的提示来改合适自己的最大亮度值,亮度保存如果用clover的EmuVariableUefi-64的模拟方式的话就不需要SSDT-ALS0,用主板原生nvram来保存亮度的话就需要用到 厉害,6666,没毛病