- 积分
- 573
- 最后登录
- 2024-4-23
- 精华
- 2
- 阅读权限
- 205
- 主题
- 35
- UID
- 38564
- 帖子
- 1153
- PB币
- 5526
- 威望
- 17
- 贡献
- 1
- 技术
- 172
- 活跃
- 558
- 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,把附件解压,然后打开终端,进入附件文件夹目录,输入之后你得到这样的一行信息- DevicePath = PciRoot(0x1)/Pci(0x1,0x0)/Pci(0x0,0x0)
复制代码 这是你显卡的硬件位置,然后打开附件里in.plist- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
- <plist version="1.0">
- <dict>
- <key>PciRoot(0x1)/Pci(0x1,0x0)/Pci(0x0,0x0)</key>
- <dict>
- <key>@0,compatible</key>
- <string>NVDA,NVMac</string>
- <key>@0,device_type</key>
- <string>display</string>
- <key>@0,name</key>
- <string>NVDA,Display-A</string>
- <key>@1,compatible</key>
- <string>NVDA,NVMac</string>
- <key>@1,device_type</key>
- <string>display</string>
- <key>@1,name</key>
- <string>NVDA,Display-B</string>
- <key>NVCAP</key>
- <data>
- BQAAAAAAAwAMAAAAAAAACwAAAAA=
- </data>
- <key>NVPM</key>
- <data>
- AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
- </data>
- <key>VRAM,totalsize</key>
- <data>
- AAAAOA==
- </data>
- <key>device_type</key>
- <string>NVDA,Parent</string>
- <key>model</key>
- <string>NVIDIA GeForce GTX 260</string>
- <key>name</key>
- <string>display</string>
- <key>rom-revision</key>
- <string>NVIDIA GeForce GTX 260 OpenGL Engine [EFI]</string>
- </dict>
- </dict>
- </plist>
复制代码 如果你的硬件位置和内置的位置不一样,把它修改成你刚刚得到的数据
修改plist文件请使用PlistEditor Pro,否则你根本不知道
这里NVCAP的值- <key>NVCAP</key>
- <data>
- BQAAAAAAAwAMAAAAAAAACwAAAAA=
- </data>
复制代码 其实是- 05000000 00000300 0C000000 0000000B 00000000
复制代码 因为每块显卡的NVCAP和VRAM的值可能不一样,因此我们可能需要修改这两项
NVCAP的值需要在驱动显卡的情况下获得,使用netkas的enabler驱动你的显卡,然后在终端下输入- ioreg -l -w0 | grep NVCAP
复制代码 你会得这样的输出- ioreg -l -w0 | grep NVCAP | | | | "NVCAP" = <05000000000003000c0000000000000b0000000000000000>
复制代码 然后把你的nvcap值写入到in.plist里
更新NVCAP说明
部分显卡出现远离主板的DVI接口不能更改分辨率的问题,发现是nvcap的问题,
原来是
05000000000003000c0000000000000b00000000
改成
0400000000000f00000000000000000700000000
两个DVI接口都支持更改分辨率了
这里提供三组NVCAP值,供大家测试
- 04000000000003001c0000000000000a00000000
- 0400000000000f00000000000000000700000000
- 05000000000003000c0000000000000b00000000
复制代码
而VRAM,totalsize值取决于你的显卡
896M显存对应00000038
1024M显存对应00000040
你可以把model改成你的显卡的型号,比如NVIDIA GeForce GTX 275, NVIDIA GeForce GTX280
全部修改完毕以后,在终端里运行
- ./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应该是这个样子的- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
- <plist version="1.0">
- <dict>
- <key>Kernel</key>
- <string>mach_kernel</string>
- <key>Kernel Flags</key>
- <string></string>
- <key>device-properties</key>
- <string>6c0200000100000001000000600200000d00000002010c00d041030a010000000101060000010101060000007fff04000e0000004e00560050004d0000002000000001000000000000000000000000000000000000000000000000000000220000005600520041004d002c0074006f00740061006c00730069007a006500000008000000000000381c0000006400650076006900630065005f00740079007000650000000f0000004e5644412c506172656e740e0000006e0061006d00650000000b000000646973706c617922000000400030002c006400650076006900630065005f00740079007000650000000b000000646973706c617922000000400031002c006400650076006900630065005f00740079007000650000000b000000646973706c6179100000006d006f00640065006c0000001a0000004e5649444941204765466f726365204754582032363020000000400031002c0063006f006d00700061007400690062006c00650000000e0000004e5644412c4e564d616314000000400030002c006e0061006d0065000000120000004e5644412c446973706c61792d4114000000400031002c006e0061006d0065000000120000004e5644412c446973706c61792d4220000000400030002c0063006f006d00700061007400690062006c00650000000e0000004e5644412c4e564d6163100000004e00560043004100500000001800000005000000000003000c0000000000000b000000001e00000072006f006d002d007200650076006900730069006f006e0000002e0000004e5649444941204765466f7263652047545820323630204f70656e474c20456e67696e65205b4546495d</string>
- </dict>
- </plist>
复制代码 然后是DSDT驱动部分,我们知道,现在通过在dsdt里添加相关代码,可以实现和efi-string相同的效果,而且dsdt的方法有一个好处,就是系统概述的PCI卡那里会出现显卡的信息,这是其他方法没有办法做到的,对于追求完美的人来说,这样更接近真正的mac。
关于如何使用DSDT补丁请参考我的那篇使用ACPI Patcher制作DSDT补丁,你可以先建立一个其他显卡的dsdt,然后把下面GTX260的代码替换过去,也可以把代码直接增加到PCI0节的下面.- Device (PEGP)
- {
- Name (_ADR, 0x00010000)
- Device (GFX0)
- {
- Name (_ADR, Zero)
- Name (_SUN, One)
- Method (_DSM, 4, NotSerialized)
- {
- Store (Package (0x16)
- {
- "@0,compatible",
- Buffer (0x0B)
- {
- "NVDA,NVMac"
- },
- "@0,device_type",
- Buffer (0x08)
- {
- "display"
- },
- "@0,name",
- Buffer (0x0F)
- {
- "NVDA,Display-A"
- },
- "@1,compatible",
- Buffer (0x0B)
- {
- "NVDA,NVMac"
- },
- "@1,device_type",
- Buffer (0x08)
- {
- "display"
- },
- "@1,name",
- Buffer (0x0F)
- {
- "NVDA,Display-B"
- },
- "NVCAP",
- Buffer (0x18)
- {
- /* 0000 */ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00,
- /* 0008 */ 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b,
- /* 0010 */ 0x00, 0x00, 0x00, 0x00
- },
- "VRAM,totalsize",
- Buffer (0x04)
- {
- 0x00, 0x00, 0x00, 0x38
- },
- "device_type",
- Buffer (0x0C)
- {
- "NVDA,Parent"
- },
- "model",
- Buffer (0x17)
- {
- "NVIDIA GeForce GTX 260"
- },
- "rom-revision",
- Buffer (0x5)
- {
- "3434"
- }
- }, Local0)
- DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
- Return (Local0)
- }
- }
- }
复制代码 其中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的定义- PciAdr(uint32 adr) - alias for PCI node with using alternative address value.
- adr is PCI device "_ADR" property value that your may find from pci device properties in IOACPIPlane.
复制代码 因此,这里的_ADR就是0x30000,所以把- Device (PEGP)
- {
- Name (_ADR, 0x00010000)
- Device (GFX0)
- {
- ...
复制代码 修改为- Device (PEGP)
- {
- Name (_ADR, 0x00030000)
- Device (GFX0)
- {
- ...
复制代码 即可解决这个问题
把编译好的DSDT放在mac分区的根目录或者Extra文件夹下,删除原来的ATY_init.kext,
重启,使用-v -f 启动,应该就能成功启动了
至此GT200系列显卡的EFI-String和DSDT驱动就说完了,这个方法在Snow Leopard一样适用,
现阶段开启Snow Leopard的64位内核的唯一方法就是使用Efi-String或DSDT来驱动显卡了
补一张OPENGL性能测试
附件是gfxutil工具和制作好的EFI_String及DSDT的范例
GeForce GTX 260 EFI-String.zip
(53.22 KB, 下载次数: 5316)
|
-
8
查看全部评分
-
|