五常信息网(五常论坛)

 找回密码
 立即注册
搜索
查看: 2340|回复: 2

蓝宝ATI6850显卡在Mac OS X Sierra和High Sierra中FrameBuffer参数的注入

[复制链接]

71

主题

1461

帖子

8万

积分

系统管理员

Rank: 10Rank: 10Rank: 10

积分
86522
金钱
49328
威望
19741
经验值
12744
魅力
1787
精华
0
发表于 2017-12-14 10:05:46 | 显示全部楼层 |阅读模式
跑个题,我现在不怎么折腾黑苹果了,从EICapitan开始到现在有五六年没折腾了,能用就行。为什么折腾High Sierra?主要是听说苹果开始布置APFS文件系统。文件系统对于一个操作系统和数据存储来说是非常重要的,苹果原来的HFS+真的很渣了,连微软的NTFS都不如。好了换到正题。

我黑苹果上用的是蓝宝ATI6850 1G的显卡,虽说不是很高端,但是用来Final Cut Pro X还是比较流畅的。
这块显卡一直从lion用到ElCapitan,我都开了双DVI显示接口。当然这是要注入显卡FrameBuffer参数在Clover里的,还要DSDT的配合。通过Clover的监测,本显卡在系统里使用的是Duckweed接口定义方式,所以我在DSDT里对显卡部分定义为Duckweed,这已经是五年前的事了。
但是最近几天安装Mac OS X Sierra 和Mac OS X High Sierra时,用原来的Clover设置开不开双DVI接口了。
跑题,我的两个显示器还是很古老的方屏显示器,1280x1024的,其实方屏显示器对于运行一些软件来说是非常有用的。
直觉的判断就是显卡FrameBuffer参数没注入进去。那一定是找不到原来的参数了。
用HEX编辑软件打开Sierra里的AMD6000Controller 文件,找了半天,终于对比出来了,格式发生了变化。

一、ATI 显卡 FrameBuffer 参数格式对比
1、Mac OS X High Sierra下 AMD6000Controller 新显示器接口定义(Duckweed接口方式)
  1. 00 00 00 00 00 04 00 00 04 03 00 00 00 01 00 00 00 00 00 00 12 04 04 01
  2. 00 00 00 00 00 04 00 00 04 03 00 00 00 01 00 00 00 00 00 00 22 05 05 02
  3. 00 00 00 00 00 08 00 00 04 02 00 00 00 01 00 00 00 00 00 00 11 02 03 04
  4. 00 00 00 00 00 02 00 00 14 02 00 00 00 01 00 00 00 00 00 00 00 00 06 05
复制代码


2、Mac OS X ElCapitan下 AMD6000Controller 老驱动
  1.              00 04 00 00 04 03 00 00 00 01 00 00             12 04 04 01
  2.              00 04 00 00 04 03 00 00 00 01 00 00             22 05 05 02
  3.              00 08 00 00 04 02 00 00 00 01 00 00             11 02 03 04
  4.              00 02 00 00 14 02 00 00 00 01 00 00             00 00 06 05
复制代码


对比发现,新的FrameBuffer参数在每个显示器接口都插入了两组 00 00 00 00 00      

二、下面来具体做一遍
1、新驱动的原始参数,让Clover能在AMD6000Controller里找到这些Hex值。
  1. 000000000004000004030000000100000000000012040401
  2. 000000000004000004030000000100000000000022050502
  3. 000000000008000004020000000100000000000011020304
  4. 000000000002000014020000000100000000000000000605
复制代码


2、这是我们在Mac OS X ElCapitan 系统下,需要注入到AMD6000Controller的修正参数
  1. 00040000040300000001000012040401
  2. 04000000140200000001000010000505
  3. 00080000040200000001000022050304
  4. 04000000140200000001000011020606
复制代码

我们把它变成新格式,在新系统下注入。
  1. 000000000004000004030000000100000000000012040401
  2. 000000000400000014020000000100000000000010000505
  3. 000000000008000004020000000100000000000022050304
  4. 000000000400000014020000000100000000000011020606
复制代码


三、最终在Clover使用的HEX值
1、将新系统下FrameBuffer参数合并成Clover使用的格式,加入到Clover config.plist的ATIConnectorsData项里
  1. 000000000004000004030000000100000000000012040401000000000004000004030000000100000000000022050502000000000008000004020000000100000000000011020304000000000002000014020000000100000000000000000605
复制代码


2、将以下代码加到Clover config.plist的ATIConnectorsPatch项里,做注入。
  1. 000000000004000004030000000100000000000012040401000000000400000014020000000100000000000010000505000000000008000004020000000100000000000022050304000000000400000014020000000100000000000011020606
复制代码


3、写在config.plist中的样子:
  1. <key>KernelAndKextPatches</key>
  2.         <dict>
  3.                 <key>ATIConnectorsController</key>
  4.                 <string>6000</string>
  5.                 <key>ATIConnectorsData</key>
  6.                 <string>000000000004000004030000000100000000000012040401000000000004000004030000000100000000000022050502000000000008000004020000000100000000000011020304000000000002000014020000000100000000000000000605</string>
  7.                 <key>ATIConnectorsPatch</key>
  8.                 <string>000000000004000004030000000100000000000012040401000000000400000014020000000100000000000010000505000000000008000004020000000100000000000022050304000000000400000014020000000100000000000011020606</string>
  9.                 <key>AppleIntelCPUPM</key>
  10.                 <true/>
  11.                 <key>AppleRTC</key>
  12.                 <true/>
  13.                 <key>Debug</key>
  14.                 <false/>
  15.                 ...
复制代码


4、当然,你也可以用Clover Configurator这个图形化的配置工具来做,就像这样:


至此,ATI HD6850 HDMI Displayport DVI-I和DVI-D全接口输出成功。

画蛇添足再来个图



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
为众人抱火者, 不可使他冻毙于风雪! 为自由开路者, 不可使他困顿于荆棘!

71

主题

1461

帖子

8万

积分

系统管理员

Rank: 10Rank: 10Rank: 10

积分
86522
金钱
49328
威望
19741
经验值
12744
魅力
1787
精华
0
 楼主| 发表于 2018-1-15 20:58:34 | 显示全部楼层
OS X的终端下通用很多Unix的工具和脚本。如果从Linux迁移到OS X会发现很多熟悉的命令和脚本工具,其实并没有任何区别。
但是OS X也提供了很多其他系统所没有的特别的命令行工具。我们推荐8个这类的工具,希望有助于提高在Mac的命令行环境下的效率。
1. open
open命令用于打开文件、目录或执行程序。就等同于在命令行模式下,重复图形界面“双击”的动作。例如这个命令与在Finder中双击Safari是一样的:
$ open /Applications/Safari.app/
如果open一个文件,则会使用关联的程序打开之。例如open screenshot.png会在Preview中查看图片。
可以使用-a选项要求自行选择打开的程序,或使用-e强制在TextEdit中编辑此文件。
open一个目录会在Finder窗口中打开此目录。一个很有用的技巧是open .打开当前目录。
Finder和终端的交互是双向的——把文件从Finder中拖入终端,就等同于把文件的完整路径粘贴到命令行中。
2. pbcopy 和 pbpaste
这两个工具可以打通命令行和剪贴板。当然用鼠标操作复制粘贴也可以——但这两个工具的真正威力,发挥在将其用作Unix工具的时候。意思就是说:可以将这两个工具用作管道、IO重定向以及和其他命令的整合。例如:
$ ls ~ | pbcopy
可以将主目录的文件列表复制到剪贴板。
也可以把任意文件的内容读入剪贴板:
$ pbcopy < blogpost.txt
做点更疯狂的尝试:获取最新Google纪念徽标(doodle)的URL并复制到剪贴板:
$ curl http://www.google.com/doodles#oodles/archive | grep -A5 'latest-doodle on' | grep 'img src' | sed s/.*'<img src="\/\/'/''/ | sed s/'" alt=".*'/''/ | pbcopy
使用管道语法配合pbcopy工具可以简单的抓取命令的输出,而不必向上滚动翻阅终端窗口。可以用于和他人分享命令行的标准和错误输出。pbcopy和pbpaste也可以用于自动化或加速执行一些事情。例如把一些邮件的主题存为任务列表,就可以先从Mail.app中复制主题,再运行:
$ pbpaste >> tasklist.txt3. mdfind
许多Linux用户都发现Linux下查找文件的方法在OS X上不好用。当然经典的Unix find命令总是可以,但既然OS X有杀手级搜索工具Spotlight,为什么不在命令行上也使用一下呢?
这就是mdfind命令了。Spotlight能做的查找,mdfind也能做。包括搜索文件的内容和元数据(metadata)。
mdfind还提供更多的搜索选项。例如-onlyin选项可以约束搜索范围为一个目录:
$ mdfind -onlyin ~/Documents essay
mdfind的索引数据库在后台自动更新,不过你也可以使用mdutil工具诊断数据库的问题,诊断mdfind的问题也等同于诊断Spotlight。如果Spotlight的工作不正确,mdutil -E命令可以强制重建索引数据库。也可以用mdutil -i彻底关闭文件索引。
4. screencapture
screencapture命令可以截图。和Grab.app与cmd + shift + 3或cmd + shift + 4热键相似,但更加的灵活。
抓取包含鼠标光标的全屏幕,并以image.png插入到新邮件的附件中:
$ screencapture -C -M image.png
用鼠标选择抓取窗口(及阴影)并复制到剪贴板:
$ screencapture -c -W
延时10秒后抓屏,并在Preview中打开之:
$ screencapture -T 10 -P image.png
用鼠标截取一个矩形区域,抓取后存为pdf文件:
$ screencapture -s -t pdf image.pdf
更多用法请参阅screencapture --help。
5. launchctl
launchctl管理OS X的启动脚本,控制启动计算机时需要开启的服务。也可以设置定时执行特定任务的脚本,就像Linux cron一样。
例如,开机时自动启动Apache服务器:
$ sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist
运行launchctl list显示当前的启动脚本。sudo launchctl unload [path/to/script]停止正在运行的启动脚本,再加上-w选项即可去除开机启动。用这个方法可以一次去除Adobe或Microsoft Office所附带的所有“自动更新”后台程序。
Launchd脚本存储在以下位置:
~/Library/LaunchAgents    /Library/LaunchAgents          /Library/LaunchDaemons/System/Library/LaunchAgents/System/Library/LaunchDaemons
启动脚本的格式可以参考这篇blog,或苹果开发者中心的文章。你也可以使用Lingon应用来完全取代命令行。
6. say
say是一个文本转语音(TTS)的有趣的工具,引擎和OS X使用的一样也是VoiceOver。如果不加其他选项,则会简单的语音朗读你给定的字符串:
$ say "Never trust a computer you can't lift."
用-f选项朗读特定文本文件,-o选项将朗读结果存为音频文件而不是播放:
$ say -f mynovel.txt -o myaudiobook.aiff
say命令可以用于在脚本中播放警告或提示。例如你可以设置Automator或Hazel脚本处理文件,并在任务完成时用say命令语音提示。
最好玩(不过也负罪感十足)的用法是:通过SSH连接到朋友或同事的计算机,然后用say命令给他们一个大大大惊喜……
可以在系统设置(System Preferences)的字典和语音(Dictation & Speech)选项中调整系统的语音选项甚至是语音的语言。
7. diskutil
diskutil是OS X磁盘工具应用的命令行版。既可以完成图形界面应用的所有任务,也可以做一些全盘填0、全盘填随机数等额外的任务。先使用diskutil list查看所有磁盘的列表和所在路径,然后对特定的磁盘执行命令。
警告:不正确使用diskutil可能意外的破坏磁盘数据。请小心。
8. brew
Homebrew程序提供的brew,严格来讲不是一个OS X的原生命令,但任何一个OS X的专业用户都不会错过它。“OS X缺少的包管理器”这个评价是恰如其分的。如果你曾经在Linux上使用过apt-get(或其他包管理器——译者注),你就会发现Homebrew基本上是一样的。
使用brew可以简单的获取数千种开源工具和函数库。例如brew install imagemagick就可以安装ImageMagick(几乎可以处理任何图像问题,转换任何格式的图像工具),brew install node可以安装Node.js(当前大热的服务器端JavaScript编程工具)。
也可以通过Homebrew做有趣的事情:brew install archey会安装Archey(在启动命令行时显示苹果LOGO和计算机硬件参数的小工具)。
为众人抱火者, 不可使他冻毙于风雪! 为自由开路者, 不可使他困顿于荆棘!
回复 支持 反对

使用道具 举报

71

主题

1461

帖子

8万

积分

系统管理员

Rank: 10Rank: 10Rank: 10

积分
86522
金钱
49328
威望
19741
经验值
12744
魅力
1787
精华
0
 楼主| 发表于 2018-2-1 13:05:17 | 显示全部楼层

本层内容转自网络

clover 显卡注入功能详细讲解

GraphicsInjector功能源于变色龙,不过比变色龙更加灵活,定制性更加强大。Intel的显卡 GMA950, X3100, HD300, HD4000被证实可以很好的工作。你仅仅只要在config.plist打开显卡侦测功能,特别是对于N卡。
在新版中显卡参数分开:intel、ati、nv区分开来。

1
2
3
4
5
6
7
8
9
<key>Inject</key>
<dict>
<key>ATI</key>
<false/>
<key>Intel</key>
<false/>
<key>NVidia</key>
<true/>
</dict>

但是要注意一点,有些笔记本(比如我的(Ermac) Dell Inspiron 1525)进入就是黑屏。这时你可以用睡眠的小窍门(意思是说睡以后重新唤醒就不会黑屏??)或者在dsdt中删除Device(CRT) 装置。在现在的clover版本中,你可以使用 DsdtFixMask值修复,其值是 0x0100Display Fix
N卡:这是被广泛支持的显卡,其数据库由ErmaC不断更新。这是在config.plist中参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
<key>Graphics</key>
<dict>
<key>GraphicsInjector</key>
<string>Yes</string>
<key>LoadVBios</key>
<string>No</string>
<key>VideoPorts</key>
<string>3</string>
<key>NVCAP</key>
<string>04000000000003000C0000000000000700000000</string>
<key>display-cfg</key>
<string>03010300FFFF0001</string>
</dict>

其中VideoPort为你的显卡接口数,nvcap值是你自己显卡的nvcap值,display-cfg无关紧要,默认就是这个值。
一般N卡只需打开显卡注入功能即可即:

1
2
<key>NVidia</key>
<true/>

其他接口数,显卡内存什么的全部不需要.
其会自动侦测,并采用默认的nvcap和其他值,clover现在用的默认nvcap值就是上面这组:

04000000000003000C0000000000000700000000

这个你可以在clover源码中找到:rEFI_UEFI—》》Platform—》NVIDIA.C中。
遇到黑屏或自动重启才启用定制nvcap值,nvcap值可由idsdt+显卡rom,勾选生成显卡驱动点击开始生成,在运行信息中可以看到。Nvmaker这个软件有些机子无法运行。当然并不是非要自己获取自己显卡的nvcap值。在下表的值大家都可以试试。

要多屏输出可能要修改nvcap值,关于nvcap值的定义不再此累述,因为我也不清楚。更多的认为03(十六进制数0x03)和0C这两个位置的所在的数字在取作用,03是主屏,0c是扩展屏,0x03=0011,1就是打开接口的意思.为了不重复在主屏和扩展屏中同时打开某接口,可以使03所在位数值和0c数字所在位置数值加起来刚好等于F(十六进制)。
以下常用的nvcap值组合:

找到正确的nvcap值后可以把其值写入源码,自己编译自己的clover:N卡信息在:rEFI_UEFI—》》Platform—》》NVIDIA.C中。 当然不要那么费事,直接clover config中注入nvcap值即可。

##关于ATI/AMD显卡

这里要做个特别的讨论。对以原生支持的5xxx and 6xxxA卡,在不开启显卡注入功能的情况下用共同的ATIRadeonFramebuffer可进入桌面并且opengl可用但并不理想,如打开DVDPlayer它会崩溃。

如果你开启显卡注入功能: GI = Yes,进入mac可能遇到黑屏或者白屏因为所有的信息已经在第二屏显示 所以你需要修改接口参数,即FB使得其正确对应接口输出。
国外帖:http://www.insanelymac.com/forum/topic/249642-editing-custom-personalities-for-ati-radeon-hd45xxx/
以我的ATI HD6670为例,config配置如下:

1
2
3
4
5
6
7
8
9
10
11
<key>Graphics</key>
<dict>
<key>GraphicsInjector</key>
<string>Yes</string>
<key>FBName</key>
<string>Ipomoea</string>
<key>LoadVBios</key>
<string>No</string>
<key>VideoPorts</key>
<string>3</string>
</dict>

接口数为三,使用的ati config值为Ipomoea,并修正原始的接口参数:

1
2
3
4
5
6
7
8
9
10
<key>KernelAndKextPatches</key>
<dict>
<key>KernelCpu</key>
<string>No</string>
<key>ATIConnectorsController</key>
<string>6000</string>
<key>ATIConnectorsData</key>
<string>000400000403000000010000120401050008000004020000000100001102040310000000100000000001000000000002</string>
<key>ATIConnectorsPatch</key>
<string>040000000403000000010000100001061000000010000000000100000000000100080000040200000001000012040403</string></dict>

ATIConnectorsData为原始的接口参数,下文会介绍如何获取。
ATIConnectorsPatch为修正的接口参数,同样下文会叙述如何修改。
对于移动版显卡,还得设置一个值:

1
2
<key>LoadVBios</key>
<string>Yes</string>

具体在config中的设置请看config-sample.plist文件

##关于intel显卡

对于HD4000,显卡注入打开,然后注入合适的ig-platform-id以下是可选的值:对于笔记本

1
2
3
4
5
6
7
8
9
ig-platform-id: 01660000
ig-platform-id: 01660001
ig-platform-id: 01660002
ig-platform-id: 01660003
ig-platform-id: 01660004
g-platform-id: 01660008
ig-platform-id: 01660009
ig-platform-id: 0166000A
ig-platform-id: 0166000B

台式:

1
2
3
ig-platform-id: 01620005
ig-platform-id: 01620006
ig-platform-id: 01620007

一个个试,找到自己合适的。笔记本常用的4,a。
同时为避免因AppleIntelSNBGraphicsFB.kext使得 AppleIntelFramebufferCapri.kext加载出错(五国),要注入IMEI:

1
0x1e3a8086

即在fixes dsdt的new way勾选addIMEI。同时FAKEI的IMEI值填入0x1e3a8086。
同时fixes dsdt中勾选FIX INTEL GFX 和FIX DISPlay,当然addDTGP是必须的。同时注入EDID开启。
黑屏 、重影双分屏花屏ig-platform-id.
在安装的时候可以填写FAKEID的intel GFX的值由g-platform-id替代,可以跳过intel 显卡。但要驱动intel 显卡此项只能填
HD4000: 0x01668086(笔记本)0x01628086(台式)。HD25000x01528086 0x01568086 或不填,用系统自动侦测的。

EDID注入

在某些情况下你需要注入EDID,如某些sony本本senseid为07,和笔记本内屏黑屏的情况。你也可以自己定制EDID.

1
2
<key>InjectEDID</key>
<string>Yes</string>

用这种方法通过bios获取EDID是可用的。Osx获取的不是总是对的。如果你的显示器没有描述DDC的信息什么是DDC?显示器和主机的通信协议:http://wenku.baidu.com/view/1f635435a32d7375a4178043

你可以注入显示器官方的edid

1
2
<key>CustomEDID</key>
<data>AP///////wAyDADfAAAAAAASAQOAIRV4CunVmVlTjigmUFQAAAABAQEBAQEBAQEBAQEBAQEB3iGgcFCEHzAgIFYAS88QAAAY3iGgcFCEHzAgIFYAS88QAAAAAAAA/gBXNjU3RwAxNTRXUDEKAAAA/gAjMz1IZYSq/wIBCiAgAJo=</data>

更具体简单的看这边:http://bbs.pcbeta.com/viewthread-1473634-1-1
AAPL,DualLink参数设置 DualLink参数可解决高分辨率显示器黑边,花屏等问题。
其值只有0和1,0不启用,1开启。

1
2
<key>DualLink</key>
<string>1</string>

有些卡必须设置为0,如ATI HD1600,否则你将看到四个桌面。

ATI 显卡接口参数修正

首先,感谢bcc9提供方法,pcj实现这个path,dmazar使之工作。

开始正题:

  1. 下载radeon_bios_decoder和ati_personality.pl
    传送门:http://pan.baidu.com/s/1o62SAk6

MD5:3052fa7872f93a826f9e8c0867309816

对于10.8.3这个可能无法获取信息,试试新版:

传送门:http://pan.baidu.com/s/1qWDDT1M

MD5:c928fc9f01ce99c000ae54e130a2e5ad

感谢bcc9的维护,xhcnb提供附件
radeon_bios_decode+redsock_bios_decoder传送门:http://pan.baidu.com/s/1c0gSv3i

MD5:973e0e18584906989a3c9457ff84fb0d

新版的:ati-personality.0.12传送门:http://pan.baidu.com/s/1gd1fczD

MD5:c70c2bcc48cee7f9198ba4a1f8421afe

2.在win下查看你的显卡id(设备管理,属性)或用system info查看。
我的DeviceID= 0x6758,这是6000系列的卡,
你的是什么系列的?皮卡丘的帖子有收集请看这:

http://bbs.pcbeta.com/viewthread-1060313-1-1
找到你的显卡id或找到接近的。
例如,你的显卡的设备id:DeviceID=0x68B2,并不在原生支持的显卡里头,只能找到相近的0x68B1,所以你可以确定你的显卡是5系列的,这时你必须在
AMDRadeonAccelerator.kext/Contens/Info.plistATI5000Controller.kext/Contents/Info.plist中添加自己的显卡ID。id位置靠近和你相似的id。
例如:

1
2
<key>IOPCIMatch</key>
<string>0x68981002 0x68991002 0x68E01002 0x68E11002 0x68D81002 0x68C010020x68C11002 0x68D910020x68B21002 0x68B810020x68B01002 0x68B11002 0x68A01002 0x68A11002 </string>

3.用ati_personality.pl或取原生支持显卡接口的参数信息(此步可省去直接附上:ATIFramebuffer原版参数 

传送门:http://pan.baidu.com/s/18aLT8

MD5:1e84c29b7d7723890083992dfd7dca63

10.8.3下的FB参数由xhcnb提供:10.8.3 FrameBuffer 

传送门:http://pan.baidu.com/s/1gdsX4zT

MD5:3b8c075825d541a20f4104af5d3e5066

具体用法如下:
假设你把ati-personality.pl放在桌面,确定终端已经用cd命令切换工作目录到桌面,则运行如下命令:

./ati-personality.pl ATI5000Controller.kext

这个命令获取原生支持的5系列的显卡接口参数,请确定S/L/E下有ATI5000Controller.kext这个kext
这边已经搜集好啦5系列和6系列的接口参数(ATIFramebuffer原版参数上文已给)以上命令可免:

1
2
3
4
5
6
7
Kext /System/Library/Extensions//ATI5000Controller.kext/Contents/MacOS/AMD5000Controller
Personality: Douc
ConnectorInfo count in decimal: 2
Disk offset in decimal 165856
0000000 02 00 00 00 00 05 00 00 09 03 00 00 21 03 02 02
0000010 00 04 00 00 04 02 00 00 00 03 00 00 11 02 01 01
0000020

打开可以看到形如上面的信息。
那么如何选择ATI config值(Framebuffers,就是原版参数中的Personality值)呢?
其实我认为任意一个都是可以的(个人认为,也许我是错的)
对于5系列:Baboon常用于桌面版 , Galago 用于移动版
对于6系列: Ipomoea用于桌面版, Osmunda 用于移动版
注意这只是推荐使用……
你也可以在变色龙的源码中发现各个型号显卡变色龙采用的
ati config值:http://forge.voodooprojects.org/p/chameleon/source/tree/HEAD/trunk/i386/libsaio/ati.c
同样ctrf+f搜索页面,直接输入你的显卡型号或显卡id如上文提到的0x68B1,直接搜索得到(不一定搜索得到,类似的也是可以的):

1
{0x68B1,0x00000000,CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770Series",kHoolock}

那么其ati config值就是Hoolock(注意去掉前面的字母k)
so,你也可以采用变色龙推荐的ati config值,但,凡是没有绝对……
现在我已 HD6670为例,其DevID=0x6758,采用aticonfig值为Ipomoea
其原始接口信息(搜索上文所给的ATIFramebuffer原版参数.rtf文件):

1
2
3
4
5
6
Personality: Ipomoea
ConnectorInfo count in decimal: 3
Disk offset in decimal 180112
0000000 00 04 00 00 04 03 00 00 00 01 00 00 12 04 01 05
0000010 00 08 00 00 04 02 00 00 00 01 00 00 11 02 04 03
0000020 10 00 00 00 10 00 00 00 00 01 00 00 00 00 00 02

其中

1
2
3
0000000 00 04 00 00 04 03 00 00 00 01 00 00 12 04 01 05
0000010 00 08 00 00 04 02 00 00 00 01 00 00 11 02 04 03
0000020 10 00 00 00 10 00 00 00 00 01 00 00 00 00 00 02

这一系列数子就是我们要更改的数据,即:

1
2
<key>ATIConnectorsData</key>
<string>*****</string>

的值
那么如何修正这组数据呢?
4.运行radeon_bios_decoder获取自己的显卡信息
首先你得获取自己的显卡bios(显卡rom),在win下你可以用像GPU-Z,everest等如果你已经安装啦clover,clover也可提取

启动clover后在引导界面(选择启动分区界面)按F6后进入mac后你将在/EFI/misc/c0000.bin找到你的显卡rom文件,前提是你的EFI分区得是fat32格式。

现在假设你获取到显卡rom(命名为c0000.bin)并和radeon_bios_decoder都放在同一个文件夹,终端已经用cd 命令切换到该文件夹:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
iMac:test slice$ ./radeon_bios_decode c0000.bin
ATOM BIOS Rom:
SubsystemVendorID: 0x1458 SubsystemID: 0x2557
IOBaseAddress: 0xe000
Filename: R667D32I.F1
BIOS Bootup Message:
GV-R667D3-2GI/F1
PCI ID: 1002:6758
Connector at index 0
Type [@offset 44282]: HDMI-A (11)
Encoder [@offset 44286]: INTERNAL_UNIPHY2 (0x21)
i2cid [@offset 44356]: 0x92, OSX senseid: 0x3
Connector at index 1
Type [@offset 44292]: DVI-D (3)
Encoder [@offset 44296]: INTERNAL_UNIPHY (0x1e)
i2cid [@offset 44383]: 0x95, OSX senseid: 0x6
Connector at index 2
Type [@offset 44302]: VGA (1)
Encoder [@offset 44306]: INTERNAL_KLDSCP_DAC1 (0x15)
i2cid [@offset 44410]: 0x90, OSX senseid: 0x1
iMac:test slice$

以上信息我们只需要每个接口的senseid值:

1
2
3
DVI-D: 06
VGA: 01
HDMI: 03

以上我们知道有3个接口,DVI-D,VGA, HDMI,而Ipomoea原始接口信息如下:

1
2
3
0000000 00 04 00 00 04 03 00 00 00 01 00 00 12 04 01 05
0000010 00 08 00 00 04 02 00 00 00 01 00 00 11 02 04 03
0000020 10 00 00 00 10 00 00 00 00 01 00 00 00 00 00 02

这组数据中,绿色的就是描述接口类型的,红色部分就是senseid值.
其中我们已经了解到不同接口对应的值:

1
2
3
4
5
0004- DP
0008 - HDMI
1000 - VGA
0400 - DVI-D
0200 - LCD - for notebooks

笔记本内屏也有写成LVDS的
而由上可知该显卡只有三个接口DVI-D,VGA,HDMI,分别对应的描述接口类型的值为:0400,1000,0008;对应的senseid值分别为:06,01,03

所以00  04应改为0400,对应的senseid值也得修改。

修改后:

1
2
3
0000000 04 00 00 00 04 03 00 00 00 01 00 00 12 04 01 06 DVI-D
0000010 00 08 00 00 04 02 00 00 00 01 00 00 11 02 04 03 HDMI
0000020 10 00 00 00 10 00 00 00 00 01 00 00 00 00 00 01 VGA

我也可以交换第三和第二行:

1
0000000 04  0000  00  04  03  00  00  00  01  00  00  12  04  01060000010 10  00 00  00  10  00  00  00  00  01  00  00  00  00  00 010000020 00  08 00  00  04  02  00  00  00  01  00  00  11  02  04 03

现在可以把修正的Fb参数写入config啦:

1
2
3
4
5
6
7
8
<key>KernelAndKextPatches</key>
<dict>
<key>ATIConnectorsController</key>
<string>6000</string>
<key>ATIConnectorsData</key>
<string>000400000403000000010000120401050008000004020000000100001102040310000000100000000001000000000002</string>
<key>ATIConnectorsPatch</key>
<string>040000000403000000010000100001061000000010000000000100000000000100080000040200000001000012040403</string>

6.这个补丁工作在两种情况下;KernelCache开启(默认开启),或boot-args 包含”WithKexts”值。
要注意你所选择的修改framebuffer要和写入config.plist对应。

1
2
3
4
5
6
<key>Graphics</key>
<dict>
<key>GraphicsInjector</key>
<string>Yes</string>
<key>FBName</key>
<string>Ipomoea</string>

测试在我的 HD6670、HD5570,dvd正常,可以播放4K分辨率的视频。
其他信息:

1
2
3
0000000 04 00 00 00 04 03 00 00 00 01 00 00 12 04 01 06
0000010 10 00 00 00 10 00 00 00 00 01 00 00 00 00 00 01
0000020 00 08 00 00 04 02 00 00 00 01 00 00 11 02 05 03

如果遇到睡眠问题,改变vga输出的encoderid 值为00
如果hdmi接口有问题改变HotPlugID值为05

任意kext打补丁(KextsToPatch)

你可以给很多kext打补丁,用这种方法,可免以直接用二进制修改工具像hexedit,oxED修改kext的二进制字典,info同样也是可以修改。真的很方便。
给一个非常有趣的例子:
我研究voodoohda这个kext,发现字符串

1
"Headphones"= 48 65 61 64 70 68 6F 6E 65 73 00

其中后面一排数字是其各个字母对应的ASCII码(十六进制)
我想把他重命名为”Telephones” =54 65 6C 65 70 68 6F 6E 65 73 00
写入config是这样子:

1
2
3
4
5
6
7
8
9
10
11
<key>KextsToPatch</key>
<array><key>0</key>
<dict>
<key>Name</key>
<string>VoodooHDA</string>
<key>Find</key>
<data>SGVhZHBob25lcwA=</data>
<key>Replace</key>
<data>VGVsZXBob25lcwA=</data>
</dict>
</array>

重启就可以看到效果。

这是给kext中二进制文件patch,也可以给info.plist:

1
2
3
4
5
6
7
8
9
10
11
<key>0</key>
<dict>
<key>Name</key>
<string>AirPortAtheros40</string>
<key>InfoPlistPatch</key>
<string>Yes</string>
<key>Find</key>
<string>pci168c,2a</string>
<key>Replace</key>
<string>pci168c,2b</string>
</dict>

如上是给AirPortAtheros40.kext的info.plist增加id。要特别注意的是patch info.plist是,注意你要path的值是string(字符型),还是data(数据),对应string,find值和repalce值如上可不转换为hex(十六进制)data则要转换而且还是64进制。如fakesmc的patch:

AWgPAACW就是01680f00 0096 转换后的结果。这个直接用plist edit pro编辑fakesmc的info.plist信息是在下方同步的结果就是转换后的情况。
再来一个:

1
2
3
4
5
6
7
8
9
10
11
12
<dict>
<key>Name</key>
<string>AppleHDAController</string>
<key>Comment</key>
<string>Patch_to_not_load_this_driver</string>
<key>InfoPlistPatch</key>
<true/>
<key>Find</key>
<string>0x04020000</string>
<key>Replace</key>
<string>0x44220000</string>
</dict>

现在来几个有实用的价值的补丁方法。
其中一个就是ATIConnectors patch为5系列和6系列的A卡。例如对以os 10.6,ATI RadeonX1650的显卡DeviceID=0x71cd不是通用的(不是公版?),所以你不仅必须在ATIRadeonX1000.kext的info.plist中写入显卡id,还得修改其二进制文件。以前你可能要用oxed或hexeditor来编辑替换二级制文件中的内容,现在你只要这么做:

1
2
3
4
5
6
7
8
9
<key>0</key>
<dict>
<key>Name</key>
<string>ATIRadeonX1000</string>
<key>Find</key>
<string>81fa87710000</string>
<key>Replace</key>
<string>81facd710000</string>
</dict>

这边罗列几个已经定义好的path:

  1. Patch for AppleIntelCPUPowerManagement because of ASUS BIOSbreak MSR register 0xE2
1
2
<key>AsusAICPUPM</key>
<string>Yes</string>

2.path for AppleRTC防cmos重置

1
2
<key>AppleRTC</key>
<string>Yes</string>

3.开启TRIM支持

4.timeouton AHCI by bcc9
Waitingfor root device when kernel cache used; only with some disks +FIX

5.hd3000接口修正

1
2
3
4
5
6
<dict>
<key>Name</key>
<string>AppleIntelSNBGraphicsFB</string>
<key>Find</key> <data>AQIEABAHAAAQBwAABQMAAAIAAAAwAAAAAgUAAAAEAAAHAAAAAwQAAAAEAAAJAAAABAYAAAAEAAAJAAAA</data>
<key>Replace</key> <data>AQIDABAHAAAQBwAAAwQAAAAEAAAJAAAAAgUAAAAEAAAHAAAABAYAAAAEAAAJAAAAAAAAAAAAAAAAAAAA</data>
</dict>

即去掉LCD接口,优先使用dvi接口:

hd3000接口的修改教程:前往
6.磁盘内建,可解决橙色磁盘等问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
<key>3</key>
<dict>
<key>Find</key>
<data>
RXh0ZXJuYWw=
</data>
<key>Name</key>
<string>AppleAHCIPort</string>
<key>Replace</key>
<data>
SW50ZXJuYWw=
</data>
</dict>
  1. AppleTyMCEDriver patch to use MacPro5,1 。这个patch后可设置机型为 MacPro5,1,而不需要删掉ecc校验驱动。
1
2
3
4
5
6
<key>Name</key>
<string>AppleTyMCEDriver</string>
<key>Find</key>
<data>cgoATWFjUHJvNCwxAE1hY1BybzUsMQBY</data>
key>Replace</key>
<data>cgoAAAAAAAAAAAAAAAAAAAAAAAAAAABY</data>

定制EDID

在两种情况下你可能需要这个功能
1.显示器不是DDC monitor
2.显示器是DDC monitor但是mac无法获取edid。
注入Edid有助于解决笔记本内屏黑屏的问题。
你仅仅需要设置 InjectEDID = yes。而对于第一种情况我们必须从其他地方获取edid并下入config.plist.
如何获取EDID呢,论坛常用提到的工具是这个: EDID Manager
我以前的帖子有提供下载和方法:
http://bbs.pcbeta.com/viewthread-1031060-1-1
还有这个更简单:http://bbs.pcbeta.com/viewthread-1473634-1-1

为众人抱火者, 不可使他冻毙于风雪! 为自由开路者, 不可使他困顿于荆棘!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|Archiver|五常信息网(五常论坛) ( 黑ICP备06006344号

GMT+8, 2024-3-29 13:53 , Processed in 0.077228 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表