zjfg0228 发表于 2015-12-19 20:16

GTX970M---原生亮度调节

本帖最后由 zjfg0228 于 2016-1-13 15:50 编辑

本来已经放弃了的,但是前天逛论坛的时候看到这个帖子https://bbs.pcbeta.com/viewthread-1648662-1-5.html
,想修复一下独显引导第二阶段载入条在屏幕左下方的问题,但是照了了帖子里做之后,重启发现我的屏幕亮度变暗了,按了一下亮度调节的键发现亮度有变化。当时并没有用GenericBrightness.kext和APCIBacklight.kext,于是我知道原生亮度被开启了。

闲话说多了,说说我怎么做的吧,不是教程,只是经验分享,有不足的地方欢迎指正。


1、我的电脑是6代CPU,核显是HD530,爬了很多帖子发现没戏,于是BIOS关了核显。然后装了webDriver,驱动了独显。这里怎么装的我就不多废话了,论坛里多得是。
2、独显驱动了之后系统信息里显示显卡的显存还是0M,而且用IORegistryExplorer看到显卡下面加载的是AppleDisplay,不是AppleBacklightDisplay,而且显示器也没有内建。loppol在一个帖子里说开启亮度调节的必须条件就是显示器内建+AppleBacklightDisplay被加载。
于是各种爬帖,找到的办法是DSDT注入显卡信息。于是照提取了显卡ROM,用iDSDT注入了显卡信息。显存终于不是0M、终于加载AppleBacklightDisplay了。
这里要说一下,built-in一定要选对
               Method (_DSM, 4, NotSerialized)
                        {
                              Store (Package ()
                              {
                                        "@0,compatible",
                              Buffer (){
                                                "NVDA,NVMac"
                                        },
                                        "@0,device_type",
                                        Buffer (){
                                                "display"
                                        },
                                        "@0,name",
                                        Buffer ()
                                        {
                                                "NVDA,Display-A"
                                        },
                         "@1,AAPL,boot-display",
                        Buffer (One)
                        {
                              0x01
                        },
                         "@1,backlight-control",
                         Buffer (0x04)
                         {
                           0x01, 0x00, 0x00, 0x00
                         },
                                        "@1,compatible",
                                        Buffer ()
                                        {
                                                "NVDA,NVMac"
                                        },
                                        "@1,device_type",
                                        Buffer ()
                                        {
                                                "display"
                                        },
                                        "@1,name",
                                        Buffer ()
                                        {
                                                "NVDA,Display-B"
                                        },
                                        "@1,built-in",
                        Buffer (One)
                        {
                              0x01
                        },
                                        "@1,pwm-info",
                        Buffer (0x14)
                        {
                            /* 0000 */    0x01, 0x14, 0x00, 0x64, 0xA8, 0x61, 0x00, 0x00,
                            /* 0008 */    0x1E, 0x02, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00,
                            /* 0010 */    0x00, 0x04, 0x00, 0x00
                        },
                         "@1,use-backlight-blanking",
                         Buffer (One)
                         {
                              0x01
                         },
                                        "device_type",
                                        Buffer ()
                                        {
                                                "NVDA,Parent"
                                        },
                                        "hda-gfx",
                                        Buffer ()
                                        {
                                                "onboard-1"
                                        }
                              }, Local0)
                              DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                              Return (Local0)
                        }
上面是我的显卡信息(可能里面有很多没有的参数,懒得删了)。可以看到很多参数是有两个的,要在IORegistryExplorer看一下自己的AppleDisplay是在哪个NVDA,DIsplay下,比如我的在NVDA,DIsplay-B@1下,所以注入的显卡信息里@1下的必要参数一定要有,比如"@1,pwm-info", "@1,use-backlight-blanking",。

3、至此我的亮度调节还没有解决。有按照《理论上完美解决N卡亮度调节问题》里说的做,没成功。后来仔细读这个帖子时发现自己看漏了一句话——“有些可能也需要插入 NVMT和 EDID才能成功”,于是参照https://bbs.pcbeta.com/viewthread-1473634-1-1.html,注入了EDID。还是亮度调节还是不行,但是显示器有名字了‘。【这一步是不是必须我也不清楚】

4、上班无聊的适合看了开始说的哪个帖子,本来也没想弄,但是帖子里的这一个
<key>@1,AAPL,boot-display</key>
<string>0x00000001</string>让我眼前一亮,因为我一直觉得我的先前搞出来的亮度调节在调的是核显的亮度,所以怎么调都没用。下班回家照着帖子里做,就出现现在的惊喜。PS:又把这个帖子给loppol看,他说这个帖子最有含金量的就是上面那段,因为这可能解决3K屛启动黑屏。有兴趣的可以试试。
5、先前也有在这个帖子下面说过,当时的情况是可以调亮度但是两秒之后亮度就变回来了。百思不得其解。看到这个帖子https://bbs.pcbeta.com/viewthread-1439193-1-1.html,忽然想到自己动过AppleBacklight.kext,于是找virjay要了原版,果然解决了,可以正常进行亮度调节,但是最后一档黑屏,重启不能保存亮度。
6、今天早上在床上挣扎时来的灵感:因为先前AppleBacklight.kext-》Info.plist-》IOKitPersonalities-》AppleIntelPanelA-》ApplePanels-》Default的值,就是可以调亮度但是两秒之后亮度就变回来的情况,当时最后一档不是黑屏,而且最高亮度也很暗。于是我把ApplePanels的子项里几乎所有的值都换到Default下面试了试(其实就换了6次),结果和我想的一样,有的值可以让最后一档不黑屛。分享两个我觉得有用的:
00110018 0037005F 008A00B3 00EB0124 016701A9 01D40209 025402A2 02F8034D 039603FF 0400
这个最高档不够亮,
0045004E 00CE00FF 这个是我现在在用的,最高档就是最亮,但是最低档不够暗。也懒得再试了,各种奇葩结果都有。
7、重启亮度保存:可以看看这个帖子https://bbs.pcbeta.com/viewthread-1182812-1-1.html,建议结合这个帖子https://bbs.pcbeta.com/viewthread-1538926-1-1.html。但是注意要Clover要装RC。

就这么多了,DSDT文件我就不分享了,免得机型不同出什么差错。
还有一点废话等会二楼补上。

zjfg0228 发表于 2015-12-20 10:42

本帖最后由 zjfg0228 于 2016-1-14 12:39 编辑

上面的DSDT文件是以前留下来的,忘删了。
--------------------------------------------------------------------------------------------------------------------------
补充一下我实现亮度调节过程的发现,希望对不能开启亮度调节的朋友有帮助。

上面有提到,刚还原到原版AppleBacklight.jext的时候,最后一档是黑屏。于是我尝试修改SSDT中的_BCL函数的亮度比表。
1、改的时候我发现不对劲的地方:虽然亮度表里的最低档是Zero,但是这里的亮度表只有10档,我用快捷键调节的时候却是有17档的,而且接电源开机的亮度是最高档,也不是亮度表里给的亮度等级。所以我觉得这个亮度表应该没有被使用,证明原生的亮度调节被开启了。
2、在ioreg里看到brightness的最大值是400,最小值是0。记得有一个帖子里说brightness的最大值、最小值是存在另一个文件里(不知道是不是记错了),但是爬了很多帖都没有见到有说怎么改brightness值的。
后来改DSDT的时候发现:pwn-info的值是这样的
/* 0000 */    0x01, 0x14, 0x00, 0x64, 0xA8, 0x61, 0x00, 0x00,
/* 0008 */    0x1E, 0x02, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00,
/* 0010 */    0x00, 0x04, 0x00, 0x00最后1行是00000400,和ioreg里看到的brightness的Max值是一样的,总觉得的这不是一个巧合。把我找的的几个pwn-info都比较了一下,发现于是都是这个样的。于是我把 0x00, 0x04, 0x00, 0x00改成了 0x00, 0x03, 0x00, 0x00,重启之后发现ioreg里的Max值变成了300,正是我修改的值。Min值一直没有搞定,我把pwn-info里的连续两个0x00都缓过来,Min还是0.


==========================================================================

说一下webDriver驱动怎么打的:
1、装webDriver前把S/L/E下的GeForce开头和NV开头的kext删掉
2、装完webDriver后,修改AppleGraphicsControl.kext,这个要根据自己设的机型来,参考这个帖子
https://bbs.pcbeta.com/viewthread-1611506-1-1.html
记得重建缓存,修复权限。
3、取消nv_disable=1,加上nvda_drv=1,重启






virjay 发表于 2015-12-20 15:41

我顶,太高深了,楼主,有没有高手出来说句话

ehill 发表于 2015-12-20 15:44

赚点金币,下载附件

moonmetal 发表于 2015-12-20 15:57

zjfg0228 发表于 2015-12-20 16:03

moonmetal 发表于 2015-12-20 15:57 https://www.pcbeta.com/static/image/common/back.gif
楼主强大!我也发现mic是没有的……,不过我现在最头疼的是alc888声音是卡卡带破音的……不知怎么破啊

试试自己做仿冒声卡吧,可以看看这个帖子https://bbs.pcbeta.com/viewthread-1387094-1-1.html

zjfg0228 发表于 2015-12-20 16:06

virjay 发表于 2015-12-20 15:41 https://www.pcbeta.com/static/image/common/back.gif
我顶,太高深了,楼主,有没有高手出来说句话

一个大神都没召唤到……

cyboot 发表于 2015-12-20 16:13

看看!!!!!

zjfg0228 发表于 2015-12-20 16:19

补充一下ioreg部分的图,希望有高手帮忙,又搞了一上午,爬了各种贴……
按亮度调节的两个快捷键,brightness的value会变,但是屏幕亮度并没有变。
亮度调节的相关代码_BCL、_BCM等方法在SSDT的GFX0里,但是AppleBacklight是在PEG0下的PEGP里。有试过把显卡信息backlight-control等字段从DSDT里的PEGP下移动到GFX0下,但是重启之后出现禁止符,无法开机。


求个大神帮忙{:5_293:}

zjfg0228 发表于 2015-12-20 20:49

来个大神吧{:5_263:}

virjay 发表于 2015-12-20 21:01

z7外放太垃圾,想改善一下,今天装了BOOM2,boom2反复卸载安装了几次,现在找不到输出设备,找不到输入设备了,我擦。。咋办啊

zjfg0228 发表于 2015-12-20 21:06

virjay 发表于 2015-12-20 21:01 https://www.pcbeta.com/static/image/common/back.gif
z7外放太垃圾,想改善一下,今天装了BOOM2,boom2反复卸载安装了几次,现在找不到输出设备,找不到输入设备 ...

用原版的AppleHDA重新打驱动把……或者用我上面给的试试。
另外,我发现realtekALC.kext是可以删掉的

virjay 发表于 2015-12-20 22:45

zjfg0228 发表于 2015-12-20 21:06 https://www.pcbeta.com/static/image/common/back.gif
用原版的AppleHDA重新打驱动把……或者用我上面给的试试。
另外,我发现realtekALC.kext是可以删掉的

原来是忘记打补丁了。。{:5_275:}

zjfg0228 发表于 2015-12-21 21:52

怎么就沉了呢……

以良の名 发表于 2015-12-21 23:54

楼主内建显示器怎么弄的?能请教一下吗?我是gtx980m

loppol 发表于 2015-12-22 07:35

这个我之前也是同样的阶段 问了Rehabman 也没得出实质进展。。。
另外问一下lz的hdmi音频是原声的能用吗w

loppol 发表于 2015-12-22 07:40

zjfg0228 发表于 2015-12-20 16:19 https://www.pcbeta.com/static/image/common/back.gif
补充一下ioreg部分的图,希望有高手帮忙,又搞了一上午,爬了各种贴……
按亮度调节的两个快捷键,brightn ...

bcm那些函数直接复制好像不妥吧?
你查查怎么从ssdt移植到dsdt

zjfg0228 发表于 2015-12-22 10:43

loppol 发表于 2015-12-22 07:40 https://www.pcbeta.com/static/image/common/back.gif
bcm那些函数直接复制好像不妥吧?
你查查怎么从ssdt移植到dsdt

HDMI没测过,应该不行。我的bcm函数没有动过的

zjfg0228 发表于 2015-12-22 10:45

loppol 发表于 2015-12-22 07:40 https://www.pcbeta.com/static/image/common/back.gif
bcm那些函数直接复制好像不妥吧?
你查查怎么从ssdt移植到dsdt

你的现在可以调亮度么?

loppol 发表于 2015-12-22 11:16

zjfg0228 发表于 2015-12-22 10:43 https://www.pcbeta.com/static/image/common/back.gif
HDMI没测过,应该不行。我的bcm函数没有动过的

我之前跟你一样 看了那个n卡小太阳的帖子
他说bcm bcl函数如果在dsdt是个前提
所以有过想把那些函数移植的念头
之前有个讨论移植的帖子 我看了一下没多关注
我之前问了rehabman 他给我的反馈是即使移植过去 能成功的概率不大
不过r神说对n卡研究不多
lz想多讨论的话可以接受我的qq请求w
页: [1] 2 3 4 5 6
查看完整版本: GTX970M---原生亮度调节