前一篇提到要完善(希望能夠完美)的解決黑蘋果音效與睡眠的問題,須用到DSDT的修改。DSDT是存在於BIOS中定義設備配置表當中的一種,由於MAC電腦的DSDT定義的方式跟一般電腦的DSDT定義的語法內容有些出入,所以當OSX開機直接存取非MAC機器的DSDT資料時,可能讓OSX系統對設備發生某些誤判,造成OSX在開機的過程中無法成功載入驅動程式(Kext)。所以理想的方式是修改BIOS中的DSDT,儘可能修改到OSX系統可辨識的定義方式。然而這也有風險,BIOS內修改過的DSDT可能導致執行其他作業系統時發生異常,若修改過程有錯誤,還可能導致主機板整個掛點,最後得整張退回原廠修理(重灌BIOS)。
所幸這個問題有解。我們在安裝MultiBeast時勾選了UserDSDT時,會在系統Volumes的根目錄建立一個/Extra的目錄,OSX在開機時,Chimera這一類的 BootLoader 引導程式會先讀取/Extra目錄底下的設定內容去引導OSX開機。而Chimera引導程式也支援讀取DSDT檔案功能,所以並不用冒險修改BIOS內的DSDT內容,只須事先把BIOS內的DSDT資料導出來,經過我們針對MAC屬性做適當的修改之後存成檔案,放到/Extra目錄下,以後Chimera在引導OSX開機時,只需讀取改好的DSDT檔案,提供給OSX開機程序載入Kext驅動,不用冒險修改BIOS內容,也能達到修改DSDT的目的。
修改DSDT的工具很多,不過只需要以下兩個工具就能達到目的:
DSDTSE(下載):強大好用的DSDT內容編輯器。
每張主機板取出的DSDT內容都不一樣,不過畢竟它也是規格,所以格式上大多有些共通點。有關修改DSDT音效的方式,英文能力好的可參考toleda發表在Tonymac的文章:
Optimized AppleHDA for Realtek ALC 887/888b on Lion - Update(連結)。
修改DSDT:手動編輯修改DSDT.aml檔
執行DSDTSE,先將主機板BIOS內的DSDT資料導出。
導出之後,DSDT內容格式如下:(常寫程式的人,對於這格式應該不會太陌生)
就跟程式語言一樣,括號{ }是一組,中間定義了若干參數,然而括號中又有括號的層級結構,要在適當的位置加上適當的定義,需要有點撰寫程式邏輯的基礎。如果對這個沒有把握,我想DSDT修改的方式就不適合操作了。
以下修改DSDT會使用到的功能如紅框所示:
以上是簡單介紹修改DSDT的操作方式,開始進入正題。
一、技嘉GA-H77-DS3H
黑蘋果二號主機板GA-H77-DS3H所採用的音效晶片為ALC887-VD,之所以選擇DS3H的原因,是因為技嘉其他型號的7系列主機板大多改採VIA的VT2021音效晶片,而VT2021目前沒有對應的驅動程式(Kext),就算DSDT修改正確了,也沒辦法正常驅動,只能用萬用VoodooHDA一版一版的踹。(印象中Apple沒用過VIA音效晶片,所以不太可能無中生有)
以下是針對GA-H77-DS3H主機板的修改方式(注意:其他主機板並不適用):
DSDT音效修改(2012.08.07新增:支援ALC887、內顯HD4000、獨顯AX6870的HDMI音效輸出)
1.音效I/O埠:搜尋Device (HDEF),然後在這個區段內添加以下紅字部分:
Device (HDEF)
{
<...一堆看不懂的天書代碼>
Method (_DSM, 4, NotSerialized) {
Store (Package (0x06)
{
"hda-gfx",
Buffer (0x0A)
{
"onboard-1"
},
"layout-id",
Buffer (0x04)
{
0x83, 0x01, 0x00, 0x00
},
"PinConfigurations",
Buffer (Zero) {}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
參考圖(以下的反白部分)
註:Multibeast 5.1.3版以後,layout-id 改為 0x03, 0x00, 0x00, 0x00(ALC885, 887, 888, 889, 892, 898 全部都適用此layout-id)
2. 這一段會用到蘋果MAC獨家的DTGP函數,所以需要自行找個地方添加DTGP函數定義。找個區段添加以下這一段:
Method (DTGP, 5, NotSerialized)
{
If (LEqual (Arg0, Buffer (0x10)
{
/* 0000 */ 0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44,
/* 0008 */ 0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B
}))
{
If (LEqual (Arg1, One))
{
If (LEqual (Arg2, Zero))
{
Store (Buffer (One)
{
0x03
}, Arg4)
Return (One)
}
If (LEqual (Arg2, One))
{
Return (One)
}
}
}
Store (Buffer (One)
{
0x00
}, Arg4)
Return (Zero)
}
我把它補在DSDT內容最前面第一段,最保險也最不會出錯(下圖反白部分)。而DTGP有很多地方都用得到。參考圖:
3.接下來是讓AX6870支援HDMI音效輸出:搜尋Device (PCI0),在這個區段添加以下內容:
Device (PEGP)
{
Name (_ADR, 0x00010000)
Name (_STA, 0x0F)
Name (_PRW, Package (0x02)
{
0x09,
0x05
})
Device (GFX0)
{
Name (_ADR, Zero)
Name (_SUN, One)
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x0C)
{
"@0,name",
Buffer (0x0D)
{
"ATY,Duckweed"
},
"@1,name",
Buffer (0x0D)
{
"ATY,Duckweed"
},
"@2,name",
Buffer (0x0D)
{
"ATY,Duckweed"
},
"@3,name",
Buffer (0x0D)
{
"ATY,Duckweed"
},
"model",
Buffer (0x13)
{
"AMD Radeon HD 6870"
},
"hda-gfx",
Buffer (0x0A)
{
"onboard-1"
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
Device (HDAU)
{
Name (_ADR, One)
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"hda-gfx",
Buffer (0x0A)
{
"onboard-1"
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
}
參考圖(底下反白部分):
4.(2012.08.07 新增HD4000的HDMI)再來就是支援內顯HD 4000的HDMI音效輸出:搜尋Name (_ADR, 0x00020000),確認這字串只出現一次,且它在DEVICE (GFX0) 底下,新增以下內容:
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x06)
{
"device-id",
Buffer (0x04)
{
0x66, 0x01, 0x00, 0x00
},
"AAPL,ig-platform-id",
Buffer (0x04)
{
0x0A, 0x00, 0x66, 0x01
},
"hda-gfx",
Buffer (0x0A)
{
"onboard-1"
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
參考圖(底下反白部分):
最後編譯成DSDT.aml丟到/Extra目錄下,並搭配MultiBeast 4.6.1的安裝音效設定 (Drivers & Bootloaders ->Kexts & Eablers ->Audio -> Realtek ALC8xx -> Patched AppleHDA -> ALC888b/887 ->v100302 Current 即可)
重開機...幸運的話就能看到「系統偏好設定」的聲音輸入與輸出HDMI全都能用了。
系統描述也有了
電源管理:修改DSDT驅動原生的AppleLPC.kext
這個只需修改DSDT,不需另外安裝第三方驅動。搜尋 0x001F0000 ,然後在它所在的區段加上底下這一段內容(藍字部分是參照到AppleLPC.kext的info內容):
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"device-id",
Buffer (0x04)
{
0x15, 0x28, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
參考圖(反白內容)
修改編譯完丟到/Extra重開機,若有成功,兩個地方有變化:
AppleLPC.kext成功載入了。
三個勾選項目變成四個。
修正10.8.x以後,H77/Z77 系統報告發生 Unknow AHCI Standard Controller:
搜尋 Name (_ADR, 0x001F0002),確認它在 Device (SAT0) 區段下,補上以下內容:
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"device-id",
Buffer (0x04)
{
0x03, 0x1E, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
參考圖:
修正這個問題有兩種方式,一個是上述的修改DSDT,另一個是修改AppleAHCIPort.kext 的 Info.plist,二擇一。
註:修改 AppleAHCIPort.kext 方式請參考:黑蘋果啓用硬體RAID磁碟陣列(連結)。
二、技嘉GA-Z77X-UP4 TH主機板
這張主機大概是比較尊貴,所以難搞了點。我的心得是得再編輯org.chameleon.Boot.plist,不然睡眠之後不容易喚醒。
(一)編輯/Extra/org.chameleon.Boot.plist,新增:
<key>device-properties</key>
<string>7f000000010000000100000073000000020000000
2010c00d041030a000000000101060000027fff04002c0000
004100410050004c002c00690067002d0070006c00610074
0066006f0072006d002d00690064000000080000000a0066
01140000006800640061002d0067006600780000000d000
0006f6e626f6172642d31</string>
參考圖:
補充說明:這串device-properties的數字內容其實是透過gfxutil編碼而成。原始的內容是定義HD4000的platform-id與位置參考如下:
(二)DSDT音效修改(支援ALC892、內顯HD4000、獨顯AX6870的HDMI音效輸出)
1.音效I/O埠:搜尋Device (HDEF),然後在這個區段內添加以下紅字部分:
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x06)
{
"hda-gfx",
Buffer (0x0A)
{
"onboard-1"
},
"layout-id",
Buffer (0x04)
{
0x88, 0x01, 0x00, 0x00
},
"PinConfigurations",
Buffer (Zero) {}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
參考圖:
其實就是GA-H77-DS3H的layout-id從「0x83, 0x01, 0x00, 0x00」改成「0x88, 0x01, 0x00, 0x00」。
註:Multibeast 5.1.3版以後,layout-id 改為 0x03, 0x00, 0x00, 0x00(ALC885, 887, 888, 889, 892, 898 全部都適用此layout-id)
2. 這一段會用到蘋果MAC獨家的DTGP函數,所以需要自行找個地方添加DTGP函數定義。找個區段添加以下這一段:
Method (DTGP, 5, NotSerialized)
{
If (LEqual (Arg0, Buffer (0x10)
{
/* 0000 */ 0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44,
/* 0008 */ 0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B
}))
{
If (LEqual (Arg1, One))
{
If (LEqual (Arg2, Zero))
{
Store (Buffer (One)
{
0x03
}, Arg4)
Return (One)
}
If (LEqual (Arg2, One))
{
Return (One)
}
}
}
Store (Buffer (One)
{
0x00
}, Arg4)
Return (Zero)
}
我把它補在DSDT內容最前面第一段,最保險也最不會出錯(下圖反白部分)。而DTGP有很多地方都用得到。參考圖:
3.接下來是讓AX6870支援HDMI音效輸出:搜尋Name (_ADR, 0x00010000),確認在Device (PEG0)底下,在這個區段添加以下內容:
Name (_STA, 0x0F)
Device (GFX0)
{
Name (_ADR, Zero)
Name (_SUN, One)
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x0C)
{
"@0,name",
Buffer (0x0D)
{
"ATY,Duckweed"
},
"@1,name",
Buffer (0x0D)
{
"ATY,Duckweed"
},
"@2,name",
Buffer (0x0D)
{
"ATY,Duckweed"
},
"@3,name",
Buffer (0x0D)
{
"ATY,Duckweed"
},
"model",
Buffer (0x13)
{
"AMD Radeon HD 6870"
},
"hda-gfx",
Buffer (0x0A)
{
"onboard-1"
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
Device (HDAU)
{
Name (_ADR, One)
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"hda-gfx",
Buffer (0x0A)
{
"onboard-1"
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
參考圖(底下反白部分):
以上AX6870支援HDMI音效這一段做法,看起來跟上面GA-H77-DS3H不一樣。不過H77-DS3H應該也可以用相同的做法試試看。
(2013.07.14 new,2014.03.09 修正支援 10.8.x ~ 10.9.2) GTX 670支援 HDMI(此法支援 nVidia GTX 5xx~6xx):
搜尋 Name (_ADR, 0x00010000),確認在Device (PEG0)底下,在這個區段添加以下內容:
Device (GFX0)
{
Name (_ADR, Zero)
Name (_SUN, One)
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x0A)
{
"@0,connector-type",
Buffer (0x04)
{
0x00, 0x08, 0x00, 0x00
},
"@1,connector-type",
Buffer (0x04)
{
0x00, 0x08, 0x00, 0x00
},
"@2,connector-type",
Buffer (0x04)
{
0x00, 0x08, 0x00, 0x00
},
"@3,connector-type",
Buffer (0x04)
{
0x00, 0x08, 0x00, 0x00
},
"hda-gfx",
Buffer (0x0A)
{
"onboard-2"
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
Device (HDAU)
{
Name (_ADR, One)
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"hda-gfx",
Buffer (0x0A)
{
"onboard-2"
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
參考圖:
4.再來就是支援內顯HD 4000的HDMI音效輸出:搜尋Name (_ADR, 0x00020000),確認這字串只出現一次,且它在DEVICE (GFX0) 底下,新增以下內容:
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x06)
{
"AAPL,ig-platform-id",
Buffer (0x04)
{
0x0A, 0x00, 0x66, 0x01
},
"device-id",
Buffer (0x04)
{
0x66, 0x01, 0x00, 0x00
},
"hda-gfx",
Buffer (0x0A)
{
"onboard-1"
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
參考
電源管理:AppleLPC.kext原生自動載入
與GA-H77-DS3H不一樣,GA-Z77X-UP4 TH 的 AppleLPC.kext會自動載入,所以不需修正DSDT來處理這一段。
修正10.8.x以後,H77/Z77 系統報告發生 Unknow AHCI Standard Controller:
搜尋 Name (_ADR, 0x001F0002),確認它在 Device (SAT0) 區段下,補上以下內容:
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"device-id",
Buffer (0x04)
{
0x03, 0x1E, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
參考圖:
修正這個問題有兩種方式,一個是上述的修改DSDT,另一個是修改AppleAHCIPort.kext 的 Info.plist,二擇一。
註:修改 AppleAHCIPort.kext 方式請參考:黑蘋果啓用硬體RAID磁碟陣列(連結)。
最後,GA-Z77X-UP4 TH 的 MultiBeast 安裝設定如下:
修正 USB 2 裝置在 Intel 7 系列 USB 3 埠無法使用的情形
修改方式完全參考自以下文章:
Giacomoleopardo Build - ZOTAC Z77-ITX WiFi - Core i7-3770T - MacMini 6,2 (第16.17樓)
以 OSX 10.8來說,直接安裝 Zenith432's GenericUSBXHCI.kext 即可(於 MultiBeast 5.3.x 以後的「USB 3.0 - Universal 項目」),就能一併解決原生 Intel USB3 與 VIA VL800 的問題。
以下 DSDT 修正 USB3 的方式只能針對原生 Intel 7 系列的 USB3 埠無法使用 USB 2 裝置的問題,無法解決原生 OSX 不支援 GA-Z77X-UP4 TH 的 VIA VL800 USB 埠。
1. 備份本來的DSDT.aml
2. 尋找 Device (XHC) 至 Device (HDEF) 區段,整段替換成以下紅字內容(意即Device (XHC) 也一併改成 Device (XHC1) ):
Device (XHC1)
{
Name (_ADR, 0x00140000)
OperationRegion (XPRT, PCI_Config, 0x74, 0x6C)
Field (XPRT, DWordAcc, NoLock, Preserve)
{
Offset (0x01),
PMEE, 1,
, 6,
PMES, 1,
Offset (0x5C),
PR2, 32,
PR2M, 32,
PR3, 32,
PR3M, 32
}
OperationRegion (XH1C, PCI_Config, 0xD0, 0x10)
Field (XH1C, ByteAcc, NoLock, Preserve)
{
PAHC, 1,
PBHC, 1,
PCHC, 1,
PDHC, 1,
Offset (0x08),
PASS, 1,
PBSS, 1,
PCSS, 1,
PDSS, 1
}
OperationRegion (XHC2, PCI_Config, 0x44, 0x04)
Field (XHC2, ByteAcc, NoLock, Preserve)
{
Offset (0x01),
MIAI, 2
}
Name (XRST, Zero)
Method (_INI, 0, NotSerialized)
{
If (OSDW ())
{
Store (Zero, MIAI)
}
If (LAnd (LGreaterEqual (OSYS, 0x07DC), LLess (OSYS, 0x2710)))
{
Store (One, PASS)
Store (One, PAHC)
Store (One, PBSS)
Store (One, PBHC)
Store (One, PCSS)
Store (One, PCHC)
Store (One, PDSS)
Store (One, PDHC)
}
}
Method (_S3D, 0, NotSerialized)
{
Return (0x02)
}
Method (_S4D, 0, NotSerialized)
{
Return (0x02)
}
Device (RHUB)
{
Name (_ADR, Zero)
Device (PRT1)
{
Name (_ADR, One)
Method (_UPC, 0, Serialized)
{
Name (UPCP, Package (0x04)
{
0xFF,
0x03,
Zero,
Zero
})
Return (UPCP)
}
Method (_PLD, 0, Serialized)
{
Name (PLDP, Package (0x01)
{
Buffer (0x10)
{
/* 0000 */ 0x01, 0xC6, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00,
/* 0008 */ 0x69, 0x0C, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00
}
})
Return (PLDP)
}
Name (MUXS, "EHCA")
}
Device (PRT2)
{
Name (_ADR, 0x02)
Method (_UPC, 0, Serialized)
{
Name (UPCP, Package (0x04)
{
0xFF,
0x03,
Zero,
Zero
})
Return (UPCP)
}
Method (_PLD, 0, Serialized)
{
Name (PLDP, Package (0x01)
{
Buffer (0x10)
{
/* 0000 */ 0x01, 0xC6, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00,
/* 0008 */ 0x69, 0x0C, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00
}
})
Return (PLDP)
}
Name (MUXS, "EHCB")
}
Device (PRT3)
{
Name (_ADR, 0x03)
Method (_UPC, 0, Serialized)
{
Name (UPCP, Package (0x04)
{
0xFF,
0x03,
Zero,
Zero
})
Return (UPCP)
}
Method (_PLD, 0, Serialized)
{
Name (PLDP, Package (0x01)
{
Buffer (0x10)
{
/* 0000 */ 0x01, 0xC6, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00,
/* 0008 */ 0x69, 0x0C, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00
}
})
Return (PLDP)
}
Name (MUXS, "EHCC")
}
Device (PRT4)
{
Name (_ADR, 0x04)
Method (_UPC, 0, Serialized)
{
Name (UPCP, Package (0x04)
{
0xFF,
0x03,
Zero,
Zero
})
Return (UPCP)
}
Method (_PLD, 0, Serialized)
{
Name (PLDP, Package (0x01)
{
Buffer (0x10)
{
/* 0000 */ 0x01, 0xC6, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00,
/* 0008 */ 0x69, 0x0C, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00
}
})
Return (PLDP)
}
Name (MUXS, "EHCD")
}
}
Method (_PRW, 0, NotSerialized)
{
Return (GPRW (0x0D, 0x04))
}
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x0B)
{
"AAPL,current-available",
0x0834,
"AAPL,current-extra",
0x0898,
"AAPL,current-extra-in-sleep",
0x0640,
"AAPL,max-port-current-in-sleep",
0x0834,
"AAPL,device-internal",
Zero,
Buffer (One)
{
0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
Method (XHCA, 0, NotSerialized)
{
If (LNot (OSDW ()))
{
Store (One, PASS)
}
Store (One, PAHC)
}
Method (XHCB, 0, NotSerialized)
{
If (LNot (OSDW ()))
{
Store (One, PBSS)
}
Store (One, PBHC)
}
Method (XHCC, 0, NotSerialized)
{
If (LNot (OSDW ()))
{
Store (One, PCSS)
}
Store (One, PCHC)
}
Method (XHCD, 0, NotSerialized)
{
If (LNot (OSDW ()))
{
Store (One, PDSS)
}
Store (One, PDHC)
}
Method (EHCA, 0, NotSerialized)
{
If (LNot (OSDW ()))
{
Store (Zero, PASS)
}
Store (Zero, PAHC)
}
Method (EHCB, 0, NotSerialized)
{
If (LNot (OSDW ()))
{
Store (Zero, PBSS)
}
Store (Zero, PBHC)
}
Method (EHCC, 0, NotSerialized)
{
If (LNot (OSDW ()))
{
Store (Zero, PCSS)
}
Store (Zero, PCHC)
}
Method (EHCD, 0, NotSerialized)
{
If (LNot (OSDW ()))
{
Store (Zero, PDSS)
}
Store (Zero, PDHC)
}
}
Device (HDEF)
如圖
3.尋找Name (_ADR, 0x001D0000) ,然後在這個區段內往下找到 Device (HUBN) ,再往下找會發現有幾個命名為 Device (PR1n)的區段(n= 1 到 8,也就是 Device (PR11) ~ Device (PR18) 共八個 ),然後在各區段補上:
Device (PR11) 補上 Name (MUXS, "XHCA")
Device (PR12) 補上 Name (MUXS, "XHCB")
Device (PR13) 補上 Name (MUXS, "XHCC")
Device (PR18) 補上 Name (MUXS, "XHCD")
也就是該區段若不包括 Method (_DSM 內容,再補上。例如以下 Device (PR11) 範例:
4. 搜尋 Method (_OSC, 4, Serialized) ,將 Method (_OSC, 4, Serialized) 至 Scope (\_SB.PCI0) 中間的內容全部替換成以下紅字內容
Method (_OSC, 4, Serialized)
{
Store (Arg3, Local0)
CreateDWordField (Local0, Zero, CDW1)
CreateDWordField (Local0, 0x04, CDW2)
CreateDWordField (Local0, 0x08, CDW3)
Store (CDW2, SUPP)
Store (CDW3, CTRL)
If (LEqual (One, OSDW ()))
{
If (LAnd (LEqual (Arg0, GUID), NEXP))
{
If (Not (And (CDW1, One)))
{
If (And (CTRL, 0x02))
{
NHPG ()
}
If (And (CTRL, 0x04))
{
NPME ()
}
}
If (LNotEqual (Arg1, One))
{
Or (CDW1, 0x08, CDW1)
}
If (LNotEqual (CDW3, CTRL))
{
Or (CDW1, 0x10, CDW1)
}
Store (CTRL, CDW3)
Store (CTRL, OSCC)
Return (Local0)
}
Else
{
Or (CDW1, 0x04, CDW1)
Return (Local0)
}
}
Else
{
If (LEqual (Arg0, Buffer (0x10)
{
/* 0000 */ 0xA9, 0x12, 0x95, 0x7C, 0x05, 0x17, 0xB4, 0x4C,
/* 0008 */ 0xAF, 0x7D, 0x50, 0x6A, 0x24, 0x23, 0xAB, 0x71
}))
{
Store (One, ^XHC1.PASS)
Store (One, ^XHC1.PAHC)
Store (One, ^XHC1.PBSS)
Store (One, ^XHC1.PBHC)
Store (One, ^XHC1.PCSS)
Store (One, ^XHC1.PCHC)
Store (One, ^XHC1.PDSS)
Store (One, ^XHC1.PDHC)
}
Return (Local0)
}
}
Scope (\_SB.PCI0)
範例:
5. 尋找 Store (0x07D0, OSYS) ,確認該區段底下有幾個作業系統的識別字,補上紅字內容:
If (_OSI ("Darwin"))
{
Store (0x2710, OSYS)
}
範例:
6. 找個地方補上紅字內容:
Method (OSDW, 0, NotSerialized)
{
If (LEqual (OSYS, 0x2710))
{
Return (One)
}
Else
{
Return (Zero)
}
}
範例:
7. 最後,如果有 \_SB.PCI0.XHC.XWAK () ,改成 \_SB.PCI0.XHC1._INI ()。
8. USB3 修正完成。
補充叮嚀:修改 DSDT 的確是有些難度,但它是讓黑蘋果運作更接近 MAC 的重要手段,尤其是 HDMI 音效,修改 DSDT 往往比踹過數十種版本的 Kext 還有效。有些網站或論壇也提供 DSDT 檔案下載,不過建議黑蘋果用戶花點精神,了解一下 DSDT 的修改操作,原因如下:
1.DSDT 的內容是有版權的:版權屬於主機板廠商,任意散佈 DSDT 內容,行為上是不合法的--雖然它跟盜版沒有直接與必然的關係。修改買來自用主機板的 DSDT 就不會有適法性的問題。
2.BIOS 有版本的差異:不同版本的 BIOS 搭配不同版本的 DSDT 可能會發生異常。我的經驗是,就連重刷同一版本的 BIOS 之後,使用原來的 DSDT 也會出現睡眠異常,需重新產生修改 DSDT。
3.不同的系統組態也會有不同的 DSDT 內容,就算型號與版本相同,錯用之後有時會發生問題(最常見的是休眠不醒)。參考以下內容:
And thanks for your sharing !
能讓我下載你的DSDT 嗎?
謝謝!!
我能請教你。。我在電源管理的部份。
沒辦法加入你提供的那些字串是不是那裡有問題呢。
都會編譯失敗。但沒加上時。就還ok
我跟你都是 h77-ds3h 的。
然後目前我是用msi 6850的卡
能請教如何讓其出現hdmi 的效果呢。
也是這樣用嗎?
1 , Graphics driver 不能裝GTX670的那項,會無法開機(開機過程出現錯誤) ;
2 , Miscllaneou-FakeSMC Plugins-Motherboard Plugin裝完了會馬上當機;一定要按 Reset 重開機 ;
3 , Miscllaneou-FakeSMC Plugins-Nvidia GeForce Plugin 也不能裝會無法開機 (開機過程出現錯誤);
4 , Customization-Boot Options-GraphiceEnabler=No 要勾選,否則白菊花轉完即會白畫面無法進入系統;
排除上訴問題後再依你的文章修改音效及睡眠問題基本 OK,但 HDMI 音效暫時無解(我的 CPU 是i5 3570;顯卡是 GT640),找不到相關資料可參考,另睡眠省電項目的最後一項不會出現(電腦當機時自動重開機,未修改 DSDT 時即只有出現兩個項目;修改後出現3個項目且睡眠功能正常),最後還是感謝你的文章,讓我完成系統安裝儘管還有些許問題待解。
冒昧請教您一個問題???
我的主機板是GA-H67N-USB3-B3以及GA-P67A-UD3P-B3
參考Tonymac上的教學後已經順利的安裝完畢。
有個小問題就是....為何使用了他們網站上的DSDT檔案後
我的硬碟圖示在系統中會變成外接硬碟
雖然不太影響使用,但看到的時候感覺還是不太好
請問若要修改DSDT讓系統正確辨識圖示,要加上哪些參數呢??
小弟英文不好,對DSDT的修改真的也是一竅不通
若有打擾的部分還煩請見諒
謝謝您
Device (GFX0)
{
Name (_ADR, Zero)
Name (_SUN, One)
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x0C)
{
"@0,name",
Buffer (0x0A)
{
"ATY,Gibba"
},
"@1,name",
Buffer (0x0A)
{
"ATY,Gibba"
},
"@2,name",
Buffer (0x0A)
{
"ATY,Gibba"
},
"@3,name",
Buffer (0x0A)
{
"ATY,Gibba"
},
"model",
Buffer (0x13)
{
"AMD Radeon HD 6850"
},
"hda-gfx",
Buffer (0x0A)
{
"onboard-1"
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
Device (HDAU)
{
Name (_ADR, One)
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"hda-gfx",
Buffer (0x0A)
{
"onboard-1"
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
}
===========================================
Fix HDMI port for MSI R6850 Cyclone 1GD5 Power Edition/OC
Framebuffer of MSI R6850 Cyclone 1GD5 Power Edition/OC : Gibba
你可以使用Hex Fiend這類app去編輯 ATI6000Controller.kext/Contents/MacOS/ATI6000Controller
原來的碼
0000000 00 04 00 00 04 03 00 00 00 01 00 00 12 04 05 01
0000010 00 04 00 00 04 03 00 00 00 01 00 00 22 05 04 02
0000020 00 08 00 00 04 02 00 00 00 01 00 00 11 02 06 04
0000030 00 02 00 00 14 02 00 00 00 01 00 00 00 00 03 05
0000040 04 00 00 00 04 02 00 00 00 01 00 00 11 02 01 03
0000050
改成下面的樣子
0000000 00 04 00 00 04 03 00 00 00 01 00 00 12 04 05 01
0000010 00 08 00 00 04 02 00 00 00 01 00 00 22 05 04 04
0000020 00 02 00 00 14 02 00 00 00 01 00 00 00 00 03 05
0000030 04 00 00 00 04 02 00 00 00 01 00 00 11 02 01 06
0000040 00 04 00 00 04 03 00 00 00 01 00 00 22 05 06 02
0000050
Connector at index 0
Type [@offset 44278]: DisplayPort (10)
Encoder [@offset 44282]: INTERNAL_UNIPHY2 (0x21)
i2cid [@offset 44388]: 0x90, OSX senseid: 0x1
Connector Object Id [19] which is [DISPLAY_PORT]
encoder obj id [0x21] which is [INTERNAL_UNIPHY2 (osx txmit 0x12 [duallink 0x2] enc 0x4)] linkb:
false
Connector at index 1
Type [@offset 44288]: HDMI-A (11)
Encoder [@offset 44292]: INTERNAL_UNIPHY2 (0x21)
i2cid [@offset 44415]: 0x93, OSX senseid: 0x4
Connector Object Id [12] which is [HDMI_TYPE_A]
encoder obj id [0x21] which is [INTERNAL_UNIPHY2 (osx txmit 0x22 [duallink 0x2] enc 0x5)] linkb:
true
Connector at index 2
Type [@offset 44298]: DVI-I (2)
Encoder [@offset 44302]: INTERNAL_UNIPHY (0x1e)
i2cid [@offset 44452]: 0x94, OSX senseid: 0x5
Connector Object Id [2] which is [DVI_I]
encoder obj id [0x1e] which is [INTERNAL_UNIPHY (osx txmit 0x10 [duallink 0x0] enc 0x0)] linkb:
false
Connector at index 3
Type [@offset 44308]: DVI-I (2)
Encoder [@offset 44312]: INTERNAL_KLDSCP_DAC1 (0x15)
i2cid [@offset 44452]: 0x94, OSX senseid: 0x5
Connector Object Id [2] which is [DVI_I]
encoder obj id [0x15] which is [INTERNAL_KLDSCP_DAC1 (osx txmit 0x00 enc 0x10?)] linkb: false
Connector at index 4
Type [@offset 44318]: DVI-D (3)
Encoder [@offset 44322]: INTERNAL_UNIPHY1 (0x20)
i2cid [@offset 44479]: 0x95, OSX senseid: 0x6
Connector Object Id [3] which is [DVI_D]
encoder obj id [0x20] which is [INTERNAL_UNIPHY1 (osx txmit 0x11 [duallink 0x1] enc 0x2)] linkb:
false
之前沒仔細看,所以一直打不開這篇,今天瞄到密碼後,進來分享一下= .=
http://www.lis186.com/?p=1878
http://fred-zone.blogspot.tw/2008/10/bios-acpi-description-table.html
http://bbs.pcbeta.com/viewthread-991835-1-1.html
00 04 00 00 04 03 00 00 00 01 00 00 12 04 05 01
按照順序是
00 04 00 00 接口類型
04 03 00 00 接口標誌位
00 01 顯示特性
00 00 對齊字符位
12 txmt
04 encd
05 hotplugin
01 senseID
以MSI這板子為例
雖然framebuffer有五行,但有作用的只有00 10 20 30,40這行是沒作用的,所以你要先調整位置.....把你用不到的連接埠移到40這行
再來就用提取出來的顯卡BIOS資訊修改它,依照接口的類型把txmt、encd、senseID改成你顯卡的實際數值,hotplugin這值則是照你的意思去編排就好。
既然迷宮路線不同,地圖只好重新畫過.....修改framebuffer。
我這張MSI 6850的framebuffer會用Gibba,是因為拿Gibba這張地圖,資訊可以在不改kext的情況下,從D-Sub這連接埠正常傳出運作,至於說......拿其它的framebuffer如Duckweed來改成符合這張卡的地圖......理論上可行,實際上沒試過,如果真可行......以後就把變色龍或chimera預設使用的framebuffer內容改成自己顯卡的數值就成了!
首先感謝Ben大的教學使小弟順利安裝了黑蘋,依過程小弟利用DSDTSE修正了DSDT(未加入AX6870那一段),亦將編譯後的資料置放於/Extra下,亦利用MultiBeast重新設定一次,但仍於聲音處找不到輸出設備,但於系統資訊處看的到相關設備的描述,不知小弟遺漏那一段,請求大大賜教,謝謝!!
我的設備 CPU:i5 3570K 主機板:H77-DS3H 未使用獨顯
感謝你用心回覆,因為小弟是新手layout-id是複製Ben大的文章內容中的。另小弟今晨發現我線上購買的版本是 ML10.8.2 不知此一版本安裝是否有差?
今天我會去下載舊版的MultiBeast試試!!
謝謝大大熱心協助!!謝謝!!
重新用USB進去就進不去了....
好無奈==