本文主要是介绍黑苹果-ssdt屏蔽独显的一次记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
先说我电脑的基本情况
众所周知,我的2060独显是没救了,不仅如此,还要考虑屏蔽它的情况(很多人说装完笔记本很烫,建议可以往独显屏蔽不完全这方面考虑一下)。最开始的时候,我花了10块钱在某鱼上,请求帮忙屏蔽独显,他给我加了个 -wegnoegpu的参数。我不知道其他电脑情况如何,但是我的电脑是没有效果的,风扇该转还是转(异常情况,开机什么都没干转速就很高(也不是在搞元数据索引))。所以最终他也表示无能为力,因此我只能从ssdt下手了
寻找ssdt
我在获取了我的acpi表后,一个一个找,依然没有找到网上所说的在独显路径(通过win的设备管理器里看)下的_off方法,但是我找到了nvdtable,这个记录了很多我独显路径的定义,方法。但是依然没有_off方法,就很失望。但是发现有_ps3(我的理解里是电脑进入s3会执行的)方法
成功屏蔽了独显
找到了貌似相关的方法后,我就赶紧新建ssdt,模板套进去,新建一个_ini(代表了初始化)方法,方法体只调用ps3(),发现这么糙的操作居然到mac下真的风扇就不怎么转了,都是我真的高度运行软件的时候才会发烫。然后我就没去管了
关于睡眠的问题
因为我很少去睡眠,所以基本不考虑睡眠会带来什么问题。但是偶然一次睡眠尝试我发现在睡完后温度就高起来了,当时第一反应就是独显可能又开启了。因为我只在_ini在调用了ps3,所以我不了解是否是睡眠里的方法(_wak)调用了类似ps0的方法
为此,需要重写_wak。感谢互联网,发现通过补丁方式将_wak重命名成_zwak,然后自己写_wak,调用_zwak的内容+自己想写的内容(其实就是热补丁,但是我却啥也不知道)。最终就是_ini和_wak分别调用一次ps3,_pts调用ps0(进入睡眠时需要开启独显,但是不会导致睡眠高温)
最终即使睡眠独显依然是屏蔽状态。
具体代码
设备名称用于其他方法调用这个ssdt时使用。
/*ssdt-NDGP
*/
DefinitionBlock ("", "SSDT", 2, "OCLT", "NDGP", 0x00000000)
{External (_SB_.PCI0.PEG0.PEGP._DSM, MethodObj) // 4 ArgumentsExternal (_SB_.PCI0.PEG0.PEGP._PS0, MethodObj) // 0 ArgumentsExternal (_SB_.PCI0.PEG0.PEGP._PS3, MethodObj) // 0 ArgumentsDevice (DGPU){Name (_HID, "DGPU1000") // _HID: Hardware IDMethod (_STA, 0, NotSerialized) // _STA: Status{If (_OSI ("Darwin")){Return (0x0F)}Else{Return (Zero)}}Method (_INI, 0, NotSerialized) // _INI: Initialize{_OFF ()}Method (_ON, 0, NotSerialized) // _ON_: Power On{If (CondRefOf (\_SB.PCI0.PEG0.PEGP._PS0)){\_SB.PCI0.PEG0.PEGP._PS0 ()}}Method (_OFF, 0, NotSerialized) // _OFF: Power Off{If (_OSI ("Darwin")){If ((CondRefOf (\_SB.PCI0.PEG0.PEGP._DSM) && CondRefOf (\_SB.PCI0.PEG0.PEGP._PS3))){\_SB.PCI0.PEG0.PEGP._DSM (ToUUID ("a486d8f8-0bda-471b-a72b-6042a6b5bee0") /* Unknown UUID */, 0x0100, 0x1A, Buffer (0x04){0x01, 0x00, 0x00, 0x03 // ....})\_SB.PCI0.PEG0.PEGP._PS3 ()}}Else{}}}
}/*ssdt-ptswak
*/DefinitionBlock ("", "SSDT", 2, "OCLT", "PTSWAK", 0x00000000)
{External (DGPU._OFF, MethodObj) // 0 ArgumentsExternal (DGPU._ON_, MethodObj) // 0 ArgumentsExternal (ZPTS, MethodObj) // 1 ArgumentsExternal (ZWAK, MethodObj) // 1 ArgumentsMethod (_PTS, 1, NotSerialized) // _PTS: Prepare To Sleep{If (_OSI ("Darwin")){If (CondRefOf (\DGPU._ON)){\DGPU._ON ()}}ZPTS (Arg0)}Method (_WAK, 1, NotSerialized) // _WAK: Wake{If (_OSI ("Darwin")){If (CondRefOf (\DGPU._OFF)){\DGPU._OFF ()}}Local0 = ZWAK (Arg0)Return (Local0)}
}
感谢
- daliansky: oc-liitle
这篇关于黑苹果-ssdt屏蔽独显的一次记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!