cynorr

Learn what I touched.

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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没加载上,第二个是电源管理没加载上。很有可能是第一个原因。
posted on 2015-03-26 21:02  cynorr  阅读(662)  评论(0编辑  收藏  举报