本帖最后由 寒夜听雪 于 2011-11-28 21:25 编辑
本文能够解决你的疑惑: 【什么是常说的GraphicsEnabler和AtiConfig?】 【什么叫做SLE和EE?】 【怎样加显卡ID?】 【如何修复磁盘权限?】 【如何重建缓存?】 【什么叫添加EDID?(劳资特么看了那么多帖子都特么不会这帮大大是不是坑爹啊!)】 【什么叫换boot?】 甚至,【什么是变色龙,能吃么?】
HD5650及其他
ATI Mobility Radeon HD 5650(显存1GB或512MB,以下简称5650)在黑苹果之中一直都是一个问题。在10.6雪豹时代,5650曾一度被认为没有驱动方法的显卡。随后,随着变色龙引导器发展壮大及各方技术人士的努力,终于出现了转机。10.7狮子版本的出现更是将驱动5650的难度大大降低,经过分析是因为白苹果的机型在不断升级中采用了多款ATI 5系列的显卡,从而使得改造更为容易。本文将详细分析论坛中主流的几种驱动5650显卡的方法。
要驱动5650显卡,大致可以分成三种方法:以DSDT描述文件为中心的DSDT驱动法、以rom文件为中心的rom驱动法和以kext文件为中心的kext驱动法。
所谓驱动了,在表观上,就是用户体验得到飞跃式的提升,表现为屏幕的分辨率提升、打开Dashboard并且往其中添加小工具的时候会产生水波纹的效果、屏幕顶端的Finder任务栏变得透明、使用硬件测试工具进行测试的时候得分有明显的提升等等;在实际上,成功驱动表示操作系统能够正确识别并调用硬件。
1.kext驱动法
什么是kext?
kext的全称应该是Kernel Extension,中文译名是内核扩展。维基百科对于内核的解释是这样的: 内核(Kernel)在计算机科学中是操作系统最基本的部分,主要负责管理系统资源。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并由内核决定一个程序在什么时候对某部分硬件操作多长时间。直接对硬件操作是非常复杂的。所以内核通常提供一种硬件抽象的方法,来完成这些操作。通过进程间通信机制及系统调用,应用进程可间接控制所需的硬件资源(特别是处理器及I/O设备)。
严格地说,内核并不是计算机系统中必要的组成部分。程序可以直接地被调入计算机中执行;这样的设计,说明了设计者不希望提供任何硬件抽象和操作系统的支持;它常见于早期计算机系统的设计中。最终,一些辅助性程序,例如程序加载器和调试器,被设计到机器核心当中,或者写入在唯读记忆体里。这些变化发生时,操作系统内核的概念就渐渐明晰起来了。
从维基百科的解释我们不难看出,在上层操作系统和硬件之间,就是靠操作系统内核来实现对操作系统指令和底层硬件之间的通讯,内核可以理解成操作系统和硬件的通讯工具。Kext的作用就是在系统启动的时候加载于内核层之上的文件。内核可以直接实现的功能非常少,kext为内核提供这样那样的功能,功能类似Windows下的驱动文件。这样一来也就不难理解,通过改动kext,包括改动kext文件本身,或者使内核以不同方式加载kext,就能够让操作系统正确识别并启用硬件。
一般来说,理论上10.7版本的Mac OS X的ATI 5系列kext文件是可以直接驱动5650显卡的。不过仅仅限于理论。由改动的浅易到复杂程度,可将修改驱动方法排列如下:
一 加显卡ID。 这种方法是最容易的,但是成功率相对较低,而且很多用户在打开了他们的显卡驱动之后发现显卡ID已经加进去了。打开/System/Library/Extensions文件夹(中文系统下是/系统/资源库/Extensions),对显卡驱动kext文件也就是ATI5000Controller.kext点按右键,选择“显示包内容”,可以见到Contents文件夹。 点开Contents文件夹可以看到有一个配置文件名为Info.plist。建议使用PlistEdit Pro打开。打开后点按上部区域,
按Alt+F组合键,调出搜索功能,输入关键词IOPCIMatch并搜索。于是便可找到名称为IOPCIMatch的键。 【注:plist类型的配置文件,其内部主要由两种语法结构组成:键名与键值,键名也有称为节点。键名决定实现的功能,键值指示实现功能的内容。一般在PlistEdit Pro中,上部区域左方为键名,右方为该键的键值。在上部区域做的任何修改在下部代码区域均会实时更新。代码的语法就是XML,常见的格式是: <key>键名</key> <string>键值</string>】 找到该键后,在该键的键值中按照原格式加入5650的显卡ID。5650的显卡ID一般为1002_68c1.【注:如果不是的话,请到Windows,在设备管理器中右键点击显卡,选择“属性”,并选择Device_id的下拉框,便可看到。】而后,将初始的1002_68c1显卡ID去掉中间的下划线,并将1002和68c1调换得到68c11002,而后在前面加上0x,于是得到最后的结果:0x68c11002。将得到的修改ID按照原来的格式插入IOPCIMatch的键值中。最后保存,运行一次Kext Utility,修复磁盘权限,重新启动电脑。【注:但是如果在还没开始之前就已经看到了这串字符,而5650显卡尚未驱动,那么需要进行下一步改动。】
二 变色龙。
如果加入了显卡ID还不能驱动,就需要对变色龙引导器进行修改。变色龙的作用是模拟出一个白苹果的环境,使系统能够在Windows PC上正常运作。可以说变色龙所在的层面是低于系统的,它为系统提供了一个平台。通过修改/Extra下的配置文件.com.apple.boot.plist【注:如果变色龙版本为2.0 RC5 Rev-1105或更高,这个配置文件的名称将会改成.org.chameleon.boot.plist。】能够改变变色龙加载系统的过程。用PlistEdit Pro打开该配置文件,点按左上方第一个按钮New Child(如果是汉化版,应为“新增同级节点”),将新建的键名称填为GraphicsEnabler,将键值设置为Yes。【注:某些用户仅新增了这一项重启便能驱动显卡。】然后再次新建一个名为AtiConfig的键。 对于这个AtiConfig键,键值的设置是一项比较麻烦的工作,因为每位用户的电脑配置不一样,使用的键值有所不同。根据远景论坛auraking会员的测试,将AtiConfig键的值填写为Nomascus能够成功驱动5650.但是,不少会员使用的键值是Hoolock(包括本人),本人在收集资料时更看到国外的教程上使用的键值是Eulemur。这一项需要自行测试。 如果添加正确,下部代码区域应该会增多一段代码: <key>AtiConfig</key> <string>Hoolock(或者Nomascus等请自行实验)</string> <key>GraphicsEnabler</key> <string>Yes</string> 相当一部分会员在加入了显卡ID或者还改变了配置文件之后,便已成功驱动。如果还是不行,便需要替换boot文件,使变色龙引导器正确识别显卡。Boot文件请自行测试,有的需要配合特定版本的变色龙使用,有的是专门为某一机型设置的,但是不排除能够通用的可能性。更换boot文件的方法其实非常简单:打开系统盘,如不出意外即可看到boot文件【注:如果看不到,很可能是刚刚安装了Mac版变色龙或其他改动,重启即可。】将原来的boot文件拷贝备份,而后右键点击,将之扔到废纸篓。紧接着将所要替换的boot文件拷贝粘贴上去,这个过程可能需要输入密码。紧接着打开/应用程序/实用工具/磁盘工具, 选中Mac OS的系统盘,点选“修复磁盘权限”修复磁盘权限。
最后重新启动电脑。 另外的一种方法是使用Chameleon Wizard软件。使用较早版本变色龙引导器的用户建议选择旧版本的Chameleon Wizard,新版本的Chameleon Wizard不能够识别.com.apple.boot.plist而只能识别.org.chameleon.boot.plist。点选“在磁盘的文件夹”,选择放有要更换的boot文件的文件夹,选择“更新boot”并点击安装,软件即会自动完成替换。 【注:如果启动出现各种问题,请先将配置文件,即.com.apple.boot.plist或称.org.chameleon.boot.plist移除,即可进入,但不能驱动显卡。出现这种情况,屏幕上会显示出错信息,或者进度停住不动。】
三 添加EDID。
进行上述操作之后应该就能够驱动了。在这里,很多用户会出现这样的症状:所有应亮的指示灯都正常亮起,或者闪烁规律正常。但是屏幕就是黑屏无显示。此时,如果接上外接屏幕,很可能就会看到画面,不管正常与否。这个时候,显卡已经被驱动,但是显卡信号错误地输出到了另外的接口上。这时,需要添加EDID。参照远景论坛crazybirdy会员的方法,本人进行了整理。 首先,在Windows下,使用Extron Electrics出品的EDID Manager,可以成功的查看到笔记本的自带显示屏EDID值。这个时候的EDID值应该在屏幕上呈方块状整齐排列。将之复制下来,去掉空格,去掉换行,去掉每行前的序号,使之呈紧密连续排列状。将整理好的EDID保存好备用。参照crazybirdy的教程,初始的EDID应该是这个样子的: 0x00 00 FF FF FF FF FF FF 00 06 AF EC 2200 00 00 00 0x10 01 13 01 03 80 22 13 78 0A C8 95 9E57 54 92 26 0x20 0F 50 54 00 00 00 01 01 01 01 01 0101 01 01 01 0x30 01 01 01 01 01 01 12 1B 56 42 50 0026 30 20 18 0x40 34 00 58 C1 10 00 00 18 00 00 00 0F00 00 00 00 0x50 00 00 00 00 00 00 00 00 00 20 00 0000 FE 00 41 0x60 55 4F 0A 20 20 20 20 20 20 20 20 2000 00 00 FE 0x70 00 42 31 35 36 5857 30 32 20 56 32 20 0A 00 C0
将序号0x00、0x10等全部除去,并去掉空格,去掉换行,整理出的结果应该是紧密连续的一连串:
00FFFFFFFFFFFF0006AFEC220000000001130103802213780AC8959E575492260F505400000001010101010101010101010101010101121B5642500026302018340058C1100000180000000F0000000000000000000000000020000000FE0041554F0A202020202020202020000000FE004231353658573032205632200A00C0
回到Mac下,用PlistEditPro打开/System/Library/Displays/Overrides/DisplayVendorID-756e6b6e/DisplayProductID-717文件,并将下部区域的代码完全清空。之后粘贴上:
<?xml version="1.0"encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTDPLIST 1.0//EN""http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict>
<key>DisplayProductID</key>
<integer>1815</integer>
<key>DisplayProductName</key>
<string>Internal LCD Forced EDID</string>
<key>DisplayVendorID</key>
<integer>1970170734</integer>
<key>IODisplayEDID</key>
<data>
AP///////wAGEF+cAAAAAAgRAQOAIRV4CunVmVlTjigmUFQAAAABAQEBAQEBAQEBAQEB
AQEB3iGgcFCEHzAgIFYAS88QAAAYAAAADwAGECAKCgoKCgoKCgoKAAAA/gBLUzUxNQAx
NTRXUDEKAAAA/gBDb2xvciBMQ0QKCgoKAI8=
</data>
</dict> </plist>
保存,之后在上部区域找到名为IODisplayEDID的键,并右键点击键值进行编辑。 打开后,将里面的内容悉数清空,粘贴上刚刚整理好的EDID。 点击OK保存后,下部代码区域的<data>与</data>中间的区域的代码也会随之发生变化。如果没有变化,请检查有没有勾选“自动同步文本”的选项。该勾选框位于上部区域与下部代码区域之间,英文为Automatically sync text。 至此,添加EDID的工作已经完成,请运行一次Kext Utility。 如果仍然不能驱动,请考虑其他的方法。或许kext驱动法本人还没有收集完全,不足之处还请大家补充。
PS关于里面所用的工具请搜索论坛。由于各种版本可能对各个系统不一样,本人觉得在这里提供下载没什么意义。 |