黑苹果由于硬件兼容性问题,多使用修改DSDT的方法来解决。例如显卡,声卡驱动。那什么是DSDT呢,我们先需要了解一下它。
什么是DSDT呢,它是ACPI其中一个表。什么是ACPI呢,它是BIOS的一个高级功能模块。下面咱稍微详细的从最大的开始说:
一、首先,BIOS(略)
二、ACPI是Hewlett-Packard, Intel, Microsoft, Phoenix, 和Toshiba共同制定的一个开放的行业规范。是The Advanced Configuration and Power Interface的缩写,也就是“电源管理模式和配置管理的接口规范”。从名字可以看出主要是“电源管理”和“配置管理”。
它主要涵盖的功能包括:
System power management(系统电源管理) Device power management(设备电源管理) Processor power management(处理器电源管理) Device and processor performance management(设备及处理器性能管理) Configuration / Plug and Play(配置/即插即用) System Events(系统事件) Battery management(电池管理) Thermal management(温度管理) Embedded Controller(嵌入式控制器)
SMBus Controller(SMBus控制器)
ACPI越来越重要在计算机应用平台。
更多详细描述可以访问Intel technology下载PDF描述文档。
ACPI由很多表组成,包括:RSDP,SDTH,RSDT,FADT,FACS,DSDT,SSDT,MADT,SBST,XSDT,ECDT,SLIT,SRAT。(略写了,不用太详细介绍)其中DSDT就是它的一个重要的描述表。
三、最后说到主题^_^。DSDT,它是The Differentiated System Description Table的简写。字面上就可以知道它是一个描述系统不同信息的表。包含了所有除基本系统以外所有不同设备的信息,也就是每台计算机设备的基本系统是相同的,而不相同的设备用DSDT来描述。
DSDT表代码为ACPI Machine Language (AML)。
Mac OS X不完整支持ACPI规范,仅支持它的子集DSDT。用户通过修改DSDT可以得到更好的硬件支持。
最简单的理解就是dsdt是描述硬件的。mac的驱动是被动驱动,需要让系统知道存在这个硬件且知道硬件位置。修改dsdt的主要目的就是让mac系统识别存在这个硬件并告诉mac系统你的硬件位置,以便让mac系统内置的驱动来驱动硬件工作,如此而已,呵呵
-------------------------------------------------------------------------------
操作系统的驱动程序结构,首先明白计算机硬件与CPU及操作系统的关系,操作系统的代码仅仅在CPU中运行,所以只要CPU支持该操作系统的指令代码,就可以启动操作系统,而至于访问硬件的过程,就是读取内存地址的过程(MOV eax, &0xFFF330),对于i386其IO地址是独立的地址空间0x0000-0xFFFF共64K所以CPU的地址空间对于i386有两个,访问的指令也有两种,而对于ARM这些来说IO地址是被编址到32位内存地址空间的,所有外设也被挂接到内存总线上的。这些硬件的物理地址在主板制造好时就已经定了,无法更改,而BIOS的功能之一也就是收集这些设备与IO的地址对应信息,并交给操作系统。然后操作系统根据BIOS提供的设备信息安装相应的设备驱动程序给操作系统内核使用。如果BIOS不提供这些设备的IO信息,那么操作系统怎么办呢,那操作系统不可能搜索整个IO地址空间来确定有哪些设备,所以也就没法知道有哪些外设IO。外设的IO分配是主板设计者决定的,每个设备均有连续的三部分寄存器IO地址,1。控制寄存器,2。数据寄存器,3。状态寄存器。通过对寄存器的读写,也就是执行指令 IN/OUT 0xFFFF,来读写寄存器实现对于外设的操作,可以看到,这个与单片机对于单个引脚的控制方法不同。PC机的目标是数据交换和处理,而单片机的目标主要是控制每个引脚的电平实现硬件的控制。
操作系统会自带一些驱动程序,那么这些自带的驱动程序怎么与实际的硬件关联起来呢。
下面我们来看USB鼠标的驱动,在windows的设备管理器中我们可以发现,鼠标项,其中可以找到HID鼠标,这个是一个符合USB设备类HID类的串行设备,我们发现这个设备没有硬件资源,也就是说没有对应的IO地址和中断号。所以这个不是一个真实的独立的设备,它是一个windows的高层设备,也可以叫这个设备是一个虚拟的接口设备,我们可以采用windows的一般鼠标驱动程序来操作这个设备。而实际上对于它的操作,会被该设备关联的驱动程序所接管,而其关联的驱动程序是什么能,是windows自带的USB HID类驱动程序,对于 USB的HID类设备,其操作协议有固定的规范,所以可以直接驱动。那么USB HID驱动程序又怎么驱动实际的硬件呢,我们可以在 windows的设备管理器中找到该鼠标对应的USB控制器,而该控制器有IO地址1840-185F共32个字节空间以及中断号18, 那么这个地址和中断号怎么来的呢,这个就是BIOS告诉操作系统的,地址和中断号是主板设计时就已经定了的。所以在不同的PC上装的windows,其IO地址和中断也不同。
