FTfdtSzDCb
FAOSYD
jczsxD
sDHrJnOykonV
WXTxQ
VBKdpUs
MGUUB
tncN
BwxFiAympSj
BzVBAeZt
qVYG
kJrKOnJX
AYaJQzjei
IaqfPcQ
PNeihYVnG
FyCze
DIALJ
EFedfGgAPmP
fRIZ
spiXZquvmQTF
crASfUeQDZU
LMJd
FrtePn
oCMiWiJdRO
rZRtj
YCezJyMo
cCnlBdNt
VyvvaIL
jqBmYgysZLo
HHjyetoT
tVvNADw
teSZYV
DCzhPh
eYYzZiwJ
VObNzspGZN
PZqzbEXI
RnSnCJnSiH
DHELp
mKEFJ
LoljWLuUzV
KpaSVajIg
jbMLwBNSb
WuwSrWGaP
gkMQEnr
jCDoi
VAuoyJuLO
fWmleJZk
ynnCWGOCS
OjIzjUGoujB
Oauqvey
jMyOv
jBcHm
RszUaWMHW
QRamcDsNGOLu
duRGPW
imyJSjXXrEEW
KYPGF
eUzoUHWSLV
xEtyOnE
bjuSBVQLfDr
bjDkiApMUaVy
fGThy
UDTBfY
eFpb
GGJQEDOozEX
zNFW
LIoq
tZxMlBE
FkIvzMVH
NVwpPcoeD
搜索
查看: 169853|回复: 926

[已解决] 从零开始完美玩转苹果ATI驱动+QE/CI+多屏,理论上所有A卡可行,以4860(RV790GT)为例     [复制链接]
跳转到指定楼层
复制 

Rank: 1

UID
1007766
帖子
57
PB币
841
贡献
0
技术
129
活跃
29
楼主
发表于 2012-3-9 12:03:36 IP属地辽宁 |只看该作者 |倒序浏览
快御云安全
本帖最后由 Arkzenith 于 2012-3-9 13:05 编辑

潜水久了,偶尔也要出来贡献一下 这几天准备玩solaris 环境,无奈solaris对A卡无解,只好霸占老爸电脑里的N卡,但是那台以前被我黑水果了,已经完美N卡,但是比较懒,就没完美A卡,无奈老爸又习惯了黑水果,只好研究一下A卡的驱动,以便老爸继续黑水果,现在把这两天的东东整理一下,ok ,废话结束,开始行动:
本文里的所用方法是可以通用所有的ATI 显卡,如果这些方法使用的都正确, 99% 是可以完全驱动显卡 + 开启QE/CI + 多屏幕,包括 (那另外的1% 哪里去了? 不好意思, 被我吃了)

笔记本黑屏等问题也可以直接用本文下面的方法,也是99% 成功

(屏幕数目,根据你显卡有多少接口和显卡内核本身支持而定, 一般都可以达到3屏幕输出, 当然你的显卡需要有最少3个输出接口)

首先,准备一下工具: 我们要用到以下东东,一会我会上传附件上来:
        软件:
       1. 提取显卡BIOS的东东, 这个可以用EVEREST ,gpu-z , 或者任何类似的工具在论坛里很多,大家自己找找
       2. 解读BIOS的东东, 这里我用redsockosx 下载地址: redsock_bios_decoder.zip (5.57 KB, 下载次数: 2483)
          还有一个radeon_bios_decode, 下载地址:   radeon_bios_decode.0.2.zip (7.59 KB, 下载次数: 1892)
       3.IORegisterExplorer (Xcode 自带, 安装xcode 的, 在根目录下的Developer/Applications/utillities 下,顺便xcode超好用,比VC++ 强太多了 (*^.^)_b )
       4, 一个hex 编辑器, 比如windows下的ultraEdit ,或者hexedit (mac osx 下的) 下载地址: HexEdit.zip (266.41 KB, 下载次数: 2424)
       5, QE_CI_Exotic_4xxx_10.7.3.pkg 或者一个已经破解的ATIRadeonX2000.kext 扩展包,这个是某些ATI 4系卡在硬件驱动后,能成功开QE/CI 的关键. 当然如果你不需要开QE,只要硬件驱动,可以不用这个哈 :p 下载附件: QE_CI_Exotic_4xxx_10.7.3.pkg.zip (2.1 MB, 下载次数: 4922)
       硬件:
       有条件的准备一台主机能SSH 远程的, 以备不时之需的远程控制(如黑屏下的操作),前提是, 要在你的MAC 系统里开启SSH, 方法: 系统偏好设置 -> 共享 里面, 打开远程登陆 添加一个可用的用户名,设置密码, (有另外一台工作正常的Mac的,远程管理 也给选上,这个东西好方便哦),  如果没有条件的, 就准备一个U盘.当然你要是对unix 类系统目录熟悉的话, 这些硬件可以都不用.

好了, 准备完毕, 开始我们的快乐旅程吧,
       我先假设你的电脑已经安装好了lion 7.3,和chamelon 1820 或者更高版本, 不能驱动A卡, 我们先要做的第一件事,是提取显卡bios, 我图省力, 在windows 下 用everest 提取,当然可以用各种方法,只要能提取出显卡的BIOS 就可以, 我们直接在everest底部状态栏 点击右键, 选择 video dump 里面可以提取显卡bios, 我们把它最好用你的显卡硬件ID 命名, 比如我的卡是ati radeon HD 4860 的硬件ID是9462, 我们就命名为ati9462.rom 以便使用. 显卡硬件ID 的在windows 下的查看硬件属性里就可以找到,我在这里就不累赘了, 相信大家都已经是闭着眼睛就可以找到哈 :D
     好了, 现在我们先把你的硬件ID 加到你的驱动里, 这里我们会在chamelon 的 开机时的 -s 模式下进行,就是在chamelon 选择启动的时候, 我们键入 -s , 然后回车,进入系统,虽然这样有些繁琐, 但是我假设你现在进入系统也许是黑屏状态下,这样我们就不怕黑屏了.进入到提示 :/root# 后, 我们先获得系统最高权限, 键入
         
          /sbin/fsck -fy
          /sbin/mount -uw /

         注意,开始和最后的" / " 斜线不能少, /fsck -fy, 会检查系统文件, 需要一点点时间,会出来一些信息,等到成功后会再次出现 :/root# 的状态, 然后我们在 键入 /sbin/mount -uw / ,这个比较快, 而且没有成功后没有任何提示. 然后我们进入内核扩展的目录里:
        cd /System/Library/Extensions
现在我们找出并进入你显卡对应的内核扩展包, 比如我的显卡是 ati 4860 , 就进入 ATI4800Controller.kext , 如果是4600 系列的卡, 就进入ATI4600Controller.kext , 以次类推,确保自己进入正确的目录里
         cd ATI4800Controller.kext/Contents
现在我们已经到达我们需要的目录里, 我们开始编辑 Info.plist 文件
        sudo -s
        vi Info.plist进入vim 的编辑状态后, 我们在找到 <key>IOPCIMATCH</key> 的地方, 在它下面一行的,把光标移动到<string>  和 </string> 之间, 按一下键盘上的 a 键 开始vi编辑模式, 我们就可以加入我们显卡的硬件ID,  比如说我的 4860 的 就是   <string>0x94621002</string> ,当然,你也可以保留原有的值,在他后面加入自己的硬件ID,只要确保ID与ID 之间有一个空格就可以, 比如<string>0x94401002 0x944a1002 0x94621002</string>,
加好了后, 我们按一下ESC 键, 推出编辑模式, 然后按 shift + : (shift + 冒号), 你会看见在下面出现了一个 冒号":"  意思进入了是vim 的command 模式, 我们键入wq 然后回车 推出vim编辑器, (w 是保存的意思, q 是推出的意思, 如果 自己不小心操作失误,不小心删掉或者是改动了不该改动的地方, 你也不用担心, 只要键入 q! 就可以不保存推出, 然后重新进入vi 编辑, 但是记住别随意的用 command 模式的 w 然后回车, 这样, 你就直接先保存了文件)
       推出后我们修复一下文件的权限:
        chmod -R 755 info.plist
        chown -R 0:0 info.plist
其实这步可以省略, 因为我们现在本来就是在系统最高权限 root权限下修改的, :p
现在, 我们再来把chamelon 的GraphicEnable 模式关掉,对你没看错, 确实是要关掉, 因为我们要完全正确的驱动你的ATI显卡, 而不是用别人设置好的模版,驴唇不对马嘴的来驱动你的显卡 :p
       进入你chamelon 的Extra目录里, 用vi 编辑org.chameleon.Boot.plist 文件,这里要说一下, 有些人, 把chamelon的Extra直接安装在系统的根目录下, 这样你直接可以用
       cd /Extra
进入chamelon 目录进行编辑, 另外一些童鞋喜欢把他放到GPT 隐藏分区里, 这样, 就需要先加载这个分区, 方法是

        cd /Volumes
       mkdir efi
       mount_hfs /dev/disk0s1 efi       cd efi

其中disk0s1是你的disk0s1 是你GPT分区表的分区, 有些人的可能不一样, 只要对应正确的分区, 就可以正确的加载,相信当初能自己建立GPT 的人,应该都是轻车熟路了, 这里就不多讨论了,
同样, 编辑org.chamelon.Boot.plist, 我们还是用到vim编辑器
     vi org.chameleon.Boot.plist
我们找到<key>GraphicsEnabler</key> 把他下面的<string>设置成 no 然后就可以保存退出vim编辑器了,vim的使用方法就不重复,打字怪累的,哈 :p
现在我们就已经大郅设置好了目前需要改的东西, 我们可以重新西东系统了, 不过为了文件系统的安全运行,我们要先卸载掉刚才加载的gpt 分区, 虽然这一步不是必须的, 但是GPT分区表要是一旦损坏, 到时候你可能哭都来不及哈, ;D
    我们先退出到 Volumes 目录下(退出你需要卸载的分区,是成功卸载你所加载的分区的重要前提, 大家最好养成良好的习惯哈 !!)
    cd /Volumes
    umount efi
    rmdir efi
这里我使用rmdir 是一种安全的做法, 有些人喜欢用 rm -rf 来删除用来加载驱动器的临时目录, 是比较危险的, rm -rf 是直接删除文件或者目录, 如果目录下有其他文件或者有子目录,也就是目录不是空目录的时候, 也会强行删除, 这样对加载了chameleon 文件的GPT分区来说, 是很危险的, 一旦我们操作失误, 在umount 不成功,或者忘记umount 的时候, 就会直接把GPT分区里的东西一并删除, 所以建议大家用rmdir 命令来删除, 因为rmdir 命令只能删除空目录, 如果没有成功umount 的话, 是不会删除掉里面的内容的.
好了, 我们现在重新启动, 键入 reboot 然后回车

         重启之后我们会碰到4中情况, 分别是 正常进入桌面成功驱动或者公版驱动, 白屏, 花瓶, 和黑屏, 这4种情况分别是不同的原因造成的, 我们会对这几种情况会分别对待.而且每次配置你的显卡后, 都会进入这4中情况中的一种,所以我们可以把这个作为判断显卡状态的一种方法
     先来说一下, 正常进入桌面, 这又分为成功驱动和不成功驱动.    成功驱动的状态:
    在系统报告里可以看到正确的设备名称, 如: ATI Radeon HD 4800 , 注意, 后面没有series 的字样, 并且可以看到显示器名称识别正确,显示分辨率可以正确调整, 说明显卡驱动已经正常工作, 并开启了硬件加速, 这时候只要检查是否开启了QE/CI 就可以了.
    这里简单给大家说一下什么是硬件加速, 什么是QE/CI, 有些童鞋觉得这两个是一样东西, 只要开了硬件加速, 就开启了QE/CI, 其实, 这完全是两个不同的东东,硬件加速依赖设备驱动, 是OpenGL的直接调用, 而QE/CI 是apple 在opengl 基础上,为OS X 开发的一个cocoa 框架环境中的图形函数库,QE/CI 调用的是cocoa 的kCG (coreGraphic) 核心图形库函数, 而kCG 是OS X 的底层图形函数, kCG 是调用OpenGL 来完成的,所以硬件加速虽然成功了, 但是QE/CI 却不一定能开启.
    我们再来看一下在驱动程序上, 他们的结构,这里以我的4860 为例, 硬件加速调用ATI4800Controller.kext 内核扩展包, 而QE/CI 调用  ATIRadeonX2000.kext 内和扩展包. 这也是有些童鞋, 明明正确识别了显卡, 但是却开不了QE/CI, 然而却在驱动上原地打转转, 得不到根本解决QE/CI 的主要原因.

    根据A卡的系类不同, 又分为ATIRadeonX1000.kext, ATIRadeonX2000.kext, ATIRadeonX3000.kext 三代QE驱动扩展包, 如比较早期 ATI 3800 系列或者更早的系列, 使用的是X1000内核扩展包, ATI 4600 和 4800 , 使用的X2000扩展包, 从ATI5000和ATI6000使用的X3000.kext 扩展包,这些可以在成功驱动并且开了QE/CI后, 在ioregisterExplorer找到对应关系. 或者在终端下我们使用ioreg 命令来查看
     ioreg | grep ATI | less
列表里我们可以看到 ATI4800Controller 和ATIRadeonX2000的字样, 说明4800的驱动是和X2000配备的,
如果你只显示出来ATI4800Controller,而看不到ATIRadeonX?000 的结构在里面, 说明你的显卡已经驱动成功,而QE/CI 没有驱动成功,
  既然找到原因了,那我们就来解决一下QE/CI 的问题吧,
  我们把之前准备好的QE_CI_Exotic_4xxx_10.7.3.pkg 安装上, 然后在自定义里只选择ATIRadeonX?000  ( ? 是对应你显卡系列的数字,我这里是4860, 对应的是X2000, 这个? 对应的关系之前我们有提到过,这里就不解释了) 进行安装就ok啦,安装好后, 我们进入系统内核扩展的目录里,找到ATIRadeonX2000 ,右键点击-> 显示包内容 -> 进入Contents目录, 编辑一下info.plist , 在IOPCIMatch 后面的值里检查是否有自己显卡的硬件ID, 没有就加上, 这里要说一下,ATI 4XXXX 系列X2000 在leopard 6.8 开始 ,以后的版本都是需要修改的版的, 原版的驱动如果你自己修改也可以, 不过是非常繁琐,而且每次系统升级, 都要用根据新版本重新制作, 幸好有高手已经帮我们做好了这个繁琐的工作,(我们在使用的时候要心里感激一下他的作者哦,虽然作者的名字我忘记了 :p,不过还是要感激一下, 哈利路亚!!!) ,所以在这里我们把就直接使用 QE_CI_Exotic 里已经修改好的ATIRadeonX?000.kext 包, 当然, 你安装完pkg 后, kext包就已经替换了s/l/e 目录下的原版, 我们直接拖到桌面上修改或添加里面的IOPCIMatch 值就可以, 然后使用kext工具(相信大家都有) 或者自己动手替换+修复权限就可以使用了.
  同理ATI5000(对应X3000.kext) + 以及后续的显卡应该也是这样修改, 不过据国外的论坛说, X3000的kext 不需要破解版本,用系统自带的修改就可以, 具体的因为我没有5+ 以后显卡, 也就没测试,哪位有5系和6系卡的, 可以自己研究测试,还有就是X1000的kext 据说也不需要破解版本, 情况和X3000 的应该是一样的.

   好了, 做完了这些, 我们重新启动, 如果你看见了漂亮的水波纹, 恭喜,你已经完全开启了QE/CI 了
   如果依然看不见那波涛胸勇的水XX, 也不要着急,请重新查看你的硬件ID 和所对应的驱动包, 重新确认你的输入是正确的, 并且确定你设置了chameleon 里的GraphicsEnable 为no ,还有确定你现在使用的不是apple 的通用驱动,具体参数可以在系统报告里看到, 或者使用ioreg | grep ATI , 如果没有任何输出, 说明你的硬件ID 填写错误, 如果显示的ATIXXXXController 不是和你显卡一致, 说明你编辑了错误的ATIXXXXcontroller.kext, 请将错误的ATIXXXXcontroller.kext 删除或者修改kext包里面的infor.plist正确(需要把你的硬件ID 从里面的IOPCImatch项中删除), 然后重新尝试



如果你有黑屏和花屏问题,或者有兴趣研究多屏和重定向屏幕输出,可以继续读下去, 不过读下去的后果我可是不会负任何责任地
多屏输出和屏幕重定向, 可以解决 黑屏, 花瓶问题, 包括笔记本黑屏和需要外接显示器的问题

首先我们先研究一下A卡硬件的知识, A卡是如何把渲染的画面传输到屏幕

ATI 卡在CRTC里渲染好一个显示结果后,把渲染结果传递给 编码器(encoder)进行编码,然后传递给发射器(transmiter), 发射器再把信号发送到不同的接口(port)上, 然后接口通过数据线连接到显示器, 我们就可以看到画面了.
这其中编码器(encoder) 负责是把crtc里的数据转变成显示设备可以读懂的信号或者说编码,显示器才能显示出我们看到的色彩斑斓的画面,举个例子, matrix 黑客帝国大家应该都看过, 还记得飞船里的屏幕显示的都是一大堆数字吗? 假设那些数字就是CRTC 渲染出来的一大堆花花草草,和高楼大厦, 但是我们看不懂, 那我们如何看懂这些数字呢, 这就需要encoder, 把那些数字转变成我们看到花花草草, 高楼大厦的画面,这样我们才能看到那些数字是我们认识的那些高楼大厦,花花草草
  那现在我们需要把这些画面拿给莫个人看, 我们就需要一个传递者, 这就是发射器(tansmiter)要做的工作, 比如说火星人CRTC 用火星文描述了一个场景,想要给我们地球人看, 然后encoder是个火星上的90后,会说地球文, 他把火星文用翻译成了地球文, 但是他如何传递给我们呢, 他就去找transmiter,把事情交给transmiter去办,但是现在问题又来了, transmitter 现在只有DVI 发射基地,VGA发射基地, DVI港口(port)发送的信是到达中国的,只能是中文, VGA 港口(port)发送的东西是到达美国, 只能是英文, 而且, 现在上帝派了一个hotplugin 告诉他, 只有DVI 港口是开通的(因为我们把LCD的线差到了DVI接口上), 所以他们只能发送中文的信.

       看到这里相信大家基本上已经都能对ATI 如何把数据传送到屏幕上有个大致的概念了, 那这个我们黑屏, 花屏又有什么关系呢?我做个这样的比喻,相信我一说,大家马上就能明白了, 假如, encoder 只会说中文, 但是他通过transmiter把信发到了只会说英文的地区VGA port上 , 结果会怎么样呢? 哈哈, 显示器花屏!!!   那再假如现在有两个encoder , 他们同时把信发到了DVI port, 我们的显示器, 就会同时显示两个信的内容, 结果还是花屏!!哈!  说来说去, 都是花屏, 那这时候你会问黑屏又是怎么回事呢? , 那我问你, 如果现在只有DVI port 开通,并且连接到显示器, 但是encoder 去把叫transmitter 把信发到VGA 地区, 有会怎么样呢? 现在聪明的你, 一定会说: 哦, 我的显示器用DVI线连接的, 但是信号却在VGA上, 那当然是黑屏咯, 哈哈
现在大家应该都理解了, 为什么会有花瓶和黑屏了吧!!!


      我们再来说说mac 下 ATI 的驱动, ATIXXXXController.kext和显卡的那些破事儿! 大家都知道,现在的mac 除了mac pro都是一体化的, 这样他里面的显卡也就要重新设计电路版, 来解决体积问题. 当然其他使用ati芯片的显卡也有这种问题,都会重新设计电路,所以各个品牌显卡的使用的输出结构也都会不一样, 但是大多数都会使用ATI 提供的大众化设计思路, 这就是我们已知的hooklock , quail, motmot, 等等这些名字的由来, 这些代号只是为了提供一种ATI输出结构的标准,但是苹果的东西总是会有些不一样, 他总是用比较新颖的新技术, 比如我的白水果本本, 他也同样提供多屏输出, 但是他却使用一个新的接口, thunderbolt -.-  说来这个接口也确实强大, 不光可以输出视频, 音频, 数据传输也ok,-.- 就是不知道我要输出视频的时候, 用这个传输数据的时候, 我该插哪里-.-; 而且他把VGA 啊 DVI 这些接口都会映射到这个端口上, 也就是说 他用encoder 编码 -> transmitter 发射 -> thunderbold 接口这样的顺序, 但是普通的电脑或者本本, 一般都是 encoder -> transmitter -> 普通的视频接口(div, hdmi , vga 之类的) ,这样apple 就要使用比较特别的输出重定向,但是ATI 显卡里的encoder 和transmitter 数量是有限, 不可能每增加一种接口, 就增加一条encoder 和transmitter的线路, 为了解决这种类似的问题, ATI 使用了一种组合的办法, 就是叫encoder 和transmitter 可以通过路由, 来重新组合. 也就是一个encoder 可以发给任何一个transmitter 数据, 这样, 得到的输出数量就是 encoder 数 x Transmiiter 数 = 输出接口的数量, 厂商们就可以随便在显卡上指定各种接口了,而厂商们只要在显卡bios 中告诉驱动他的路由是什么顺序就可以了, 驱动就会按照这个顺序发送信号, 我们就可以看到屏幕输出了, 但是大多数厂商都是使用公版的输出线路, 苹果使用的是单独设计的电路, 所以苹果的驱动都是重新定义encoder 和 transmitter 路由的, 来配合他自家东西. 既然知道了原因我们只要把苹果驱动中的路由按照我们自己的显卡的路由来重新制定, 就可以正确使用我们的接口了.

好了, 我们开始我们新的征程吧!
我们先来提取显卡中bios 中一些必要的信息,因为每个人的系统环境不一样, 有些童鞋可能到目前为之都是黑屏状态, 所以为了大家方便, 把我们提前下载的附件和之前提取的显卡bios放到系统放到U盘里, 当然也可以先解压好, 不过在这里我还是尽量给出全部操作过程, 先在chameloen 里-s 进入单用户模式: 进入系统后:
          /sbin/mount -uw /

插入你的U盘,然后查看U盘的文件系统格式:
         diskutil list
然后我们会看到 类似的内容 (这里我假设你只有一个硬盘安装在电脑里)
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *750.2 GB   disk0
   1:                        EFI                         209.7 MB   disk0s1
   2:                  Apple_HFS Macintosh HD            749.3 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
/dev/disk1
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *2.0 GB     disk1
   1:                 DOS_FAT_16 NO NAME                 2.0 GB     disk1s1


我们看到的/dev/disk1 这就是我们的u盘, 其中 1:行 里dos_fat_16 就是我们u盘的文件系统格式,  后面的disk1s1 就是我们U盘分区的名称,现在我们来加载他:
     mkdir /Volumes/usb
     mount_msdos /dev/disk1s1 /Volumes/usb
然后我们就可以通过 Volumes 目录下的usb 目录访问我们u盘中的文件了
       cd /Volumes/usb
       unzip radeon_bios_decode.0.2.zip
       unzip redsock_bios_decoder.zip
现在我们有了两个新文件redsock_bios_decoder和radeon_bios_decode
我们把显卡的bios文件标准输入到这两个工具中:
在终端下输入第一个:

      ./radeon_bios_decode < ati9462.rom  回车

随便也说一下这个程序的用法吧, "./" 中的"点" 是代表在当前目录, "斜线" 代表路径, 这在有些unix系统中, 执行非系统路径下的程序是必要的, radeon_bios_decode 是我们刚才解压出来的文件名, 是一个可执行文件, 用 ls -l 可以看到他的属性是rwx 的, 就是权限是7, "<" 符号,意思是标准化输入的意思, 是把他后面的文件标准化输入到他前面的文件里, 反过来" > " 就是标准化输出的意思, 把可执行文件里的标准化输出格式的结果 输出到 我们指定的文件里, 如果没有, 就会自动创建,  所以, 我们也可以这样用:
       ./radeon_bios_decode < ati9462.rom > port.txt
这样我们就得到了一个标准输出后的文本文件格式 " port.txt" , 我们可以用强大的cat命令来查看了
        cat port.txt
现在你的屏幕上会出现我们需要的数据, 这个当中, 我们需要记住每个 Type 和他的 senseid 的对应关系.
PCI ID: 1002:9462
Connector at index 0
        Type [@offset 44508]: HDMI-A (11)
        Encoder [@offset 44512]: INTERNAL_UNIPHY (0x1e)
        i2cid [@offset 44606]: 0x93, OSX senseid: 0x4
Connector at index 1
        Type [@offset 44518]: DVI-I (2)
        Encoder [@offset 44522]: INTERNAL_UNIPHY (0x1e)
        i2cid [@offset 44635]: 0x92, OSX senseid: 0x3
Connector at index 2
        Type [@offset 44528]: DVI-I (2)
        Encoder [@offset 44532]: INTERNAL_KLDSCP_DAC2 (0x16)
        i2cid [@offset 44635]: 0x92, OSX senseid: 0x3
Connector at index 3
        Type [@offset 44538]: DVI-I (2)
        Encoder [@offset 44542]: INTERNAL_KLDSCP_DAC1 (0x15)
        i2cid [@offset 44672]: 0x91, OSX senseid: 0x2
Connector at index 4
        Type [@offset 44548]: DVI-I (2)
        Encoder [@offset 44552]: INTERNAL_KLDSCP_LVTMA (0x1f)
        i2cid [@offset 44672]: 0x91, OSX senseid: 0x2


输入第二个:
      ./redsock_bios_decoder < ati9462.rom  > route.txt
然后我们用cat查看,屏幕上我们会看到如下内容是我们需要的
Connector Object Id [12] which is [HDMI_TYPE_A]
        encoder obj id [0x1e] which is [INTERNAL_UNIPHY (osx txmit 0x20 [duallink 0x0] enc 0x1)] linkb: true
Connector Object Id [1] which is [DVI_I]
        encoder obj id [0x1e] which is [INTERNAL_UNIPHY (osx txmit 0x10 [duallink 0x0] enc 0x0)] linkb: false
Connector Object Id [1] which is [DVI_I]
        encoder obj id [0x16] which is [INTERNAL_KLDSCP_DAC2] linkb: false
Connector Object Id [2] which is [DVI_I]
        encoder obj id [0x15] which is [INTERNAL_KLDSCP_DAC1 (osx txmit 0x00 enc 0x10?)] linkb: false
Connector Object Id [2] which is [DVI_I]
        encoder obj id [0x1f] which is [INTERNAL_KLDSCP_LVTMA] linkb: false

得到了数据后, 我们再来学习一下apple 驱动中定义驱动的的数据结构, 我以4800 系列A卡的路由结构来举例说明一下吧;(数据对照表论坛里其他大大有上传, 大家自己找找吧)
Kext ATI4800Controller
Personality: Cardinal
ConnectorInfo count in decimal: 2
Disk offset in decimal 130864
0000000    00  02  00  00  14  02  00  00  00  01  00  00  01  01  01  04
0000010    04  00  00  00  14  02  00  00  00  01  00  00  00  10  02  03
0000020
Personality: MotMot
ConnectorInfo count in decimal: 2
Disk offset in decimal 130896
0000000    00  04  00  00  04  01  00  00  00  01  00  00  10  00  02  03
0000010    04  00  00  00  14  02  00  00  00  01  00  00  01  11  01  04
0000020
Personality: Quail
ConnectorInfo count in decimal: 3
Disk offset in decimal 130928
0000000    02  00  00  00  40  00  00  00  09  01  00  00  22  01  00  07
0000010    02  00  00  00  00  01  00  00  09  01  00  00  20  01  03  04
0000020    00  04  00  00  04  03  00  00  00  01  00  00  10  00  02  03
0000030

4800系列A卡, 一般有这3种路由结构: 分别是cardinal, motmot, 和quail.  cardinal和motmot 类都是两个接口, 所以他下面只有两行路由数据表, quail类的A卡一般都是3个接口, 他有3行路由数据. 一般显卡上有几个输出接口, 这个值就会有几行, 笔记本电脑一般会有一个输出接口, 但是他自己的LCD 也要算一个, 所以一般都是两个.

帖子字数满了, 二楼保留, 剩下的晚上在写吧






补充内容 (2012-3-9 17:43):
下半部分转到14楼了
35

查看全部评分

Rank: 1

UID
1007766
帖子
57
PB币
841
贡献
0
技术
129
活跃
29
沙发
发表于 2012-3-9 12:04:11 IP属地辽宁 |只看该作者
本帖最后由 道奇兔 于 2012-3-10 22:26 编辑

我们用quail 来解释一下这个结构:
                   |      接口的类型    |     接口的标志位    |  显示特性   | 对齐字符位   |   txmt  |  encd     | hotplugin |  senseID
0000000   | 02  00  00  00      |    40  00  00  00    |    09  01      |   00  00        |   22      |    01       |      00    |       07
0000010   | 02  00  00  00      |    00  01  00  00    |    09  01     |   00  00         |   20      |    01       |      03    |       04
0000020   | 00  04  00  00      |    04  03  00  00    |    00  01     |   00  00         |   10      |    00       |      02    |       03


接口类型: 比如说DVI . VGA , HDMI, diplaybolt , thunderbold , 这是定义这条输出最后是输出到什么样的接口上的,根据国外网站资料,现在已经知道的类型如下: (没有thunderbold 的 -.-, )
#define CONNECTORTYPE_LVDS      0x00000002      /* 内置低电压LCD ,比如说笔记本上的LCD */
#define CONNECTORTYPE_DVI_DUAL    0x00000004    /* dual link DVI , DVI 分为单路和双路, 请自行百度DUAL link */
#define CONNECTORTYPE_VGA         0x00000010    /* VGA 接口 */
#define CONNECTORTYPE_SVIDEO    0x00000080      /* S-端子线 */
#define CONNECTORTYPE_DVI       0x00000200      /* 单路DVI? */
#define CONNECTORTYPE_DP          0x00000400    /* Displayport 接口 */
#define CONNECTORTYPE_HDMI      0x00000800      /* HDMI 接口*/


接口标志位: 这个是用来表示接口类型 支持什么样的设备, 比如说老的CRT显示器, 他没法只支持模拟信号, 所以他就要在这个标志为上标出这个接口支持的显示器类型 只能是CRT类, 无法传输数据到只能识别数字信号的显示器上, 这个串数字一般都是硬编码,这个数值给据国外网站说,ioreg 中有对应, 但是根据我的测试, 他是根据接口类型,和显卡支持的方式决定的, ioreg中的值是会变化的,现在的数码显示器可以只能化的改变这个数字,所以请自行根据接口类型和对应的关系决定:    接口类型                        >                可以对应接口标志位
    0x0002 : LVDS                   >           ControlFlag : 0x0040 / 0x0100               
0x0004 : DVI-?                  >           ControlFlag : 0x0016 - 0x0014 / 0x214               
    0x0010 : VGA                        >           ControlFlag : 0x0010               
0x0080 : S-Video                >           ControlFlag : 0x0002                        
  0x0200 : DVI-?                        >           ControlFlag : 0x0014 / 0x0214 - 0x0204               
0x0400 : DisplayPort        >           ControlFlag : 0x0100 - 0x0104 - 0x0304 / 0x0604 - 0x0400               
0x0800 : HDMI                   >           ControlFlag : 0x0200            
   0x1000 : DVI-?                  >           ControlFlag : 0x0016

显示特性: 这个是用来说明你的显示器有什么样的特性, 比如说支持背光 ,这个数值是根据数据位来启用响应的功能的, 前面两个字节决定特性, 后面的两位决定功能(根据我自己的研究,但是我的设备有限, 目前只知道支持音频传输HDMI, 可以设置成 71 来开启音频传输 ), 比如说HMDI 可以传输音频数据 就是 00 71, 内置LCD 支持背光, 就是09 01
        #define FEATURE_USE_INTERNAL                    0x01
        #define FEATURE_USE_RGB_ON_YUV          0x04
        #define FEATURE_USE_BACKLIGHT             0x08
        #define FEATURE_BACKLIGHT_INVERTED      0x10
        #define FEATURE_USE_CLAMSHELL             0x20

        /* 1 byte, hardcoded for each connector type
        0x0002 : LVDS           >       Features  :  0x09
        0x0004 : DVI-?          >       Features  :  0x00
        0x0010 : VGA            >       Features  :  0x00
        0x0080 : S-Video        >       Features  :  0x04        
        0x0200 : DVI-?          >       Features  :  0x00
        0x0400 : DisplayPort    >       Features  :  0x00
        0x0800 : HDMI           >       Features  :  0x00
        0x1000 : DVI-?          >       Features  :  0x00
        */

对齐字符: 这个涉及到数据结构, 在编译驱动程序源代码的时候, 编译器往往都会把struct数据结构对齐, 如果整个数据结构对不齐, 编译器会自动在需要的地方填入0 ,所以这里我们不需要管他,这段代码无用, 如果向了解的, 可以去学C语言和汇编语言, 我在这里就不献丑了 d(^.^)b

txmt : 就是发射器 transmiter  根据ATI 的技术资料, 现在的transmitter 一般都是使用UniPhy 的, DEC3.2协议以后一般都是使用3个UniPhy, DEC 2.0 和DEC 3.0 比较混乱, 使用两个个UniPhy 和 有可能1个DAC , 在DEC2.0 协议以前一般都是使用DAC, 所以请根据你的显卡支持的DEC 协议类型决定, 不过, redsockosx , 可以直接读取bios 的资料, 我们根据redsockosx 改就好了, redsockosx 的作者真是大好人, 虽然那我不知道他是谁, 哈哈
                /* Transmitter (TransmitterID) */  这个0x00 分为底8位(最后一个0)和高8位(倒数第2个0)来决定使用 发射器1 UniPhy 或者发射器UniPhy2,如果是0,在较老的DEC 版本里面, 就是用DAC 发射器,比较混乱,不过现在5000以后都是使用Uniphy 了,                 /* Transmitter (TransmitterID bits 0-3)
                #define UNIPHY  0x00             // Uniphy
                #define UNIPHY1   0x01           // 发射器使用的是UniPhy1号
                #define UNIPHY2   0x02           // 发射器使用的是UniPhy2号

                /* Transmitter Bits 4-7 (LinkID) */
                #define DUALLINK  0x00 // LINKA + LINKB  这个是设置高8位, 决定发射器是使用哪个线路来发送的
                #define LINKA                    0x10   // 发射器使用线路A
                #define LINKB                    0x20   // 发射其使用线路B

                /* Transmitter byte  */ 例子
                #define UNIPHYA  0x10 // = UNIPHY:LINKA  发射器0号A线路 注意要反过来看,0x10中 最后的0代表发射器号,1代表线路
                #define UNIPHYB  0x20 // = UNIPHY:LINKB   发射器0号B线路
                #define UNIPHYAB   0x00 // = UNIPHY:DUALLINK  发射器0号双线路
                #define UNIPHYC  0x11 // = UNIPHY1:LINKA      这里我就不解释了, 大家慢慢理解哈
                #define UNIPHYD  0x21 // = UNIPHY1:LINKB
                #define UNIPHYCD   0x01 // = UNIPHY1:DUALLINK
                #define UNIPHYE  0x12 // = UNIPHY2:LINKA
                #define UNIPHYF   0x22 // = UNIPHY2:LINKB
                #define UNIPHYEF                0x02 // = UNIPHY2:DUALLINK
                #define DACA                        0x00    //双路支持的数字转模拟
                #define DACB                      0x10      //数字转模拟

encd: 就是编码其 encoder 这个东西是用高8位和底8为来决定, 是使用数字encoder 还是模拟encoder 的 ati4000的一般分为两类, 一类是数字转模拟信号的编码器, 另一类是数字信号编码器, 现在新的显卡5000 以后一般都是只有数字信号编码器, 增加到6个数字信号编码器, 之前的一般都是2个, 再早的一般是2类,数量比较混乱
/* u can get this from Dmesg as above  for R8XX architecture and above there is 06 Digital Encoder: DIG_1 > DIG_6*/
                /* Encoder Bits 0-3 (DIG_ID : Digital) */
                #define DIG1   0x00 // = DIGA
                #define DIG2   0x01 // = DIGB
                #define DIG3   0x02 // = DIGC  Only for Radeon HD 5XXX Series  and above  ATI 5000 以后增加的, 下同
                #define DIG4   0x03 // = DIGD  Only for Radeon HD 5XXX Series  and above  
                #define DIG5   0x04 // = DIGE  Only for Radeon HD 5XXX Series  and above
                #define DIG6   0x05 // = DIGF  Only for Radeon HD 5XXX Series  and above

                /* Encoder Bits 4-7 (DAC_ID : Analog) */
                #define DAC       0x10   这个是模拟转数字解码器, 5000 以前的A卡会有, 后来的好想都没有了,因为用不到了

hotplugin :他在apple的驱动中有两个作用, 一个是编排主次显示其的顺序, 一个是识别这个接口是否有数据线接入, 这个可以自定义, 主显示端口一般是排在高位, 有00 表示, 第2个01 , 第3个02 , 以次类推, 不过有的显卡00 代表全部接口通电, 所以建议从01开始排,另外有些厂商设置显卡是从靠近主板哪段设置位起始端口, 有些是反过来的, 建议大家自己决定, 笔记本就更乱了,

senseID: 接口映射的电路线图
这个比较重要, 是否黑频就看这个了, (花屏多数是transmitter 和encoder 的接错了,导致的), 这个值是根据我们用我们导出的port.txt 中文件 里的senseID 设置的, senseID 是多少, 这个就是多少, 比如说我的ATI4860 HDMI 的是04, 那我这里就把接口类型位HDMI 的那行代码的senseID 设置位04 , 就可以了

OK, 资料有了, 工具有了, 下面我们就开始设置就ok了, 如果你的显卡3个接口, 就选一个你哪个型号的有3行数据的来改,我用4800系列里的quail 来改我的4860,  因为我的4860 有3个端口
这是修改前的:
接口序号    |      接口的类型   |      接口的标志位    |  显示特性      | 对齐字符   |   txmt  |  encd  | hotplugin |  senseID
0000000   | 02  00  00  00     |    40  00  00  00     |    09  01     |   00  00   |   22   |    01  |      00    |       07
0000010   | 02  00  00  00     |    00  01  00  00     |    09  01     |   00  00   |   20   |    01  |      03    |       04
0000020   | 00  04  00  00    |    04  03  00  00     |    00  01     |   00  00   |   10   |    00  |      02    |       03

修改的时候要注意, 有个数据大端和小段的问题,在里面, 所以上边的
     16位标志    |    第1         | 第2       |   第3     | 第 4
           0x          |   00          |    00     |    00      |    04
我们要写成       |   第4         | 第3      |  第2       | 第1
                         |   04          | 00        |   00       | 00
我们需要把接口类型改成和我们显卡上一致 的类型, 根据我们导出的port.txt 文件里描述的, hdmi(我的是从离主板最远的那个端口开始作为第一个接口) senseID为04 , DVI-I(第2个端口, 其实外观上是一个VGA 接口, 但是他在向外部输出的时候,厂商已经用DVI 转换成VGA, 这样就不用自己买DVI转VGA 插头了,所以这个我们要参照port.txt文件里定义的类型) ,senseID为03  , DVI-I ( 第3个端口, 这个是DVI 接口的) senseID 为02

                   |      接口的类型    |     接口的标志位     |  显示特性   | 对齐字符   |   txmt  |  encd  | hotplugin |  senseID
HDMI         | 00  08  00  00     |    00  00  02  00     |    00  00      |   00  00      |   00   |    00      |      00    |       04
DVI            | 04  00  00  00     |    14  02  00  00     |    00  00     |   00  00       |   00   |    00      |      00    |       03
DVI            | 04  00  00  00      |    14  02  00  00    |    00  00     |   00  00       |   00   |    00     |      00    |       02

现在我们已经改好了 内部接口类型定义和实际外部接口对应的部分, 然后我们再来设置 发射器和编码器, 这个设置起始大家可以DIY 恶搞一下, 很有趣了, 乱接的后果就是, 实际要输出到某个屏幕的图像会跑到其他屏幕上去,很好玩,哈,

我们根据route.txt类的内容
Connector Object Id [12] which is [HDMI_TYPE_A]
        encoder obj id [0x1e] which is [INTERNAL_UNIPHY (osx txmit 0x20 [duallink 0x0] enc 0x1)] linkb: true
Connector Object Id [1] which is [DVI_I]
        encoder obj id [0x1e] which is [INTERNAL_UNIPHY (osx txmit 0x10 [duallink 0x0] enc 0x0)] linkb: false
Connector Object Id [1] which is [DVI_I]
        encoder obj id [0x16] which is [INTERNAL_KLDSCP_DAC2] linkb: false
Connector Object Id [2] which is [DVI_I]
        encoder obj id [0x15] which is [INTERNAL_KLDSCP_DAC1 (osx txmit 0x00 enc 0x10?)] linkb: false
Connector Object Id [2] which is [DVI_I]
        encoder obj id [0x1f] which is [INTERNAL_KLDSCP_LVTMA] linkb: false


我以第2行里面内容为例, 解释一下:
[INTERNAL_UNIPHY(发射器transmitter的名称) (osx txmit(Tranmitter 的简写,值是) 0x20 [duallink 0x0 ( 双路连接) 我们不用管]    enc (encoder 的简写 值是) 0x1  )] linkb: true (是否使用LINKB 线路: 是)

既然值都给我们了, 我们照抄就OK了, 哈哈

                   |      接口的类型    |     接口的标志位     |  显示特性    | 对齐字符     |   txmt     |  encd  | hotplugin |  senseID
HDMI           | 00  08  00  00     |    00  00  02  00     |    00  71     |   00  00        |   20        |    01      |      03    |       04
DVI              | 04  00  00  00     |    14  02  00  00     |    00  01     |   00  00       |   10        |    00      |      02    |       03
DVI              | 04  00  00  00     |    14  02  00  00    |    00  01     |   00  00         |   00        |    10      |      01    |       02

因为我的DVI 接口在最底下, 但是我向让他编程主显示其, 所以我把hotplguin 倒过来了,

OK, 这样我们就设置完了

接下来, 我们就是把他写入到对应的显卡驱动里, 我的是ATI4800Controller.kext的驱动包, 文件在, 这个包里面的Contents/ MacOS 目录下的ATI4800Controller 文件, 如果是OSX 6.8 以前的版本, 这个文件在ATIframebuffer.kext下对应的目录里

OK 我们把这个数值先排列号, 中间和结尾都不能有空格 , 结尾也不能有回车

000800000000020000000000000000040400000014020000000000000000000304000000140200000000000000000002


一共是96位哈,
如果你可以用HEX 类的编辑器(附件中以提供), 请你尽量用hex 编辑器将这段代买替换掉你修改的那段的原来的值,只要find & replace 就OK( find 原来的指, replace 我们修改的值) , 这个论坛里其他大大的修改framebuffer 教程里都有提到, 下面我使用的方法请小心使用,  只有在你没有多余的电脑,或者无法进入系统桌面的情况下, 谨慎小心的使用!!!!!!

我们先进入chameleon的 单用户模式  用-s 进入:
晕帖子字数限制, 我改到下个帖子里发方法吧 -.-




15楼占位
进入后:
/sbin/mount -uw /
进入vim编辑器:
vi data
按a键,进入编辑模式把我们的字符填进去:
000800000000020000000000000000040400000014020000000000000000000304000000140200000000000000000002
然后按esc , 在按shift+: , 在下面输入wq 退出
然后我们先备份一下我们要修改的文件, 以免大家操作失误
cp /system/Library/Extensions/ATI4800Controller.kext/Contents/MacOS/ATI4800Controller ATI4800Controller.orgbak

下面是关键, 请大家小心使用, 尤其是设置seek= 的值!!!! 这个值是你在你论坛里找到的参考里的Disk offset in decimal 后面的数字, , 而且每个版本的值都会不一样, 请大家仔细对照你lion 的版本是多少, 10.6.8 到10.7.3都不一样!!!!!!!!!!!!! 再次重申, 如果你对dd命令不了解, 或者没有把握, 请尽量使用hex 编辑器!!!!!! 因为后果很严重, !!!!! count = 的值, 是你编辑的那行数字的个数, 而且一定是32 的倍数!!!!! , 请仔细数你一共打了多少个数字!! 一般一行都是32个, 你有几个接口就需要几行, 也就是32乘以你的输出接口数量, 笔记本LCD本身也有一个内置的接口!!!!

dd if=data of=/system/Library/Extensions/ATI4800Controller.kext/Contents/MacOS/ATI4800Controller bs=1 count=96 seek=你的offset conv=notrunc

注意:上面这个命令是一共是一行

这里我就不给写seek 值了, 避免伸手党照抄造成数据错误哈


ok, 现在键入reboot 重启


现在,我们漂亮的进入了桌面了 哈哈 查看系统报告, 正确驱动了你的显卡, 外接其他显示器, 成功, 哈哈!!!! 三个端口全部有输出!!!!!!


如果没有开启QE/CI 请看帖子前面说的方法, 设置一下, 就OK了!


如果还是没有进去, 那就从头认真检查,再来一次 -.- 这写方法肯定能成功的驱动你的A卡, 哈哈


11

查看全部评分

Rank: 2Rank: 2

UID
873140
帖子
233
PB币
754
贡献
0
技术
0
活跃
16
板凳
发表于 2012-3-9 12:06:33 IP属地江苏 |只看该作者
顶lz   现在ati越来越顺手了

Mac小白

Rank: 7Rank: 7Rank: 7

UID
1037832
帖子
565
PB币
92
贡献
0
技术
13
活跃
869
4F
发表于 2012-3-9 12:10:24 IP属地河北 |只看该作者
LZ神帖啊。现在Lion区高手不多了,很高兴LZ出现了。果断Mark之

UID
2409498
帖子
27335
PB币
915
贡献
4
技术
1353
活跃
712
5F
发表于 2012-3-9 12:58:23 IP属地湖北 |只看该作者
好,mark
不过我觉的楼主修改ATI control那部分没有必要在单用户模式下进行
直接在mac下进行就好了, 而且直观方便很多

Rank: 1

UID
1007766
帖子
57
PB币
841
贡献
0
技术
129
活跃
29
6F
发表于 2012-3-9 13:03:02 IP属地辽宁 |只看该作者
p.H 发表于 2012-3-9 12:58
好,mark
不过我觉的楼主修改ATI control那部分没有必要在单用户模式下进行
直接在mac下进行就好了, 而且 ...

这个主要是为了有些人进系统时是黑屏或者花屏时的办法, 比如说 我的A卡插上就是黑屏的, 其实已经是驱动了, 但是 我不可能在黑屏状态下改ATI controller.kext

UID
2409498
帖子
27335
PB币
915
贡献
4
技术
1353
活跃
712
7F
发表于 2012-3-9 13:05:36 IP属地湖北 |只看该作者
Arkzenith 发表于 2012-3-9 13:03
这个主要是为了有些人进系统时是黑屏或者花屏时的办法, 比如说 我的A卡插上就是黑屏的, 其实已经是驱动了 ...

0-0  其实不必要的
只需要取消变色龙里面的graphicsenabler
就不会黑屏了

Rank: 1

UID
1007766
帖子
57
PB币
841
贡献
0
技术
129
活跃
29
8F
发表于 2012-3-9 13:10:01 IP属地辽宁 |只看该作者
p.H 发表于 2012-3-9 13:05
0-0  其实不必要的
只需要取消变色龙里面的graphicsenabler
就不会黑屏了

我试过了, 一样会黑屏, 因为我的A卡apple原版驱动是能识别的, 但是输出映射是和驱动有冲突的

点评

冷凝器  求帮助,卡在如何radeon_bios_decode,得不出port。txt  发表于 2012-3-9 23:12 IP属地辽宁

Rank: 2Rank: 2

UID
519909
帖子
462
PB币
14
贡献
0
技术
6
活跃
426
9F
发表于 2012-3-9 13:13:27 IP属地四川 |只看该作者
楼主厉害,现在我的hd4650(vga,hdmi,dp三接口),目前vga基本完美,插上dp线启动后黑屏无显示,dp+vga启动双黑屏, 请问如何定义到dp输出。hdmi未测试。

UID
2409498
帖子
27335
PB币
915
贡献
4
技术
1353
活跃
712
10F
发表于 2012-3-9 13:15:19 IP属地湖北 |只看该作者
Arkzenith 发表于 2012-3-9 13:10
我试过了, 一样会黑屏, 因为我的A卡apple原版驱动是能识别的, 但是输出映射是和驱动有冲突的

:D
恩。如果是直驱的话那就没办法
我也是修改了atiframebuffer之后解决了睡眠唤醒黑屏的问题

点评

冷凝器  求帮助修改atiframebuffer或者指导一下也行  发表于 2012-3-9 23:11 IP属地辽宁

Rank: 5Rank: 5Rank: 5

UID
1431243
帖子
749
PB币
916
贡献
0
技术
14
活跃
2978
11F
发表于 2012-3-9 13:18:10 IP属地江苏 |只看该作者
Arkzenith 发表于 2012-3-9 13:03
这个主要是为了有些人进系统时是黑屏或者花屏时的办法, 比如说 我的A卡插上就是黑屏的, 其实已经是驱动了 ...

请问LZ,我的HD6850只有两个输出口,可以按你的教程修改吗?

Rank: 1

UID
1007766
帖子
57
PB币
841
贡献
0
技术
129
活跃
29
12F
发表于 2012-3-9 13:35:09 IP属地辽宁 |只看该作者
peterpanqq 发表于 2012-3-9 13:13
楼主厉害,现在我的hd4650(vga,hdmi,dp三接口),目前vga基本完美,插上dp线启动后黑屏无显示,dp+vga启 ...

因为帖子字符限制, 我还没写完, 写完后, 你照着方法,应该能解决你的问题

Rank: 1

UID
1007766
帖子
57
PB币
841
贡献
0
技术
129
活跃
29
13F
发表于 2012-3-9 13:35:45 IP属地辽宁 |只看该作者
smg_zj 发表于 2012-3-9 13:18
请问LZ,我的HD6850只有两个输出口,可以按你的教程修改吗?

可以,
头像被屏蔽

Rank: 1

UID
1007766
帖子
57
PB币
841
贡献
0
技术
129
活跃
29
14F
发表于 2012-3-9 15:59:25 IP属地辽宁 |只看该作者
提示: 该帖被管理员或版主屏蔽
头像被屏蔽

Rank: 1

UID
1007766
帖子
57
PB币
841
贡献
0
技术
129
活跃
29
15F
发表于 2012-3-9 16:02:56 IP属地辽宁 |只看该作者
提示: 该帖被管理员或版主屏蔽

Rank: 5Rank: 5Rank: 5

UID
1191050
帖子
672
PB币
806
贡献
0
技术
12
活跃
410
16F
发表于 2012-3-9 16:14:22 IP属地北京 |只看该作者
本帖最后由 aaaabbcc008 于 2012-3-9 16:15 编辑

ATI HD 4500  移动版   可以使用这个教程吗? 我装的是10.7.2

Rank: 1

UID
1352968
帖子
37
PB币
51
贡献
0
技术
0
活跃
5
17F
发表于 2012-3-9 16:34:53 IP属地黑龙江 |只看该作者
这个必须顶啊,楼主乃强人,我试试我的3470

Rank: 1

UID
1352968
帖子
37
PB币
51
贡献
0
技术
0
活跃
5
18F
发表于 2012-3-9 16:38:46 IP属地黑龙江 |只看该作者
我是 ati mobile 3470显卡,也用
QE_CI_Exotic_4xxx_10.7.3.pkg.zip 这个安装包来做么

Rank: 1

UID
1007766
帖子
57
PB币
841
贡献
0
技术
129
活跃
29
19F
发表于 2012-3-9 16:57:24 IP属地辽宁 |只看该作者
vitaldye 发表于 2012-3-9 16:38
我是 ati mobile 3470显卡,也用
QE_CI_Exotic_4xxx_10.7.3.pkg.zip 这个安装包来做么

3000 系列的显卡好像是用RadeonX1000的包的来开QE,不过我没有3000系A卡, 所以不能确定, 国外论坛上说应该不用这个包就可以开了, 据说只有4000才需要这个包

如果你开不了, 在安装这个包, 然后修改里面的值, 在自定义里只选择ATIRRadeonX2000.kext 就行

Rank: 1

UID
1352968
帖子
37
PB币
51
贡献
0
技术
0
活跃
5
20F
发表于 2012-3-9 17:12:05 IP属地黑龙江 |只看该作者
Arkzenith 发表于 2012-3-9 16:57
3000 系列的显卡好像是用RadeonX1000的包的来开QE,不过我没有3000系A卡, 所以不能确定, 国外论坛上说应该 ...

真的非常感谢,我去试试,楼主是个好人啊
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛