黑苹果用杂交法修改framebuffer开启显卡所有输出端口成功

我的笔记本是未来人类X611,有两个显卡,一个是AMD HD8970M,一个是CPU集成的Intel HD4600。在Bios里不能关闭集显,所以听说驱动HD8970M是没有希望了。这个笔记本有三个视频输出接口,一个DisplayPort,一个miniDP和一个HDMI接口。

安装苹果系统10.9.1 Mavericks后,使用变色龙引导,使用注入法代码

	<key>GraphicsEnabler</key>
	<string>Yes</string>
	<key>IntelAzulFB</key>
	<string>11</string>

可以驱动HD4600,内屏、外接HDMI接口和miniDP接口正常,但DP接口没有显示。

设置IntelAzulFB成11其实就相当于InjectIntel-ig 0500260a。 参看 http://bbs.pcbeta.com/viewthread-1379618-1-1.html ,对应变色龙的IntelAzulFB参数值和我在X611上的测试结果:

0 = 00000604 闪屏
1 = 0000060c 闪屏
2 = 00001604 闪屏
3 = 0000160a 闪屏
4 = 0000160c 闪屏
5 = 00002604 闪屏
6 = 0000260a 闪屏
7 = 0000260c 闪屏
8 = 0000260d 闪屏
9 = 02001604 黑屏
10 = 0300220d 花屏
11 = 0500260a 可以显示,hdmi接口有,dp口没有
12 = 0600260a  开机小花屏,可以显示,hdmi接口可以显示,但dp口没有
13 = 0700260d  黑屏
14 = 0800260a  黑屏
15 = 08002e0a 黑屏

也就是说只有0500260a和0600260a两组可以正常使用。都是其中一个DP口不能用,其它的可以使用。

但对照上术帖子的表格,可以看出只有一个参数有四个显示输出接口:0x0700260d eDP, DP, DP, HDMI,接口跟我的机子完全一样,可惜这个在我的机子上使用直接黑屏。0500260a可以显示,但接口不全,0700260d接口差不多,但黑屏,能不能把两个杂交出一个适合我机子的Framebuffer呢?

HD4600的Framebuffer信息保存文件是:
/System/Library/Extensions/AppleIntelFramebufferAzul.kext/Contents/MacOS/AppleIntelFramebufferAzul

使用HexEdit.app等软件打开可以编辑。相关的代码内容如下:

0500 260a 0103 0303 0000 0002 0000 0001
0000 5000 0000 0040 d90a 0000 d90a 0000
0000 0000 0000 0000 0000 1000 0200 0000
3000 0000 0105 1200 0004 0000 8700 0000
0204 1200 0004 0000 8700 0000 ff00 0100
0100 0000 4000 0000 0f00 0000 0101 0000
0400 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0e00 0000

0600 260a 0103 0303 0000 0002 0000 0001
0000 6000 0000 0040 d90a 0000 d90a 0000
0000 0000 0000 0000 0000 1000 0200 0000
3000 0000 0105 1200 0004 0000 8700 0000
0204 1200 0004 0000 8700 0000 ff00 0100
0100 0000 4000 0000 0f00 0000 0101 0000
0400 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0e00 0000

0800 260a 0103 0303 0000 0004 0000 2002
0000 0001 0000 0040 6c05 0000 6c05 0000
0000 0000 0000 0000 0000 1000 0200 0000
3000 0000 0105 1200 0004 0000 0701 0000
0204 1400 000c 0000 0701 0000 ff00 0100
0100 0000 4000 0000 1e00 0000 0505 0901
0000 0000 0000 0000 3063 0500 0000 0000
706c 0500 0000 0000 3200 0000 0000 0000

0800 2e0a 0103 0303 0000 0004 0000 2002
0000 0001 0000 0040 6c05 0000 6c05 0000
0000 0000 0000 0000 0000 1000 0200 0000
3000 0000 0105 1200 0004 0000 0701 0000
0204 1400 000c 0000 0701 0000 ff00 0100
0100 0000 4000 0000 1e00 0000 0505 0901
0000 0000 0000 0000 3063 0500 0000 0000
706c 0500 0000 0000 3200 0000 0e00 0000

0700 260d 0103 0403 0000 0004 0000 2002
0000 5001 0000 0040 a107 0000 a107 0000
0000 0000 0000 0000 0000 1000 0200 0000
3000 0000 0105 1200 0004 0000 0701 0000
0204 1400 0004 0000 0701 0000 0306 1200
0008 0000 0600 0000 1e00 0000 0505 0900
0400 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 3200 0000 0e00 0000

对照halechan的说明:

以0000260c这组为例简要分析一下某些字节的含义:
把它整理成如下形式:

0 00 26 0C00 03 03 0300 00 00 04 00 00 00 01 00 00 F0 00 00 00 00 4099 14 00 00 99 14 00 00 00 00 00 00 00 00 00 0000 00 10 00 02 00 00 00 30 00 00 0001 05 12 00 04 00 00 00 04 00 00 0002 04 12 00 00 08 00 00 82 00 00 00FF 00 01 00 01 00 00 00 40 00 00 0004 00 00 00 00 00 07 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

下面对每行简要解释下:
00 00 26 0C ig-platform-id
00 03 03 03 unkown pipes ports framebufferNumber
00 00 00 04 固定显存大小
00 00 00 01 Framebuffer显存大小
00 00 F0 00 硬件指针显存大小
00 00 00 40 最大动态显存大小

99 14 00 00 fBacklightFrequency
99 14 00 00 fBacklightMax
00 00 00 00 00 00 00 00

00 00 10 00
02 00 00 00 接口类型
30 00 00 0001 05 12 00
04 00 00 00
04 00 00 0002 04 12 00
00 08 00 00
82 00 00 00FF 00 01 00 01 00 00 00 40 00 00 00

每12个字节一组,一行表示一个接口,接口类型
02 00 00 00 eDP
04 00 00 00 DVI
00 04 00 00 DP
00 08 00 00 HDMI
00 0c 00 00 Thunderbolt
04 00 00 00 00 00 07 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00作用不明

分析可以发现:
0500260a和0600260a两组唯一的不同点是硬件指针显存大小。我测试两个效果差不多,不知道这个数值影响什么。

至于0600260a和0700260d不同点比较多。我的土办法是保留0600260a中接口信息之外的内容,直接把0700260d中关于输出接口的内容搬到它里面。

0500 260a 0103 0303 0000 0002 0000 0001
0000 5000 0000 0040 d90a 0000 d90a 0000
0000 0000 0000 0000 0000 1000 

0200 0000
3000 0000 0105 1200 
0004 0000 
8700 0000 0204 1200 
0004 0000 
8700 0000 ff00 0100
0100 0000 
4000 0000 0f00 0000 

0101 0000
0400 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0e00 0000

0700 260d 0103 0403 0000 0002 0000 0001
0000 5000 0000 0040 a90a 0000 d90a 0000
0000 0000 0000 0000 0000 1000 

0200 0000
3000 0000 0105 1200 
0004 0000 
0701 0000 0204 1400 
0004 0000 
0701 0000 0306 1200
0008 0000 
0600 0000 1e00 0000

0505 0900
0400 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 3200 0000 0e00 0000

组成一个新的framebuffer组,我把它替代到在我的机子上没有用的0800260a之下,变成:

0800 260a 0103 0403 0000 0002 0000 0001
0000 5000 0000 0040 d90a 0000 d90a 0000
0000 0000 0000 0000 0000 1000 0200 0000
3000 0000 0105 1200 

0004 0000 
0701 0000 0204 1400 
0004 0000 
0701 0000 0306 1200
0008 0000 
0600 0000 1e00 0000 
0101 0000

0400 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0e00 0000

注意ports数目那个也要改成4。

把内容保存回/System/Library/Extensions/AppleIntelFramebufferAzul.kext/Contents/MacOS/AppleIntelFramebufferAzul, 然后修改

	<key>IntelAzulFB</key>
	<string>11</string>

	<key>IntelAzulFB</key>
	<string>14</string>

调用这个新的杂交Framebuffer,开机测试,所有视频输出端口,包含之前不能使用的DP接口,都可以接显示器了,同时内屏、和其它两个显示器三屏也没有问题。

附:
关于接口代码,rampagedev的高级补充:

Connector Type*                00  04  00  00
ATY,ControlFlags**         04  03  00  00
Features**                          00  01
Unknown*                          00 00
Transmitter*                     12
Encoder*                            04
Hotplug ID*                      05
Sense ID**                         01

Decode the ATI/AMD ROM Output Connector Types:

Connector Type LVDS           0×00000002  = 02  00  00  00         Note: Laptop Monitor / eDP?
Connector Type DVIDL         0×00000004 = 04  00  00  00        Note: Dual Link DVI
Connector Type VGA             0×00000010 = 10  00  00  00
Connector Type S-V               0×00000080 = 08  00  00  00
Connector Type DP                0×00000400 = 00  04  00  00
Connector Type HDMI          0×00000800 =  00  08  00  00
Connector Type DVISL          0×00000200 = 00  02  00  00      Note: Single Link DVI

相关资源链接:
http://bbs.pcbeta.com/viewthread-1379618-1-1.html
http://www.insanelymac.com/forum/topic/290783-intel-hd-graphics-4600-haswell-working-displayport/
http://rampagedev.wordpress.com/kext-editing/editing-atiamd-framebuffer-personality/

此条目发表在 其它 分类目录,贴了 , , , , , 标签。将固定链接加入收藏夹。

黑苹果用杂交法修改framebuffer开启显卡所有输出端口成功》有 1 条评论

  1. Chenyang 说:

    我这几天在黑p151sm。在一个很会黑的朋友帮助下基本什么都搞定了,现在一是没有解决睡眠问题,而是没有驱动8970m,听说10.10gm版本以后可能会有戏。dsdt什么的太复杂了,那哥们晚上弄了一晚上,得出一个结论,写这个dsdt的人写的很垃圾,导出以后的都是错。。。

发表评论