本帖最后由 joyjeo 于 2012-5-15 00:02 编辑
声明:本文参考insanelymac的帖子:http://www.insanelymac.com/forum/index.php?showtopic=271292
我的本本是华硕的N53sv,采用了nVidia蛋疼的Optimus技术,显卡是GT540M。到现在为止,貌似Optimus在Mac OSX上是无解的。只能用HD3000核心显卡。但问题是,N卡残废不说,还耗电,而且还增加了很多热量。再者这种无效工作烤着N卡,对N卡的寿命也会有点影响吧。在没有禁用独显之前,HWmonitor显示的GPU温度是约53~54度(环境温度比较高,深圳现在是炎热的夏季),而cpu温度显示为51~52度。我用dsdt+NoNvidia.kext禁用N卡后,HWmonitor显示如下图
请勿使用多线程下载工具下载论坛附件!
系统的Kernel.log日志显示为:
- localhost kernel[0]: NoNvidia: NoNvidia by michyprima, init
- localhost kernel[0]: NoNvidia: got the ACPI device
- localhost kernel[0]: NoNvidia: disabling nvidia card
- localhost kernel[0]: NoNvidia: nvidia card successfully disabled
-
复制代码
A . 显然cpu温度降低了几度(笔记本电脑的CPU和GPU是共用散热模组的,所以在温度上会互相影响)。GPU 0 Board的温度是65535度,我想是因为NVClockX.kext无法读取到显卡温度sensor的数据吧。
B. 笔记本键盘上方显示独立显卡与核心显卡切换的状态指示灯(下文一律称之为“Optimus状态指示灯")已经在开机过程中由白色变成蓝色 ( 在N53sv的本本上,白色表示机器启用独立显卡,蓝色表示机器在核心显卡下工作,我不确定其他带Optimus的本本是否有这样的状态指示灯,或者颜色是否为蓝白切换)。
---------------------------------------------------------
下面开始进入主题,先说dsdt修改部分,再说NoNvida.kext修改部分。
DSDT修改部分:
是否需要修改DSDT,视下面几种情况而定:
1. 如果你的dsdt里面的独立显卡设备代码(比如原作者的dsdt中是 Device(GFX0))里面包含有DOFF方法( Method(DOFF) ),那么你的dsdt不用做任何修改,直接用修改过的NoNvidia.kext就可以实现禁用N卡,缺点是Optimus状态指示灯是白色的。
2.如果你的dsdt中没有 DOFF 方法,或者你想要让Optimus状态指示灯变蓝色,那么你就需要修改DSDT。
3.也许同样功能的方法在你的DSDT可能不是以DOFF的名字出现,比如:GPUOFF。那么是可以用DOFF方法来取代之(贴上原文,不知翻译是否有误 : If your disabling function is not DOFF but i.e. GPUOFF is enough to replace any occurrence of GPUOFF with DOFF. 如果翻译有误,希望大家指正哦!)
4.如果你想要完全禁用N卡,并让Optimus状态指示灯变蓝色(原作者机型是N53sv)。那么就需要修改DSDT。
以原作者的N53sv的dsdt代码为例:首先用DSDT Editor打开你的dsdt,并搜索DOFF,看看哪里调用了DOFF方法。然后对dsdt做下述修改。 (原作者LCDD设备中的_PS3方法调用了DOFF方法)
- Method (_PS3, 0, NotSerialized)
- {
- If (LEqual (^^^GFX0.P3MO, 0x03))
- {
- DOFF ()
- SGPL (0x23, One, Zero)
- Store (0x03, ^^^GFX0._PSC)
- Store (One, ^^^GFX0.DGPS)
- Store (0x02, ^^^GFX0.P3MO)
- }
- }
复制代码将上述DOFF()后面的代码,也就是上述的第 6~9 行,剪切出来,贴到DOFF方法的后面,也就是Method (DOFF, 0, NotSerialized)后面。修改后的代码,变成下述这个样子:(注意下面第19~22行代码是从_PS3方法里面剪切过来的) - Method (_PS3, 0, NotSerialized)
- {
- If (LEqual (^^^GFX0.P3MO, 0x03))
- {
- DOFF ()
- }
- }
- […省略....]
- Method (DOFF, 0, NotSerialized)
- {
- If (LNotEqual (MFTM, One))
- {
- _OFF ()
- If (LEqual (CTBO, One))
- {
- OBCP (Zero)
- }
- }
- SGPL (0x23, One, Zero)
- Store (0x03, ^^^GFX0._PSC)
- Store (One, ^^^GFX0.DGPS)
- Store (0x02, ^^^GFX0.P3MO)
- }
复制代码
NoNvidia.kext修改部分:
下载文章末尾的附件,解压出来后,显示NoNvidia.kext的包内容,找到info.plist,用文本编辑,或者PlistEditPro打开,找到下面字段。 - <key>IOPCIPrimaryMatch</key>
- <string>
- 0x0df410de&0xfff0ffff
- </string>
复制代码 然后将上面的0df4字段改为你的设备ID,设备ID可以从硬件ID知道。比如我的GT540M的硬件ID是 VEN 10de DEV 0df4 ,DEV 后面的0df4就是16进制的设备ID(Device ID)。硬件ID可以从Windows下的设备管理器得到。
请勿使用多线程下载工具下载论坛附件!
请勿使用多线程下载工具下载论坛附件!
修改好info.plist保存后,将NoNvida.kext放入/S/L/E。DSDT放回/E/E。然后修复权限,重建缓存。重启电脑,用-v -f模式启动,是不是出现了文章开头说的nvidia card successfully disabled代码了啊~~是不是你的本本变凉爽了~~~
NoNvidia.kext.zip
(9.36 KB, 下载次数: 959, 售价: 1 PB币)
如果觉得本文赞,那么就在帖子下面给我评分吧~~
|