DSDT修复亮度原理
以上应该很多人都做过了。下面就是驱动的关键。这个ACPIBacklight.kext 的原理是在DSDT 中搜索_BCM,_BCL,_BQC 以及显卡下的_DOS 函数并调用。所以实质上起到的是建立Mac 系统和ACPI 的某种联系。其实DSDT 中已经有调整亮度的代码,但是亮度的档位却不一定和Mac 一样,所以仍需要修改(真麻烦。。。)
很多帖子都已经说了,Mac 系统有17 个档位,16 + 1空档。不过看到某些帖子说其实Mac 下最多有512,以实现微调,就像声音一样,不过也和smbios 的机型有关。有兴趣的朋友可以试试。Anyways,回归主题。亮度档位由_BCL 函数提供,所以要去DSDT 中搜索_BCL 返回值的来源是哪里。例如我的就是返回IBCL,然后再去搜索IBCL 在哪。
具体:HERE
由以上原理可知,实现亮度调节有3个要素:
- 1.实现调节的函数
- 2.DSDT中调用函数的补丁
- 3.ACPIBacklight.kext插件
小太阳和函数
- 1.小太阳:
对于第2个要素,也就是补丁,我的补丁不在DSDT里面,而是在SSDT里面。真心不知道怎么把他加载到DSDT里面。但是由于使用强大的clover,我可以addPNLC从而启动了小太阳,即F14和F15能移动亮度滑块。但是这只是个空壳子,并没有调用到实际亮度函数。
- 2.函数:
本来一直以为函数在ssdt-7中,显然_BCL是在ssdt-7中实现的,但是补丁并不能去全局搜索这个函数。这个函数分两层调用,ssdt-8应该是总调用,ssdt-8中的_BCL函数返回ssdt-7中这个函数实现的具体位置,所以这次失败的原因很可能没调用ssdt-8。ssdt-8是显卡的总调用,但是是不是其他所有硬件的总店用还要在考虑。
- 3.电源管理
SSDT可以设置默认的亮度,连接电源时和电池显示,这个设置在ssdt-7中。我修改完之后没反应,原因有两个。第一个是ssdt没加载上,第二个是电源管理没加载上。很有可能是第一个原因。