黑蘋果用雜交法修改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的人寫的很垃圾,導出以後的都是錯。。。

發表評論

電子郵件地址不會被公開。 必填項已用 * 標註

*

您可以使用這些 HTML 標籤和屬性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>