黑蘋果由于硬件兼容性問題,多使用修改DSDT的方法來解決。例如顯卡,聲卡驅(qū)動。那什么是DSDT呢,我們先需要了解一下它。
什么是DSDT呢,它是ACPI其中一個表。什么是ACPI呢,它是BIOS的一個高級功能模塊。下面咱稍微詳細的從最大的開始說:
一、首先,BIOS(略)
二、ACPI是Hewlett-Packard, Intel, Microsoft, Phoenix, 和Toshiba共同制定的一個開放的行業(yè)規(guī)范。是The Advanced Configuration and Power Interface的縮寫,也就是“電源管理模式和配置管理的接口規(guī)范”。從名字可以看出主要是“電源管理”和“配置管理”。
它主要涵蓋的功能包括:
System power management(系統(tǒng)電源管理) Device power management(設(shè)備電源管理) Processor power management(處理器電源管理) Device and processor performance management(設(shè)備及處理器性能管理) Configuration / Plug and Play(配置/即插即用) System Events(系統(tǒng)事件) Battery management(電池管理) Thermal management(溫度管理) Embedded Controller(嵌入式控制器)
SMBus Controller(SMBus控制器)
ACPI越來越重要在計算機應(yīng)用平臺。
更多詳細描述可以訪問Intel technology下載PDF描述文檔。
ACPI由很多表組成,包括:RSDP,SDTH,RSDT,FADT,FACS,DSDT,SSDT,MADT,SBST,XSDT,ECDT,SLIT,SRAT。(略寫了,不用太詳細介紹)其中DSDT就是它的一個重要的描述表。
三、最后說到主題^_^。DSDT,它是The Differentiated System Description Table的簡寫。字面上就可以知道它是一個描述系統(tǒng)不同信息的表。包含了所有除基本系統(tǒng)以外所有不同設(shè)備的信息,也就是每臺計算機設(shè)備的基本系統(tǒng)是相同的,而不相同的設(shè)備用DSDT來描述。
DSDT表代碼為ACPI Machine Language (AML)。
Mac OS X不完整支持ACPI規(guī)范,僅支持它的子集DSDT。用戶通過修改DSDT可以得到更好的硬件支持。
最簡單的理解就是dsdt是描述硬件的。mac的驅(qū)動是被動驅(qū)動,需要讓系統(tǒng)知道存在這個硬件且知道硬件位置。修改dsdt的主要目的就是讓mac系統(tǒng)識別存在這個硬件并告訴mac系統(tǒng)你的硬件位置,以便讓mac系統(tǒng)內(nèi)置的驅(qū)動來驅(qū)動硬件工作,如此而已,呵呵
-------------------------------------------------------------------------------
操作系統(tǒng)的驅(qū)動程序結(jié)構(gòu),首先明白計算機硬件與CPU及操作系統(tǒng)的關(guān)系,操作系統(tǒng)的代碼僅僅在CPU中運行,所以只要CPU支持該操作系統(tǒng)的指令代碼,就可以啟動操作系統(tǒng),而至于訪問硬件的過程,就是讀取內(nèi)存地址的過程(MOV eax, &0xFFF330),對于i386其IO地址是獨立的地址空間0x0000-0xFFFF共64K所以CPU的地址空間對于i386有兩個,訪問的指令也有兩種,而對于ARM這些來說IO地址是被編址到32位內(nèi)存地址空間的,所有外設(shè)也被掛接到內(nèi)存總線上的。這些硬件的物理地址在主板制造好時就已經(jīng)定了,無法更改,而BIOS的功能之一也就是收集這些設(shè)備與IO的地址對應(yīng)信息,并交給操作系統(tǒng)。然后操作系統(tǒng)根據(jù)BIOS提供的設(shè)備信息安裝相應(yīng)的設(shè)備驅(qū)動程序給操作系統(tǒng)內(nèi)核使用。如果BIOS不提供這些設(shè)備的IO信息,那么操作系統(tǒng)怎么辦呢,那操作系統(tǒng)不可能搜索整個IO地址空間來確定有哪些設(shè)備,所以也就沒法知道有哪些外設(shè)IO。外設(shè)的IO分配是主板設(shè)計者決定的,每個設(shè)備均有連續(xù)的三部分寄存器IO地址,1??刂萍拇嫫?,2。數(shù)據(jù)寄存器,3。狀態(tài)寄存器。通過對寄存器的讀寫,也就是執(zhí)行指令 IN/OUT 0xFFFF,來讀寫寄存器實現(xiàn)對于外設(shè)的操作,可以看到,這個與單片機對于單個引腳的控制方法不同。PC機的目標是數(shù)據(jù)交換和處理,而單片機的目標主要是控制每個引腳的電平實現(xiàn)硬件的控制。
操作系統(tǒng)會自帶一些驅(qū)動程序,那么這些自帶的驅(qū)動程序怎么與實際的硬件關(guān)聯(lián)起來呢。
下面我們來看USB鼠標的驅(qū)動,在windows的設(shè)備管理器中我們可以發(fā)現(xiàn),鼠標項,其中可以找到HID鼠標,這個是一個符合USB設(shè)備類HID類的串行設(shè)備,我們發(fā)現(xiàn)這個設(shè)備沒有硬件資源,也就是說沒有對應(yīng)的IO地址和中斷號。所以這個不是一個真實的獨立的設(shè)備,它是一個windows的高層設(shè)備,也可以叫這個設(shè)備是一個虛擬的接口設(shè)備,我們可以采用windows的一般鼠標驅(qū)動程序來操作這個設(shè)備。而實際上對于它的操作,會被該設(shè)備關(guān)聯(lián)的驅(qū)動程序所接管,而其關(guān)聯(lián)的驅(qū)動程序是什么能,是windows自帶的USB HID類驅(qū)動程序,對于 USB的HID類設(shè)備,其操作協(xié)議有固定的規(guī)范,所以可以直接驅(qū)動。那么USB HID驅(qū)動程序又怎么驅(qū)動實際的硬件呢,我們可以在 windows的設(shè)備管理器中找到該鼠標對應(yīng)的USB控制器,而該控制器有IO地址1840-185F共32個字節(jié)空間以及中斷號18, 那么這個地址和中斷號怎么來的呢,這個就是BIOS告訴操作系統(tǒng)的,地址和中斷號是主板設(shè)計時就已經(jīng)定了的。所以在不同的PC上裝的windows,其IO地址和中斷也不同。