進入製作DSDT之前我們總該要知道DSDT到底是什麼東西吧,所以首先講一下DSDT的概念。這個要從ACPI說起了,ACPI是 Intel(i386,x86_64,IA64)平台的標準韌體規範,絕大部分OS需要從BIOS得到的資訊都可以從ACPI得到,並且現在的趨勢是未來 的任何新的特性相關的資訊都只能從ACPI得到。ACPI的資訊包括:配置資訊、ACPI相關裝置、底層硬體、電源管理、 裝置熱插拔,ACPI主要是由很多表(Table)組成,而DSDT(Differentiated System Description Table)是其中一個最主要的ACPI表之一。具體的我也不太清楚,反正就是用來描述硬體就是了(><)
DSDT包含了很多aml代碼,大多數BIOS是針對Windows開發的,而Windows自己也不完全遵循ACPI規範。因為BIOS的 Bug,這些代碼本身可能有錯,導致其他的系統如Linux、Mac OS出錯,所以我們要手動修複這些Bug使之相容Mac系統。DSDT在BIOS裡是以編譯後的aml檔案存在,需要把它解出來,反編譯成aml代碼形式 (dsl檔案,文字檔),代碼修改完畢再重新編譯,替換掉BIOS裡原來的DSDT表(現在提取DSDT已不需要BIOS檔案,下面會介紹到 )。不過PC-EFI、Chameleon等的出現,使得我們不再需要冒險刷BIOS,只要把製作好的DSDT.aml檔案放在Mac分區的根目錄或者/Extra檔案夾裡,啟動的時候就會自動使用這個DSDT.aml,從而達到修複ACPI系統Bug的作用(BootThink是放在/Darwin下面 )。
首先聲明,DSDT不能達到驅動硬體的目的。前面已經提到過了,DSDT只是用來識別硬體的。如果系統裡面沒有內建你硬體的驅動,或者沒有類似的驅動,製作DSDT也只會是徒勞,所以只能通過安裝第三方的kext來驅動了。
網上介紹製作DSDT的方法很多,有在Windows下製作的,也有在Mac下製作的,我就是在Mac下製作的,使用的軟體是DSDTSE,非常的方便。先說一下在Windows下的方法吧。
在Windows下製作DSDT,我們使用到的軟體有Everest和ACPI Patcher。其中Everest用來提取系統的DSDT,ACPI Patcher用來產生DSDT.aml。另外,ACPI Patcher內建一些修複DSDT的選項比如驅動顯卡、音效卡、網卡,如果裡面沒有你的型號的話還是不要使用了,我還是推薦手動修改。基本步驟如下:
開啟Everest,在Everest底部狀態列右鍵快顯功能表,點擊ACPI Tool。
點擊Save DSDT,產生的是尾碼為bin的檔案,這個就是一個類似於未打補丁的DSDT.aml的檔案,我們就是利用這個檔案製作DSDT。
接下來就要使用使用ACPI Patcher對上面產生的bin檔案打補丁並產生aml檔案了。請在右邊選擇正確的主板產商,如果是Phoenix則不需要改變,使用預設的Award即可。
選擇DSDT Patch這個菜單,指定源檔案為上述的bin檔案,再指定一個輸出路徑,點擊Patch AML即可。左下角的提示框在編譯的時候會有資訊產生,一定不能產生errors;warnings倒無所謂,除非你追求完美。
如果產生了錯誤,要先使用“D/C DSDT”功能表項目把bin檔案轉換成dsl檔案,然後用編輯工具進行編輯。編輯好之後,仍然使用D/C DSDT功能表項目將該dsl檔案打補丁並編譯為aml檔案。如果你選擇了右邊的幾個選項,編譯成aml檔案的時候一定要選擇“Patch before compile”。
**************************
軟體名稱:APCI Patcher 軟體版本:0.2 Beta 5 下載地址:http://u.115.com/file/f9fc49f849
在Mac下使用的是DSDTSE,使用和Windows差不多。不過使用DSDTSE可以直接開啟DSDT編輯視窗,相對方便很多。而且還提供了很 多warnings和errors的解決方案,具體我也就不介紹了。下次再介紹一下一般的warnings和errors的解決方案吧,感覺挺有用處的。