黑苹果的显卡怎么驱动

黑苹果的显卡怎么驱动,第1张

Nvidia Graphic Card Injection 英伟达显卡驱动

第1部分:地址位置

1。启动您的系统与GraphicsEnabler=Yes

2。下载名为ioreg的应用在这里

2。打开名为ioreg:

4。找到你的Nvidia图形卡的地址位置:

5.记录设备名称及地址:

注意在这个例子中,设备是PCI1

第二步, 要有 DSDT Edit

1.打开你的DSDT位于你的Extra的文件夹在启动驱动器根目录:

2.找到你的硬件位置

3.检查设备的代码:

4.在最后的中间开始添加代码

下载编辑工具 Text Document here

6. 复制下面的代码 粘贴进去

Device (GFX0) /** for Nvidia Fermi Graphics Cards **/

{

Name (_ADR, Zero)

Name (_SUN, One)

Method (_DSM, 4, NotSerialized)

{

Store (Package (0x1E)

{

“AAPL,slot-name”,

“PCI x16″,

“@0,compatible”,

Buffer (0x0B)

{

“NVDA,NVMac”

},

“@0,connector-type”,

Buffer (0×04)

{

0×00, 0×08, 0×00, 0×00

},

“@0,device_type”,

Buffer (0×08)

{

“display”

},

“@0,name”,

Buffer (0x0F)

{

“NVDA,Display-A”

},

“@1,compatible”,

Buffer (0x0B)

{

“NVDA,NVMac”

},

“@1,connector-type”,

Buffer (0×04)

{

0×00, 0×08, 0×00, 0×00

},

“@1,device_type”,

Buffer (0×08)

{

“display”

},

“@1,name”,

Buffer (0x0F)

{

“NVDA,Display-B”

},

“NVCAP”,

Buffer (0×18)

{

/* 0000 */ 0×04, 0×00, 0×00, 0×00, 0×00, 0×00, 0×03, 0×00,

/* 0008 */ 0x0C, 0×00, 0×00, 0×00, 0×00, 0×00, 0×00, 0x0A,

/* 0010 */ 0×00, 0×00, 0×00, 0×00

},

“VRAM,totalsize”,

Buffer (0×04)

{

0×00, 0×00, 0×00, 0xc0

},

“device_type”,

Buffer (0x0C)

{

“NVDA,Parent”

},

“model”,

Buffer (0×10)

{

“GeForce GTX 580″

},

“rom-revision”,

Buffer (0x1D)

{

“nVidia GTX 580 OpenGL Engine”

},

“hda-gfx”,

Buffer (0x0A)

{

“onboard-1″

}

}, Local0)

DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))

Return (Local0)

}

}

Device (HDAU)

{

Name (_ADR, One)

Method (_DSM, 4, NotSerialized)

{

Store (Package (0×02)

{

“hda-gfx”,

Buffer (0x0A)

{

“onboard-1″

}

}, Local0)

DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))

Return (Local0)

}

}

复制代码

7. 添加继续 修复看下是不是有错误。注意 里面的显卡参数是可以修改的 根据自己的硬件修改 继续看下

第三步就是修复错误

找到下面的代码

“VRAM,totalsize”,

Buffer (0×04)

{

0×00, 0×00, 0×00, 0xc0

},

复制代码

这个代码意思就是显卡 显存 大小修改 512M 256M 1G 2G等等

怎么修改 我们给大家列出来

0xc0=3072=3GB

0×80=2048=2GB

0×60=1536=1.5GB

0×40=1024=1GB

0×20=512=0.5GB

只需修改最后 一个数值就可以了 比如 你的显卡是1G 的

就应该是下面的代码,明白了吧 。

“VRAM,totalsize”,

Buffer (0×04)

{

0×00, 0×00, 0×00, 0x40

},

复制代码

8.找到显卡Model 这个就是显卡型号 修改的

“model”,

Buffer (0×10)

{

“GeForce GTX 580″

},

复制代码

注意在这了修改显卡型号 要注意,在这里我们都是十六进制的 比如“GeForce GTX 580”这几个数值里 总共有15个位置,一定要把空格算上,我们要把这个位置数值+1,比如这里的“GeForce GTX 580”也就是15+1=16 ,这里16的十六位进制 就是10,不会的可以百度查询 16的十六进制就知道了

大家可能知道了这里的10 对应的就是 Buffer(0×10),这个数值。对应正确即可。

9.继续看下面 找到下面的DSDT

“rom-revision”,

Buffer (0x1D)

{

“nVidia GTX 580 OpenGL Engine”

},

复制代码

这里是修改显卡ROM修正,修改方法 跟上面对应 是一样的 数值对应即可。

最后就是编辑下编译DSDT

声卡ID表

芯片型号仿冒ID

创作的CA01320x100918仿冒ID值 0,1,2,3,4,5,6,9,10,11,12

Cirrus Logic公司CS42100x100101仿冒ID值 13

Cirrus Logic公司CS42130x100100仿冒ID值 28

瑞昱ALC221仿冒ID值 11

瑞昱ALC225 / ALC3253仿冒ID值 28,30,33

瑞昱ALC230仿冒ID值 13

瑞昱ALC233仿冒ID值 3,13,27,32,33

瑞昱ALC235仿冒ID值 3,11,28

瑞昱ALC2360x100001,0x100002仿冒ID值 3,11,13,15

瑞昱ALC3236仿冒ID值 4,5,28,29

瑞昱ALC255仿冒ID值 3,13,17,18,27,28,99

瑞昱ALC256(3246)仿冒ID值 11,13,56

瑞昱ALC257仿冒ID值 11

瑞昱ALC260仿冒ID值 11,12

瑞昱ALC2620x100202仿冒ID值 11,12,13,28

瑞昱ALC268仿冒ID值 3

瑞昱ALC2690x100004,0x100100,0x100202,0x100203仿冒ID值 1-11,13-16,18-20,27-30,32,33,35,40,45,58,66,76,93,99,127

瑞昱ALC2700x100100,仿冒ID值 3,4,27,28

瑞昱ALC271x仿冒ID值 9,31

瑞昱ALC2720x100001,仿冒ID值 3,11

瑞昱ALC2750x100005,0x100008,仿冒ID值 3,13,28

瑞昱ALC280仿冒ID值 3,4,11,13,15

瑞昱ALC2820x100003,仿冒ID值 3,4,13,27,28,29,76,86,127

瑞昱ALC283仿冒ID值 1,3,11,66

瑞昱ALC284仿冒ID值 3

瑞昱ALC285仿冒ID值 11

瑞昱ALC2860x100002,0x100003仿冒ID值 3

瑞昱ALC288仿冒ID值 3,13

瑞昱ALC290仿冒ID值 3,28

瑞昱ALC3241仿冒ID值 4

瑞昱ALC292仿冒ID值 12,18,28

瑞昱ALC293仿冒ID值 28,29

瑞昱ALC294仿冒ID值 11,12,13

瑞昱ALC295仿冒ID值 1,3,13,14,15,28

瑞昱ALC2980x100101,0x100103仿冒ID值 3,11,13,28,29,30,47,66,72,99

瑞昱ALC6620x100101,0x100300仿冒ID值 5,7,11,12,13

瑞昱ALC6630x100001,0x100002,仿冒ID值 3,4,28,99

瑞昱ALC665仿冒ID值 12,13

瑞昱ALC6680x100003,仿冒ID值 3,20,27,28,29

瑞昱ALC6700x100002,仿冒ID值 12

瑞昱ALC671仿冒ID值 12

瑞昱ALC8820x100101,仿冒ID值 5,7

瑞昱ALC8830x100002,仿冒ID值 7

瑞昱ALC8850x100101,0x100103仿冒ID值 1,12

瑞昱ALC8870x100202,0x100302,仿冒ID值 1,2,3,5,7,11,13,17,18,33,50,99

瑞昱ALC888 / ALC12000x100101,0x100001,0x100202,0x100302仿冒ID值 1,2,3,(4为笔记本电脑),5,7,11,27,28,29

瑞昱ALC8890x100004,仿冒ID值 1,11,12

瑞昱ALC891 / ALC8670x100002,仿冒ID值 11,13

瑞昱ALC8920x100302,仿冒ID值 1,2,3,(笔记本电脑4),5,7,12,28,31,92,98,99

瑞昱ALC898 / ALC8990x100003,仿冒ID值 1,2,3,5,7,11,13,28,65,98,99,101

瑞昱ALC11500x100001,仿冒ID值 1,2,3,5,7,11

瑞昱ALC12200x100003,仿冒ID值 1,2,5,7,11,13

瑞昱ALCS1220A仿冒ID值 1,2,5,7

美国模拟器件公司AD19840x100400,仿冒ID值 11

美国模拟器件公司AD1984A0x100400,仿冒ID值 11,13

美国模拟器件公司AD1988B仿冒ID值 5,7,12

美国模拟器件公司AD2000B仿冒ID值 5,7

科胜讯CX8050仿冒ID值 3

科胜讯CX8200仿冒ID值 3

科胜讯CX205610x100000,仿冒ID值 11

科胜讯CX20583仿冒ID值 3

科胜讯CX20585仿冒ID值 3,13

科胜讯CX20588仿冒ID值 3

科胜讯CX205900x100000,0x100002,0x100003,仿冒ID值 3,12,28

科胜讯CX20641仿冒ID值 11,13

科胜讯CX20642仿冒ID值 11,13

科胜讯CX20722仿冒ID值 3

科胜讯CX20724仿冒ID值 3,13

科胜讯CX20751 / 20752仿冒ID值 3,28

科胜讯CX20753 / 4仿冒ID值 3

科胜讯CX20755仿冒ID值 3

科胜讯CX20756仿冒ID值 3,13

科胜讯CX20757仿冒ID值 3

IDTIDT92HD66C3 / 65仿冒ID值 3

IDTIDT92HD71B7X仿冒ID值 3

IDTIDT92HD73C1X5仿冒ID值 19

IDTIDT92HD75B2X5仿冒ID值 3

IDTIDT92HD75B3X5仿冒ID值 3,11

IDTIDT92HD99BXX仿冒ID值 3

IDTIDT92HD87B1仿冒ID值 3

IDTIDT92HD81B1C5仿冒ID值 3,11

IDTIDT92HD81B1X5仿冒ID值 3,11,12,20,21,28

IDTIDT92HD87B1 / 3仿冒ID值 12,13

IDTIDT92HD87B2 / 4仿冒ID值 12

IDTIDT92HD90BXX仿冒ID值 3,12

IDTIDT92HD91BXX0x100102,0x100303仿冒ID值 3,12,13,33,84

IDTIDT92HD93BXX0x100203,仿冒ID值 12

IDTIDT92HD95仿冒ID值 12

通过VT18020x100000,仿冒ID值 3,33

通过VT2020 / 20210x100100,仿冒ID值 5,7,9

英特尔HD4600

AMDRadeon 290 / 290X

Nvidia公司GK208

Nvidia公司GM200

Nvidia公司GM204

Nvidia公司GM206

Nvidia公司GP102

Nvidia公司GP104

Nvidia公司GP106

Nvidia公司GP107

Nvidia公司GP108​

基本原理

在电脑开机时(对应_INI method)和睡眠唤醒时(对应_WAK method)调用关闭Nvidia独显的Method。

这个网站http://hybrid-graphics-linux.tuxfamily.org/index.php?title=ACPI_calls总结了关闭Nvidia显卡的常见methods,还列举了一些机型的具体情况,大家可以去看看,弄清楚自己电脑关闭显卡的method究竟是哪个,然后结合这个帖子来修改DSDT.

正如上面那个网站所示,关闭Nvidia独显一般有两种方法:一、使用 _DSM + _PS3;二、直接用_OFF(或者DOFF,SGOF等等,有些机型是不同的);

虽然上面那个网站一般都是直接调用OFF()函数来关闭独显的,但个人觉得如果有_DSM和_PS3的话,先使用方法一比较好,因为方法二可能会有一些影响,比如CPU变频的问题。(具体请看参考帖子[教程] 解决Optimus 和CPU Turbo 变频冲突)。

具体方法

很多人喜欢把SSDT的显卡部分移到DSDT中然后添加关闭独显的代码,并且开机DropOEMSSDT只用DSDT。但是我个人觉得这样子很麻烦,首先在移动过程中可能会产生错误,而且Drop掉SSDT后,DSDT中的那些External variables,methods就无法access了,因此DSDT中用到这些Objects,Methods的地方就会产生问题。如果Drop SSDT的目的是为了使用clover和变色龙的Generate P-States和C-States的话,clover可以只Drop掉有CPU信息的SSDT,变色龙可以把除有CPU信息的其他SSDT放在Extra目录下再DropSSDT,所以我认为完全没有必要花时间来移动显卡部分或者其他东西。如果DSDT和SSDT要相互调用对方的函数,那就在definition block那里加上External就好了。(如果新人看不懂这一段就跳过吧)说了那么多废话,终于开始了。

注意,在修改DSDT和SSDT之前,可以用这个帖子介绍的方法先生成dsl文件,可以减少错误,还有其他错误自己爬帖解决。不过如果你某个DSDT或SSDT有错误不能解决但你不需要再把它编译成AML文件的话,可以不用管它。

方法一:搜索函数

首先在DSDT和SSDT中搜索找到要用的函数_WAK,_INI,_PS3,_DSM。_WAK一般只有一个。_INI可能有很多个,最好用\_SB.PCI0下或\_SB.PCI0.PEG0.PEGP的。_PS3只有一个,如果没有的话看方法二。_DSM会有很多个,一定要用\_SB.PCI0.PEG0.PEGP下的,如果\_SB.PCI0.PEG0.PEGP下没有,搜索看看Device(GFX0)下有没有,如果都没有就看方法二.(注意,以下步骤是默认你DSDT的相关methods为一般情况,若有不同需根据你自己的DSDT做相应更改)

方法一:在_WAK之前新建一个Method PINI()

Method (PINI, 0, NotSerialized)

{

\_SB.PCI0.PEG0.PEGP._DSM (Buffer (0x10)

{

/* 0000 */    0xF8, 0xD8, 0x86, 0xA4, 0xDA, 0x0B, 0x1B, 0x47,

/* 0008 */    0xA7, 0x2B, 0x60, 0x42, 0xA6, 0xB5, 0xBE, 0xE0

}, 0x0100, 0x1A, Buffer (0x04)

{

0x01, 0x00, 0x00, 0x03

})

\_SB.PCI0.PEG0.PEGP._PS3 ()

}

方法一:在_WAK和适当的_INI中调用PINI()

_WAK和_INI可能不在同一个DSDT或SSDT中,没有关系

Method (_WAK, 1, Serialized)

{

PINI ()

......

[。。。省略。。。]

Method (_INI, 0, NotSerialized)

{

PINI ()

.......

}

方法一:编译错误

如果有类似以下的错误

Error Object does not exist (PINI)

在DefinitionBlock(在DSDT和SSDT的最上面)加上以下代码

External(PINI, MethodObj)

方法一:错误修正示范:

DefinitionBlock ("acpi_dsdt.aml", "DSDT", 1, "LENOVO", "CB-01   ", 0x00000001)

{

External (_SB_.PCI0.PAUD.PUAM, MethodObj)    // Warning: Unresolved Method, guessing 0 arguments (may be incorrect, see warning above)

External (_SB_.PCI0.XHC_.DUAM, MethodObj)    // Warning: Unresolved Method, guessing 0 arguments (may be incorrect, see warning above)

External (_SB_.TPM_.PTS_, MethodObj)    // Warning: Unresolved Method, guessing 1 arguments (may be incorrect, see warning above)

External (_PR_.CFGD, FieldUnitObj)

External (_PR_.CPU0._PPC, IntObj)

External (_PR_.CPU0._PSS, PkgObj)

External (PINI, MethodObj)

如果错误提示Object does not exist (\_SB.PCI0.PEG0.PEGP._PS3)

在DefinitionBlock加上

External(_SB_.PCI0.PEG0.PEGP._PS3, MethodObj)

如果错误提示Object does not exist (\_SB.PCI0.PEG0.PEGP._DSM)

在DefinitionBlock加上

External(_SB_.PCI0.PEG0.PEGP._DSM, MethodObj)

方法一:保存编译

没有错误了,编译,save AML,把修改了的DSDT.aml, SSDT.aml和其他所以没有修改的SSDT*.aml放在Extra目录(变色龙),或patched文件夹(Clover),这样的话要DropSSDT。开机,幸运的话,Nvidia显卡应该被屏蔽了。

方法二:没有_PS3函数

如果没有_PS3函数,或者使用上面的方法没效果,那就试试这个方法吧。

在_WAK和适当的_INI里面加入\_SB.PCI0.PEG0.PEGP._OFF()

Method (_WAK, 1, Serialized)

{

\_SB.PCI0.PEG0.PEGP._OFF()

......

[。。。省略。。。]

Method (_INI, 0, NotSerialized)

{

\_SB.PCI0.PEG0.PEGP._OFF()

.......

}

方法二:编译错误

如果编译时有错误,像方法一的4中那样解决错误即可。

方法二:编译保存

没有错误了,编译,save AML,把修改了的DSDT.aml, SSDT.aml和其他所以没有修改的SSDT*.aml放在Extra目录(变色龙),或patched文件夹(Clover),这样的话要DropSSDT。开机,幸运的话,Nvidia显卡应该被屏蔽了。

查看是否生效

如何查看是否成功屏蔽Nvidia独显:打开“系统信息”→“图形卡/显示器”,若只有Intel显卡的信息就证明屏蔽成功。若成功了就支持一下吧!


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11632478.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存