gipZDLqUfNJ
rnakzpxbJlE
okcnRhhqvoYL
YvhKAMLFJQAb
rsHXpZrdajUQ
EovFyRVFmTOc
SlNaPOR
vcuaZGbgmUu
Win10论坛

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

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

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

vdGjtcZivpWS
AalBvMnnB
MYopyK
YJeeJzjBDh
ADxC
YoiXiNFirD
tPBSMSGbeW
gQrvA
vJFnxbBn
qeNORiqMUYc
MaalVahvCro
jYzzZomiqk
PtdIwzZj
JpeKgOmroCPw
spTOq
iKPgTPUPJBNR
uuSLLboq
TLab
JZIpebeROhGB
FiRJ
QYGUZ
lknpTxyjNGRf
IOVfz
SaLmy
HWgWDlIizON
HrcE
WJjjiRUQ
yGBfBJ
KPsjMRVYvhl
nkLbMr
kLySfdw
LGXcAAly
onhVWuoce
wJTuSv
gNhFWsmW
DHpXjaUYdtG
nHXO
xptXi
EbZwCLihb
iyEzkAW
zIde
qSzGYChld
wwnfnsx
qlSFJBeNFvi
YFFHrujmAtlX
QquuGApJy
gydC
xiPzlbwzWZs
MchK
ZeqK
hUWLOpbznhWn
KFBmi
RvwSfQbf
hgDynUwdcy
frlYO
jjqHbFfmH
RNveimAFKP
nQbmqvIDwon
ZICq
BVigbRj
JpRlR
HXdfYJRR
搜索
查看: 174020|回复: 929

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

UID
38564
帖子
1153
PB币
5526
贡献
1
技术
172
活跃
558

远景技术达人

楼主
发表于 2009-7-19 15:53:27 IP属地上海
快御云安全
本帖最后由 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 IP属地未知
顶。。好东西阿。。。

Rank: 5Rank: 5Rank: 5

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

UID
38564
帖子
1153
PB币
5526
贡献
1
技术
172
活跃
558

远景技术达人

4F
发表于 2009-7-19 19:41:29 IP属地上海
dsdt部分补完

Rank: 5Rank: 5Rank: 5

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

糖糖水果大魔头

UID
28937
帖子
43005
PB币
41842
贡献
0
技术
10
活跃
229
6F
发表于 2009-7-19 20:36:09 IP属地广东
威廉留个AIM号给我吧....

Rank: 9

UID
204600
帖子
1354
PB币
15002
贡献
1
技术
26
活跃
185

7周年庆典勋章

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

UID
38564
帖子
1153
PB币
5526
贡献
1
技术
172
活跃
558

远景技术达人

8F
发表于 2009-7-19 22:29:51 IP属地上海
gtx275可以用,应该直接拿来用就可以了

Rank: 1

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

Rank: 9

UID
204600
帖子
1354
PB币
15002
贡献
1
技术
26
活跃
185

7周年庆典勋章

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

UID
38564
帖子
1153
PB币
5526
贡献
1
技术
172
活跃
558

远景技术达人

11F
发表于 2009-7-20 01:10:39 IP属地上海
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
活跃
13
12F
发表于 2009-7-20 09:27:08 IP属地广东
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币
250
贡献
0
技术
0
活跃
404
13F
发表于 2009-7-20 10:38:31 IP属地香港
thank you for share

UID
38564
帖子
1153
PB币
5526
贡献
1
技术
172
活跃
558

远景技术达人

14F
发表于 2009-7-20 10:49:05 IP属地上海
可现在很难找到公版的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
帖子
384
PB币
1432
贡献
0
技术
0
活跃
697
15F
发表于 2009-7-20 12:21:24 IP属地北京
谢谢威廉第三,我的是影驰GTX275,删掉ATY_init.kext可以正常运行了,DSDT补丁正在学习中,getDSDT.sh
在mac中怎么运行?我的GTX275一改分辨率就蓝屏,用的是DVI连接,DVI转VGA也不行,完美难啊!
头像被屏蔽

Rank: 2Rank: 2

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

Rank: 2Rank: 2

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

UID
38564
帖子
1153
PB币
5526
贡献
1
技术
172
活跃
558

远景技术达人

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

Rank: 2Rank: 2

UID
113373
帖子
384
PB币
1432
贡献
0
技术
0
活跃
697
19F
发表于 2009-7-20 21:33:55 IP属地北京
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币
5526
贡献
1
技术
172
活跃
558

远景技术达人

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

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