love2335 发表于 2013-8-3 20:02

关于DSDT屏蔽独显的一点认识和方法

    装了黑苹果好长时间了,几乎解决了其余的所有问题,但是由于电脑是双显卡,加上inter的双显卡切换技术。。独显一直无法屏蔽,开机温度平常都是56度自己翻了许多关于屏蔽独显的帖子,试图修改dsdt,可惜都没有成功。无奈之下在论坛求助,终于解决了屏蔽独显的问题。现在开机43度。。最高58度。。由于是神州UN43的超薄本。开机运行几乎没有风扇的声音,搞得我一度 以为碰到了传说中的冷启动风扇不转。。。好吧,跑题了,感谢论坛里的砂锅小肉丸帮我修改dsdt..感谢他八辈祖宗。。{:5_294:}。
    现在我把具体的修改细节说一下,希望可以帮助到需要的人。
    参考修改dsdt禁用nvidia独立显卡 这个帖子,里面的具体做法大概可以概括为从SSDT-3里找到关于独显开关的代码。和_PS3部分代码一起贴到dsdt的Device (PEG0)下面的Device (PEGP)部分,再添加两行代码实现调用。。就构成了开机屏蔽独显的DSDT。
   还有一个文章是基于dsdt里本身含有OFF代码来修改屏蔽独显的。。好像是华硕机型,反正我的dsdt里没有任何关于OFF的代码。具体的介绍文章以这两篇为准.
   一般来说,显卡的相关代码都在提取的SSDT-3里。就是你用相关工具提取出来的第4个SSDT。还有一点要注意的是。如果想使用SSDT实现降频,SSDT最好按照SSDT、SSDT-1、SSDT-2、、来命名。其余命名方式可能无法载入SSDT。。贴出我的SSDT代码图。下面的就是关闭独显的代码部分


可以看到一共四个代码。。这就是我们需要的部分,当然,关闭代码并不是不变的,我的这个是_ON、_OFF,也许有的人是OF或者其他,如何确定代码位置?这个一般处于Scope (\_SB.PCI0.PEG0.PEGP)下面。你也可以尝试着搜索OFF、OF、当然,不要忘了同一个节点(姑且称之为节点吧,我也不知道是什么)下肯定有一个ON代码。还有PS0、PS3这个好找。
如果是自己想修改的话,可以提前把这两个东西加上,省的忘记。
Method (_WAK, 1, Serialized)   
      {      
      PINI ()      
         . .......
      }
      Method (_INI, 0, NotSerialized)      
      {
         PINI ()

      
   按照上述帖子,把四个代码放到\_SB.PCI0.PEG0.PEGP下面。查错,会出现一大堆错误。。。我是安装帖子内容,严格的放到\_SB.PCI0.PEG0.PEGP下面。。和那个帖子里的图一模一样。。但是,好像每个dsdt都不一样,只能是自己见机而变。
      

    复制相关函数到\_SB.PCI0.PEG0.PEGP下。。。还是无法编译。。显然,这个思路暂时看来是错误的。
要不换一个思路?直接在最下面添加试试看?


还是提示缺了好多函数。。。。看看最主要的是啥?
    (\_SB.PCI0.PEG0.PEGP.OPOF)
13603      Error      Object is not accessible from this   scope (LNKD)
13633      Error      Object does not exist (\_SB.PCI0.PEG0.PEGP._ON)
13642      Error      Object does not exist (\_SB.PCI0.PEG0.PEGP.OMPR)
13644      Error      Object does not exist (\_SB.PCI0.PEG0.PEGP._OFF)
1      Error      (\_SB.PCI0.PEG0.PEGP.OMPR)
                  
这下,就是找匹配函数了。。。据说,关闭独显的函数可以只用OFF和PS3.。。好吧,今年经济不景气,咱也砍一半算了。
让我们看一下修改成功的DSDT相关函数所处位置。


似乎是新添加了一个.PCI0.PEG0.PEGP?说实话,我也看不懂。好吧,咱只能照猫画虎了。看起来,第一步,就是在Scope (_SB.PCI0)下面先添加一个Scope (\_SB.PCI0.PEG0)函数,所有的修改再这个下面进行。。要问这个玩意到哪去找?请听下回分解。。。
      好吧,其实就在SSDT-3的下面,搜索Scope (\_SB.PCI0.PEG0)。。。其余相关的函数也都在SSDT-3里面。在我们新添加的OFF函数上面插入一个函数。
Scope (\_SB.PCI0.PEG0),这个就是单个的,好搜索。添加。下面再插入Scope (\_SB.PCI0.PEG0.PEGP)函数。。这个函数有点晕。。好多。。不知道用哪个。。返回刚才报错的那一段,看看。。提示没有SGPO?搜索SSDT-3..找前面有OperationRegion的。。添加。。
       写到这。。我写不下去了。。。因为我发现我也不理解这些函数具体有何关联,我自己就是个小白。晕了
看这些东西。有三个认识。
1、      屏蔽独显代码只需要OFF、OF代码和PS3就可以了。
2、      不能放到Device (PEGP)下面。就是那个可以展开的项目里。要直接放到Scope (\_SB.PCI0.PEG0)下面。再根据错误提示添加相关代码。
3、      我这个里面砂锅小肉丸调用了一个GOFF函数,不属于SSDT里的,看情况可以自己添加部分代码实现。
4、      DSDT真的很难。。
现在我把原DSDT和修改的DSDT放上来。。有能力的朋友参考一下吧。
参考帖子:
    dsdt禁用Optimus独显真的有效果!!
https://bbs.pcbeta.com/forum.php?mod=viewthread&tid=1211099
(高手请无视哈)华硕N43S DSDT屏蔽NVIDIA GT550M显卡。机器降温8°
https://bbs.pcbeta.com/forum.php?mod=viewthread&tid=1319006
修改dsdt禁用nvidia独立显卡
https://bbs.pcbeta.com/viewthread-1211619-1-1.html
还有我的求助贴
https://bbs.pcbeta.com/viewthread-1379789-1-1.html


再次十分的感谢砂锅小肉丸的帮助!!!!{:5_293:}你让我写个教程贴。。可我自己也是糊涂的。。。对不起哈{:5_297:}
效果图:


yzhize 发表于 2013-8-3 21:30

强力支持,言真意切

Wayne197 发表于 2013-8-3 22:34

请问你的独显型号是什么?我一直没成功,我的是GT620m

love2335 发表于 2013-8-3 22:39

Wayne197 发表于 2013-8-3 22:34 static/image/common/back.gif
请问你的独显型号是什么?我一直没成功,我的是GT620m

GT645M........

love2335 发表于 2013-8-3 22:40

Wayne197 发表于 2013-8-3 22:34 static/image/common/back.gif
请问你的独显型号是什么?我一直没成功,我的是GT620m

GT645M.不关型号的事吧

netvlan 发表于 2013-8-3 23:24

好贴,就是还是许多看不懂

duke_ding 发表于 2013-8-4 00:13

e5ywy6ue57u7ue67ue

Wayne197 发表于 2013-8-4 17:54

实在感谢你啊,帮我解决了独显屏蔽的问题,我以前都是一箩筐把代码放在一个Scope里,今天根据你的思路分开来放,成功了上图
关于本机没有独显的信息了

温度大概降了4、5度,之前差不多要58到60多
附上我的dsdt供需要的同学参考

win7GM 发表于 2013-8-4 17:58

{:5_288:}简直完全看不懂。。
不过图示还是不错滴

zhang98581 发表于 2013-8-5 09:56

能否帮忙,把我的修改一下,

cgdragon 发表于 2013-8-5 10:10

奇怪的是我台式机直接上vga接口,windows下显示双显卡,然后用dvi转vga接头插在dvi接口上就只显示一个独显了,不知道为什么,我一直这样,再mac下就可以用独显了,免驱的a卡,哈哈

砂锅小肉丸 发表于 2013-8-5 11:50

兄弟 你言重了。。。 不必客气。

之所以加一个封装方法 - GOFF 原因如下:
我想要调用_PS3,因为_PS3中除了调用_OFF之外 还有其他后续的环境设置,个人觉得比较好。
而_PS3内部方法的真正执行依赖于其他变量的值,所以将这些开关变量的设置放在了GOFF,好处是意图明显,方便修改,非常清晰。以后再有其他额外的变量设置,直接修改这个wrapper即可。当然不写成方法也可。

另外,对于我的本测试发现,直接调用_OFF 也是有效果的。不清楚其他本是不是一样效果。

love2335 发表于 2013-8-5 22:30

砂锅小肉丸 发表于 2013-8-5 11:50 static/image/common/back.gif
兄弟 你言重了。。。 不必客气。

之所以加一个封装方法 - GOFF 原因如下:


我觉得你应该针对这方面出一个教程,我是本身能力有限啊。看了你的许多帖子。大多数都是从头开始的。能说的清楚。我就不知道说什么。本身也没有一点编程基础。

砂锅小肉丸 发表于 2013-8-6 22:14

love2335 发表于 2013-8-5 22:30 static/image/common/back.gif
我觉得你应该针对这方面出一个教程,我是本身能力有限啊。看了你的许多帖子。大多数都是从头开始的。能说 ...

如有特别好的点子或者心得,我肯定会分享的,可最近很少看黑苹果了。。时间不充裕。唉。

jimmyqing 发表于 2013-8-6 22:22

大力支持,我的是华硕的 610M显卡,正在找驱动中。没办法了就尝试你的方法

quan124608797 发表于 2013-8-6 22:43

支持下,我都没提取去dsdt

small291 发表于 2013-8-7 08:48

你好,帮忙修改一下,看了很多贴子,一直都改不对

dennny 发表于 2013-8-7 08:53

强有力的解释加上介绍,基本上知道一点dsdt的情况了,谢谢

爱因斯坦宝宝 发表于 2013-8-7 10:07

本帖最后由 爱因斯坦宝宝 于 2013-8-7 10:08 编辑

表示自己屏蔽没这么麻烦,不过不知道适用哪些机型,对于我的机器而言,只要加入pini函数再在两个地方调用此函数就搞定了,无需任何第三方驱动,而且温度下降15度左右

love2335 发表于 2013-8-7 10:47

爱因斯坦宝宝 发表于 2013-8-7 10:07 static/image/common/back.gif
表示自己屏蔽没这么麻烦,不过不知道适用哪些机型,对于我的机器而言,只要加入pini函数再在两个地方调用此 ...

具体是怎样添加呢?能不能说一下哈,让后来的人也有个参考
页: [1] 2 3
查看完整版本: 关于DSDT屏蔽独显的一点认识和方法