- 积分
- 296
- 最后登录
- 2024-2-21
- 精华
- 0
- 阅读权限
- 30
- 主题
- 46
- UID
- 2491342
- 帖子
- 350
- PB币
- 34
- 威望
- 26
- 贡献
- 0
- 技术
- 156
- 活跃
- 666
- UID
- 2491342
- 帖子
- 350
- PB币
- 34
- 贡献
- 0
- 技术
- 156
- 活跃
- 666
|
本帖最后由 472950043 于 2014-9-5 22:19 编辑
关于亮度调节这块,这两天也研究了一下。置顶帖关于这块的内容比较少,想要开启小太阳,我认为是难度比较大的。
1、首先要有一定的DSDT经验,不会的同学请先去补课(这里我推荐MaciASL软件,很好用)
2、根据自己的情况针对性地选择方法,比如显卡是N卡还是A卡,还是集显,显卡驱动方式是什么,系统引导方式是什么,台式机还是笔记本,显示器是否内建,不同情况不同方法,能少走弯路。这点李科鑫大神做得比较好。
3、了解GenericBrightness、ACPIBacklight、AppleBacklight、AppleACPIBacklight、AsusACPIBackLightPanel这几个关键的kext,了解PNLF、_DOS、_DSM、_BCL、_BCM、_BQC这几个关键函数
下面跟大家分享一下我的一些经验,我这款机型比较特殊,是华硕n50vn笔记本,显卡Nvidia 9650M GT,显示器是奇美CMO1561。
显卡是用变色龙的GraphicsEnabler选项识别的,有水波纹,显卡驱动应该是前提。显示器是内建的,最大分辨率1280 x 800,这点也要注意一下。键盘驱动用的是VoodooPS2Controller1.8.12版(包含VoodooPS2Keyboard)可用Fn + F7 打开/关闭显示器,不过减少亮度Fn + F5增大亮度Fn + F6不可用。配置最接近白苹果的型号是MacBookPro5,1
开启小太阳的一般方法是先在DSDT的显卡部分加入PNLF代码,但是我这个DSDT里面没有Device (PWRB)也没有Scope (\_SB),找遍了帖子也没找到放哪儿,抱着试试看的心理,只有放在了Device (VGA)里面。
先说说PNLF的第一个函数Name (_HID, EisaId ("APP0002")),如果是用GenericBrightness那就是Name (_HID, EisaId ("LCD1234")),我推测这个跟GenericBrightness.kext里面Info.plist的IONameMatch字段值LCD1234有关,LCD1234应该是所有kext里面唯一的值,也就是说这句话可以加载kext,(APP0002我应该也是在一个kext的一个value里面找到过的,但是那个kext我删掉了回收站也找不到了)。
再说说PNLF的第二个函数Name (_CID, "backlight"),可以确定ACPIBacklight、AppleBacklight、AsusACPIBackLightPanel里面都有它,AppleACPIBacklight我不清楚,置顶帖的一个链接里面有提到这个,还是说AppleACPIBacklight有APP0002字段?这句话也是加载kext用的。大胆推测PNLF主要功能就是调用条和小太阳的,ncy2005说,添加PNLF代码到Device(PWRB)上面下面一个截图里有文字说明就有小太阳了。
第三个Name (_UID, 0x0A)和第四个Name (_STA, 0x0B)应该是不重要的,用ACPIBacklight的同学可能要改第三个函数为Name (_UID, 0x0E)的,我看了一下自己的DSDT,已经有Name (_UID, 0x0A)这个值了,而且出现的地方一般上面都有Name (_HID, EisaId ("PNPxxxx")),我推测这个是ACPI的即插即用设备标识,为了不重复我改成了0x0E
_DOS可选,在AsusACPIBackLightPanel和ACPIBacklight的Device (LCD)中会用到,AsusACPIBackLightPanel是华硕专用的亮度调节,使用时要删除其他的亮度调节驱动,否则它不一定能被加载(IOreg软件也可以看出来,关键字搜索back,PNLF下面加载了什么),我用它的话效果不理想,有小太阳,实际亮度不变,控制台中看到执行了多次_BCM函数。
_DSM可选,在多处可以看到,仿冒声卡,电源电量、亮度调节都有出现,它 包含多个类似"@0,built-in",Buffer () {} 的函数,配合DTGP函数来内建一个硬件,让PCI显示具体信息,在奶牛大大的三楼帖子中也有提到。其中pwm-info可以是跟分辨率有关的,NVMT是跟开机亮度有关的,EDID是显示器描述,可以写在DSDT里面,也可以用in.plist和out.plist配合变色龙加载
_BCL为必须,功能是控制亮度表,FrankieD的帖子说,亮度有16+1+2档,1是空挡,2是开机默认亮度值,对笔记本来说分使用电源时的默认亮度和使用电池时的默认亮度,大胆推测台式机应该是亮度有16+1+1档,如果这里的档位不正确,会产生亮度调到一半就卡死,控制台有错误信息,这时候最好找一个跟机子最接近的白苹果的DSDT中_BCL的档位,我是在MacBookAir5,1的ACPI下SSDT-5.aml文件中找到的,可能是我的MacBookPro5,1的ACPI文件不全,没有_BCL,我直接复制过来,重启,就可以顺畅调节了。
_BCM为必须,我用ACPIDebug(Rehabman的ACPI排错补丁,需要配合ACPIDebug.kext)看到控制台在亮度调节的时候调用了_BCM函数,而且我这里有一个判断句If (LAnd (LGreaterEqual (Arg0, Zero), LLessEqual (Arg0, 0x64)))我猜测是Arg0在亮度为Zero亮度表里面最小亮度到0x64亮度表里面最大亮度之间才执行亮度函数,否则小太阳是变化了,实际亮度却不变。我用ACPIBacklight按一下调用一次,用华硕专用的AsusACPIBackLightPanel,按一下调用好几次。。
_BQC为必须,虽然_BQC函数很简单,通常就1、2行甚至直接return 0,纯粹的一个形式主义,但是p.H大大就因为少了这个吃了亏,ACPIBacklight不能被加载。
说了这么多,大部分都是我这个新手的经验之谈,我是调节出小太阳了,但是实际屏幕不会被调节,偏好设置的节能器里面也缺少相应选项。
如果以上我的理解有误,恳请大大们指出,也欢迎其他同学回帖交流!
|
|