Win10论坛

Win10正式版系统下载主题平板

重定义Modern UI,打造完美Windows全新体验

Windows10下载|安装|新手宝典|必备软件

搜索
查看: 171039|回复: 930

[原创内容] (原创)GT200系列显卡的EFI-String和DSDT驱动,更新NVCAP说明   [复制链接]

UID
38564
帖子
1153
PB币
5599
贡献
1
技术
172
活跃
379

远景技术达人

发表于 2009-7-19 15:53:27
本帖最后由 tonycatxia 于 2009-12-19 16:43 编辑

为了Snow Leopard,我把自己的HD4850换成了微星(MSI) N260GTX-T2D896-OC,显卡出厂时就预超频到了core 655MHz, shader 1408MHz, memory 2100MHz, 3DMark Vantage P级别得分从4850的6978分到了现在的12418多分,性能提升基本让我满意

其实换显卡主要是因为我的HD4850不是公版设计,以后升级到snow leopard可能比较麻烦,需要修改原版驱动,如果是公版的HD4850或HD4870,可以非常顺利的在snow leopard里使用,甚至使用efi-string或dsdt的方式驱动

言归正转,驱动gt200系列显卡你需要EVGA的GTX285驱动和netkas的Enabler_for_Nvidia_and_multiple_ATI_cards,不过其实可以用efi-string或dsdt的方式代替掉netkas的enabler,昨天我用了一个晚上的时间搞定了gtx260的efi-string和dsdt的驱动.

首先是EFI-String,把附件解压,然后打开终端,进入附件文件夹目录,输入
  1. ./gfxutil -f display
复制代码
之后你得到这样的一行信息
  1. DevicePath = PciRoot(0x1)/Pci(0x1,0x0)/Pci(0x0,0x0)
复制代码
这是你显卡的硬件位置,然后打开附件里in.plist
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3. <plist version="1.0">
  4. <dict>
  5.         <key>PciRoot(0x1)/Pci(0x1,0x0)/Pci(0x0,0x0)</key>
  6.         <dict>
  7.                 <key>@0,compatible</key>
  8.                 <string>NVDA,NVMac</string>
  9.                 <key>@0,device_type</key>
  10.                 <string>display</string>
  11.                 <key>@0,name</key>
  12.                 <string>NVDA,Display-A</string>
  13.                 <key>@1,compatible</key>
  14.                 <string>NVDA,NVMac</string>
  15.                 <key>@1,device_type</key>
  16.                 <string>display</string>
  17.                 <key>@1,name</key>
  18.                 <string>NVDA,Display-B</string>
  19.                 <key>NVCAP</key>
  20.                 <data>
  21.                 BQAAAAAAAwAMAAAAAAAACwAAAAA=
  22.                 </data>
  23.                 <key>NVPM</key>
  24.                 <data>
  25.                 AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
  26.                 </data>
  27.                 <key>VRAM,totalsize</key>
  28.                 <data>
  29.                 AAAAOA==
  30.                 </data>
  31.                 <key>device_type</key>
  32.                 <string>NVDA,Parent</string>
  33.                 <key>model</key>
  34.                 <string>NVIDIA GeForce GTX 260</string>
  35.                 <key>name</key>
  36.                 <string>display</string>
  37.                 <key>rom-revision</key>
  38.                 <string>NVIDIA GeForce GTX 260 OpenGL Engine [EFI]</string>
  39.         </dict>
  40. </dict>
  41. </plist>
复制代码
如果你的硬件位置和内置的位置不一样,把它修改成你刚刚得到的数据
修改plist文件请使用PlistEditor Pro,否则你根本不知道
这里NVCAP的值
  1.                 <key>NVCAP</key>
  2.                 <data>
  3.                 BQAAAAAAAwAMAAAAAAAACwAAAAA=
  4.                 </data>
复制代码
其实是
  1. 05000000 00000300 0C000000 0000000B 00000000
复制代码
因为每块显卡的NVCAP和VRAM的值可能不一样,因此我们可能需要修改这两项
NVCAP的值需要在驱动显卡的情况下获得,使用netkas的enabler驱动你的显卡,然后在终端下输入
  1. ioreg -l -w0 | grep NVCAP
复制代码
你会得这样的输出
  1. ioreg -l -w0 | grep NVCAP    | |   |     |   "NVCAP" = <05000000000003000c0000000000000b0000000000000000>
复制代码
然后把你的nvcap值写入到in.plist里

更新NVCAP说明
部分显卡出现远离主板的DVI接口不能更改分辨率的问题,发现是nvcap的问题,
原来是
05000000000003000c0000000000000b00000000
改成
0400000000000f00000000000000000700000000
两个DVI接口都支持更改分辨率了
这里提供三组NVCAP值,供大家测试
  1. 04000000000003001c0000000000000a00000000
  2. 0400000000000f00000000000000000700000000
  3. 05000000000003000c0000000000000b00000000
复制代码


而VRAM,totalsize值取决于你的显卡
896M显存对应00000038
1024M显存对应00000040
你可以把model改成你的显卡的型号,比如NVIDIA GeForce GTX 275, NVIDIA GeForce GTX280
全部修改完毕以后,在终端里运行
  1. ./gfxutil -i xml -o hex ./in.plist ./out.hex
复制代码
用文本编辑打开out.hex,里面就是做好的EFI-String了,
复制String到com.apple.boot.plist的device-properties下面,然后删掉ATY_init.kext,重启 -v -f应该就可以了
制作完成的com.apple.boot.plist应该是这个样子的
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3. <plist version="1.0">
  4. <dict>
  5.         <key>Kernel</key>
  6.         <string>mach_kernel</string>
  7.         <key>Kernel Flags</key>
  8.         <string></string>
  9.         <key>device-properties</key>
  10.         <string>6c0200000100000001000000600200000d00000002010c00d041030a010000000101060000010101060000007fff04000e0000004e00560050004d0000002000000001000000000000000000000000000000000000000000000000000000220000005600520041004d002c0074006f00740061006c00730069007a006500000008000000000000381c0000006400650076006900630065005f00740079007000650000000f0000004e5644412c506172656e740e0000006e0061006d00650000000b000000646973706c617922000000400030002c006400650076006900630065005f00740079007000650000000b000000646973706c617922000000400031002c006400650076006900630065005f00740079007000650000000b000000646973706c6179100000006d006f00640065006c0000001a0000004e5649444941204765466f726365204754582032363020000000400031002c0063006f006d00700061007400690062006c00650000000e0000004e5644412c4e564d616314000000400030002c006e0061006d0065000000120000004e5644412c446973706c61792d4114000000400031002c006e0061006d0065000000120000004e5644412c446973706c61792d4220000000400030002c0063006f006d00700061007400690062006c00650000000e0000004e5644412c4e564d6163100000004e00560043004100500000001800000005000000000003000c0000000000000b000000001e00000072006f006d002d007200650076006900730069006f006e0000002e0000004e5649444941204765466f7263652047545820323630204f70656e474c20456e67696e65205b4546495d</string>
  11. </dict>
  12. </plist>
复制代码
然后是DSDT驱动部分,我们知道,现在通过在dsdt里添加相关代码,可以实现和efi-string相同的效果,而且dsdt的方法有一个好处,就是系统概述的PCI卡那里会出现显卡的信息,这是其他方法没有办法做到的,对于追求完美的人来说,这样更接近真正的mac。
图片 1.png

关于如何使用DSDT补丁请参考我的那篇使用ACPI Patcher制作DSDT补丁,你可以先建立一个其他显卡的dsdt,然后把下面GTX260的代码替换过去,也可以把代码直接增加到PCI0节的下面.
  1.             Device (PEGP)
  2.             {
  3.                 Name (_ADR, 0x00010000)
  4.                 Device (GFX0)
  5.                 {
  6.                     Name (_ADR, Zero)
  7.                     Name (_SUN, One)
  8.                     Method (_DSM, 4, NotSerialized)
  9.                     {
  10.                         Store (Package (0x16)
  11.                             {
  12.                                 "@0,compatible",
  13.                                 Buffer (0x0B)
  14.                                 {
  15.                                     "NVDA,NVMac"
  16.                                 },

  17.                                 "@0,device_type",
  18.                                 Buffer (0x08)
  19.                                 {
  20.                                     "display"
  21.                                 },

  22.                                 "@0,name",
  23.                                 Buffer (0x0F)
  24.                                 {
  25.                                     "NVDA,Display-A"
  26.                                 },

  27.                                 "@1,compatible",
  28.                                 Buffer (0x0B)
  29.                                 {
  30.                                     "NVDA,NVMac"
  31.                                 },

  32.                                 "@1,device_type",
  33.                                 Buffer (0x08)
  34.                                 {
  35.                                     "display"
  36.                                 },

  37.                                 "@1,name",
  38.                                 Buffer (0x0F)
  39.                                 {
  40.                                     "NVDA,Display-B"
  41.                                 },

  42.                                 "NVCAP",
  43.                                 Buffer (0x18)
  44.                                 {
  45.                                     /* 0000 */    0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00,
  46.                                     /* 0008 */    0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b,
  47.                                     /* 0010 */    0x00, 0x00, 0x00, 0x00
  48.                                 },

  49.                                 "VRAM,totalsize",
  50.                                 Buffer (0x04)
  51.                                 {
  52.                                     0x00, 0x00, 0x00, 0x38
  53.                                 },

  54.                                 "device_type",
  55.                                 Buffer (0x0C)
  56.                                 {
  57.                                     "NVDA,Parent"
  58.                                 },

  59.                                 "model",
  60.                                 Buffer (0x17)
  61.                                 {
  62.                                     "NVIDIA GeForce GTX 260"
  63.                                 },

  64.                                 "rom-revision",
  65.                                 Buffer (0x5)
  66.                                 {
  67.                                     "3434"
  68.                                 }
  69.                             }, Local0)
  70.                         DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
  71.                         Return (Local0)
  72.                     }
  73.                 }
  74.             }
复制代码
其中NVCAP和VRAM值是我的GTX260显卡的参数,你可以根据自己的显卡调整.

更新修改DSDT显卡位置:
DSDT里默认的显卡位置是PciRoot(0x1)/Pci(0x1,0x0)/Pci(0x0,0x0),
但是一些显卡的位置可能不一样,虽然不影响显卡驱动(这个和efi-string不一样),
但是PCI卡那里的信息就没有了,因此可以修改硬件位置来解决这个问题,
假设用gfxutil得到的硬件位置是PciRoot(0x1)/Pci(0x3,0x0)/Pci(0x0,0x0)
PCI Device的第一节是Pci(0x3,0x0),它的另一个形式是PciAdr(0x30000),
我们来看PciAdr的定义
  1. PciAdr(uint32 adr) - alias for PCI node with using alternative address value.
  2. adr is PCI device "_ADR" property value that your may find from pci device properties in IOACPIPlane.
复制代码
因此,这里的_ADR就是0x30000,所以把
  1. Device (PEGP)
  2.             {
  3.                 Name (_ADR, 0x00010000)
  4.                 Device (GFX0)
  5.                 {
  6.                  ...
复制代码
修改为
  1. Device (PEGP)
  2.             {
  3.                 Name (_ADR, 0x00030000)
  4.                 Device (GFX0)
  5.                 {
  6.                  ...
复制代码
即可解决这个问题

把编译好的DSDT放在mac分区的根目录或者Extra文件夹下,删除原来的ATY_init.kext,
重启,使用-v -f 启动,应该就能成功启动了
图片 2.png


至此GT200系列显卡的EFI-String和DSDT驱动就说完了,这个方法在Snow Leopard一样适用,
现阶段开启Snow Leopard的64位内核的唯一方法就是使用Efi-String或DSDT来驱动显卡了
补一张OPENGL性能测试
260_1920.png

附件是gfxutil工具和制作好的EFI_String及DSDT的范例
GeForce GTX 260 EFI-String.zip (53.22 KB, 下载次数: 5316)
8

查看全部评分

Rank: 5Rank: 5Rank: 5

UID
543946
帖子
158
PB币
1598
贡献
0
技术
20
活跃
246
发表于 2009-7-19 17:51:25
顶。。好东西阿。。。

Rank: 5Rank: 5Rank: 5

UID
543946
帖子
158
PB币
1598
贡献
0
技术
20
活跃
246
发表于 2009-7-19 17:52:01
safa是我的。。哈。。。

UID
38564
帖子
1153
PB币
5599
贡献
1
技术
172
活跃
379

远景技术达人

发表于 2009-7-19 19:41:29
dsdt部分补完

Rank: 5Rank: 5Rank: 5

UID
673047
帖子
251
PB币
377
贡献
0
技术
55
活跃
24
发表于 2009-7-19 20:24:10
学习。。。再学习。。。虽然我只记住了要选公版显卡

糖糖水果大魔头

UID
28937
帖子
43004
PB币
41842
贡献
0
技术
10
活跃
225
发表于 2009-7-19 20:36:09
威廉留个AIM号给我吧....

Rank: 9

UID
204600
帖子
1354
PB币
15009
贡献
1
技术
26
活跃
156

7周年庆典勋章

发表于 2009-7-19 21:01:03
谢谢,学习一下,看看我的GTX275能行不?

UID
38564
帖子
1153
PB币
5599
贡献
1
技术
172
活跃
379

远景技术达人

发表于 2009-7-19 22:29:51
gtx275可以用,应该直接拿来用就可以了

Rank: 1

UID
696964
帖子
103
PB币
80
贡献
0
技术
0
活跃
12
发表于 2009-7-19 23:41:35
to 威廉第三:
现在nv都很少出公板了,GTS系列好像NV就是完全不管,都是下游厂商设计
我正在考虑要不要买个9800GT的公板,方便以后装snow leopard,你觉得这样好吗?

Rank: 9

UID
204600
帖子
1354
PB币
15009
贡献
1
技术
26
活跃
156

7周年庆典勋章

发表于 2009-7-20 00:06:27
8# 威廉第三 谢谢,按照你的方法已成功添加到com.apple.Boot.plist,并使用正常,正像你说的NVPM的值一样,我的显卡位置和你的不同是在PciRoot(0x1)/Pci(0x3,0x0)/Pci(0x0,0x0),另外DSDT不会搞,还在学习中。

UID
38564
帖子
1153
PB币
5599
贡献
1
技术
172
活跃
379

远景技术达人

发表于 2009-7-20 01:10:39
to 威廉第三:
现在nv都很少出公板了,GTS系列好像NV就是完全不管,都是下游厂商设计
我正在考虑要不要买个9800GT的公板,方便以后装snow leopard,你觉得这样好吗?
javaite 发表于 2009-7-19 23:41

9800GT的公版应该是可以,不过你可以考虑9800GTX+,现在价格差不多700+,注意买双DVI的公版就好

Rank: 1

UID
696964
帖子
103
PB币
80
贡献
0
技术
0
活跃
12
发表于 2009-7-20 09:27:08
9800GT的公版应该是可以,不过你可以考虑9800GTX+,现在价格差不多700+,注意买双DVI的公版就好
威廉第三 发表于 2009-7-20 01:10

可现在很难找到公版的9800GTX+,有什么型号可以推荐下吗?我是希望找能只用EFI String驱动的显卡

我现在看上的是这个索泰 N9800GT-512D3 AMP公版,这个可以做到在leopaed和snow leopard下只用EFI String驱动吗?

Rank: 2Rank: 2

UID
654163
帖子
402
PB币
304
贡献
0
技术
0
活跃
349
发表于 2009-7-20 10:38:31
thank you for share

UID
38564
帖子
1153
PB币
5599
贡献
1
技术
172
活跃
379

远景技术达人

发表于 2009-7-20 10:49:05
可现在很难找到公版的9800GTX+,有什么型号可以推荐下吗?我是希望找能只用EFI String驱动的显卡

我现在看上的是这个索泰 N9800GT-512D3 AMP公版,这个可以做到在leopaed和snow leopard下只用EFI String驱动吗? ...
javaite 发表于 2009-7-20 09:27

其实只要是2×DVI+S端子的N卡,即使不是公版应该也可以的,
不推荐非公版的原因就是厂商喜欢在非公版里使用多种端口,
什么DVI,VGA,HDMI,DisplayPort,恨不得全部给它加上,
而mac的驱动没有windows下的灵活,它是针对公版卡开发的,
那种多端口的卡可能就有某个或几个端口不能用

Rank: 2Rank: 2

UID
113373
帖子
382
PB币
1450
贡献
0
技术
0
活跃
642
发表于 2009-7-20 12:21:24
谢谢威廉第三,我的是影驰GTX275,删掉ATY_init.kext可以正常运行了,DSDT补丁正在学习中,getDSDT.sh
在mac中怎么运行?我的GTX275一改分辨率就蓝屏,用的是DVI连接,DVI转VGA也不行,完美难啊!
头像被屏蔽

Rank: 2Rank: 2

UID
83930
帖子
454
PB币
0
贡献
0
技术
4
活跃
10
发表于 2009-7-20 13:07:37
提示: 作者被禁止或删除 内容自动屏蔽

Rank: 2Rank: 2

UID
113373
帖子
382
PB币
1450
贡献
0
技术
0
活跃
642
发表于 2009-7-20 18:45:19
to 威廉第三:
我按教程制作了DSDT补丁,并删除了disable.knxt和ATY_init.kext,除了不能改分辨率其他运行正常,但是系统概述的PCI卡那里没有出现显卡的信息,不知什么原因?
系统:10.5.7
显卡:GTX275
主板:EX58-UD5

UID
38564
帖子
1153
PB币
5599
贡献
1
技术
172
活跃
379

远景技术达人

发表于 2009-7-20 18:50:04
17# transnova
把你的dsdt补丁发给我,还有就是用./gfxutil -f display命令获得当前显卡位置,把结果发上来

Rank: 2Rank: 2

UID
113373
帖子
382
PB币
1450
贡献
0
技术
0
活跃
642
发表于 2009-7-20 21:33:55
17# transnova
把你的dsdt补丁发给我,还有就是用./gfxutil -f display命令获得当前显卡位置,把结果发上来
威廉第三 发表于 2009-7-20 18:50


这是我的DSDT及devicepath

DSDT.zip

7.18 KB, 下载次数: 44, 下载积分: PB币 -1

UID
38564
帖子
1153
PB币
5599
贡献
1
技术
172
活跃
379

远景技术达人

发表于 2009-7-21 11:15:47
本帖最后由 威廉第三 于 2009-7-21 11:16 编辑
这是我的DSDT及devicepath
transnova 发表于 2009-7-20 21:33

试试这个
DSDT.rar (15.89 KB, 下载次数: 109)
另外,你的GTX275可能因为不是公版卡的原因,才会出现这样的问题
回顶部
Copyright (C) 2005-2020 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛 | 电脑硬件 | 安卓软件