GraphicsInjector功能源於變色龍,不過比變色龍更加靈活,定制性更加強大。Intel的顯卡 GMA950, X3100, HD300, HD4000被證實可以很好的工作。你僅僅只要在config.plist打開顯卡偵測功能,特別是對於N卡。 在新版中顯卡參數分開:intel、ati、nv區分開來。
<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
值修復,其值是 0x0100
即Display Fix
, N卡:這是被廣泛支持的顯卡,其數據庫由ErmaC不斷更新。這是在config.plist
中參數:
<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卡只需打開顯卡注入功能即可即:
<key>NVidia</key>
<true/>
其他接口數,顯卡內存什么的全部不需要. 其會自動偵測,並采用默認的nvcap和其他值,clover現在用的默認nvcap值就是上面這組:
040000000000
03
000C
0000000000000700000000
這個你可以在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配置如下:
<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,並修正原始的接口參數:
<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為修正的接口參數,同樣下文會敘述如何修改。 對於移動版顯卡,還得設置一個值:
<key>LoadVBios</key>
<string>Yes</string>
具體在config中的設置請看config-sample.plist文件
關於intel顯卡
對於HD4000,顯卡注入打開,然后注入合適的ig-platform-id以下是可選的值:對於筆記本
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
台式:
ig-platform-id: 01620005
ig-platform-id: 01620006
ig-platform-id: 01620007
一個個試,找到自己合適的。筆記本常用的4,a。 同時為避免因AppleIntelSNBGraphicsFB.kext使得 AppleIntelFramebufferCapri.kext加載出錯(五國),要注入IMEI:
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
(台式)。HD2500
是0x01528086
0x01568086
或不填,用系統自動偵測的。
EDID注入
在某些情況下你需要注入EDID,如某些sony本本senseid為07,和筆記本內屏黑屏的情況。你也可以自己定制EDID.
<key>InjectEDID</key>
<string>Yes</string>
用這種方法通過bios獲取EDID是可用的。Osx獲取的不是總是對的。如果你的顯示器沒有描述DDC的信息什么是DDC?顯示器和主機的通信協議:http://wenku.baidu.com/view/1f635435a32d7375a4178043.html
你可以注入顯示器官方的edid
<key>CustomEDID</key>
<data>AP///////wAyDADfAAAAAAASAQOAIRV4CunVmVlTjigmUFQAAAABAQEBAQEBAQEBAQEBAQEB3iGgcFCEHzAgIFYAS88QAAAY3iGgcFCEHzAgIFYAS88QAAAAAAAA/gBXNjU3RwAxNTRXUDEKAAAA/gAjMz1IZYSq/wIBCiAgAJo=</data>
更具體簡單的看這邊:http://bbs.pcbeta.com/viewthread-1473634-1-1.htmlAAPL,DualLink參數設置 DualLink參數可解決高分辨率顯示器黑邊,花屏等問題。 其值只有0和1,0不啟用,1開啟。
<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.html 找到你的顯卡id或找到接近的。 例如,你的顯卡的設備id:DeviceID=0x68B2
,並不在原生支持的顯卡里頭,只能找到相近的0x68B1,所以你可以確定你的顯卡是5系列的,這時你必須在AMDRadeonAccelerator.kext/Contens/Info.plist
和ATI5000Controller.kext/Contents/Info.plist
中添加自己的顯卡ID。id位置靠近和你相似的id。 例如:
<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原版參數上文已給)以上命令可免:
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,直接搜索得到(不一定搜索得到,類似的也是可以的):
{0x68B1,0x00000000,CHIP_FAMILY_JUNIPER,"ATI Radeon HD 5770Series",kHoolock}
那么其ati config值就是Hoolock(注意去掉前面的字母k) so,你也可以采用變色龍推薦的ati config值,但,凡是沒有絕對…… 現在我已 HD6670為例,其DevID=0x6758,采用aticonfig值為Ipomoea 其原始接口信息(搜索上文所給的ATIFramebuffer原版參數.rtf文件):
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
其中
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
這一系列數子就是我們要更改的數據,即:
<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 命令切換到該文件夾:
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值:
DVI-D: 06
VGA: 01
HDMI: 03
以上我們知道有3個接口,DVI-D,VGA, HDMI,而Ipomoea原始接口信息如下:
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值. 其中我們已經了解到不同接口對應的值:
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值也得修改。
修改后:
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
我也可以交換第三和第二行:
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啦:
<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對應。
<key>Graphics</key>
<dict>
<key>GraphicsInjector</key>
<string>Yes</string>
<key>FBName</key>
<string>Ipomoea</string>
測試在我的 HD6670、HD5570,dvd正常,可以播放4K分辨率的視頻。 其他信息:
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,發現字符串
"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是這樣子:
<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:
<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信息是在下方同步的結果就是轉換后的情況。 再來一個:
<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來編輯替換二級制文件中的內容,現在你只要這么做:
<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
<key>AsusAICPUPM</key>
<string>Yes</string>
2.path for AppleRTC防cmos重置
<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接口修正
<dict>
<key>Name</key>
<string>AppleIntelSNBGraphicsFB</string>
<key>Find</key> <data>AQIEABAHAAAQBwAABQMAAAIAAAAwAAAAAgUAAAAEAAAHAAAAAwQAAAAEAAAJAAAABAYAAAAEAAAJAAAA</data>
<key>Replace</key> <data>AQIDABAHAAAQBwAAAwQAAAAEAAAJAAAAAgUAAAAEAAAHAAAABAYAAAAEAAAJAAAAAAAAAAAAAAAAAAAA</data>
</dict>
hd3000接口的修改教程:前往 6.磁盤內建,可解決橙色磁盤等問題。
<key>3</key>
<dict>
<key>Find</key>
<data>
RXh0ZXJuYWw=
</data>
<key>Name</key>
<string>AppleAHCIPort</string>
<key>Replace</key>
<data>
SW50ZXJuYWw=
</data>
</dict>
- AppleTyMCEDriver patch to use MacPro5,1 。這個patch后可設置機型為 MacPro5,1,而不需要刪掉ecc校驗驅動。
<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.html 還有這個更簡單:http://bbs.pcbeta.com/viewthread-1473634-1-1.html
本作品由 maoshu 創作,采用 CC BY-NC-SA 3.0 許可協議 進行許可。