ARTS Tips:黑苹果继续补课

前几篇请参考php

最近涉及到黑苹果的事情比较多,顺便就一块儿补课,解决一下基础内容。html

什么是ACPI?

ACPI 是 Hewlett-Packard, Intel, Microsoft, Phoenix 和 Toshiba 共同制定的一个开放的行业规范。是 The Advanced Configuration and Power Interface 的缩写,也就是“电源管理模式和配置管理的接口规范”。从名字能够看出主要是“电源管理”和“配置管理”。是 BIOS 的一个高级功能模块。linux

它帮助操做系统合理控制和分配计算机硬件设备的电量,有了ACPI,操做系统能够根据设备实际状况,根据须要把不一样的硬件设备关闭。如Win7或者Win8系统,系统睡眠时,系统把当前信息储存在内存中,只保留内存等几个关键部件硬件的通电,使计算机处在高度节电状态。固然这只是它功能中的不多一部分。git

它主要涵盖的功能包括:程序员

  • 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 愈来愈重要。ACPI由不少表组成,包括:RSDP,SDTH,RSDT,FADT,FACS,DSDT,SSDT,MADT,SBST,XSDT,ECDT,SLIT,SRAT。其中DSDT就是它的一个重要的描述表。github

什么是DSDT和SSDT?

DSDT 是 The Differentiated System Description Table 的简写。字面上就能够知道它是一个描述系统不一样信息的表。它包含了全部除基本系统之外全部不一样设备的信息,也就是每台计算机设备的基本系统是相同的,而不相同的设备用 DSDT 来描述。DSDT 表代码为 ACPI Machine Language (AML)。ubuntu

DSDT 包含了全部和基本系统(basesystem)不一样的设备的信息,basesystem 每台机器都是同样的,这个是在 acpispec 里指定的,可是每台机器都是不相同的,因此不相同的设备大都是由 DSDT 表来描述。它包含了不少AML代码。大多数 BIOS 是针对 windows 开发的,而 windows 本身也不彻底遵循 acpi 规范,因此由于 BIOS 的 bug,这些代码自己可能有错,致使其余的系统,如 linux,mac os 出错。windows

Mac OS X不完整支持ACPI规范,仅支持它的子集DSDT。bash

ACPI SSDT 是 Secondary System Descriptor Table 的缩写,它也是ACPI的描述表,包含了额外的AML信息,能够用来和硬件交互。用来定义的语言也是AML代码,和DSDT同样,一般SSDT是DSDT的补充。ide

什么是重命名ACPI对象(Renaming ACPI objects)?

由于OS X 能够依赖于mac使用的特定的ACPI对象名称,一个常见的补丁是在原始ACPI集合中重命名一个对象。例如,大多数PC笔记本电脑使用GFX0来表示集成的 Intel GPU 对象(Intel HD Graphics)。在OS X中,除非该设备被命名为IGPU,不然不会启用英特尔图形的电源管理。使用静态补丁,咱们应用“Rename IGPU to GFX0”来重命名这个对象,补丁必须应用到DSDT和全部引用它的SSDTs。

上次咱们修改的就是经过这个方法解决7m核显的问题,从新命名的补丁将是

Comment: Rename GFX0 to IGPU
Find: <4746 5830>
Replace: <4947 5055>
复制代码

查找和替换的十六进制值分别是 GFX0 和 IGPU 的 ASCII码,其实能够用下面的代码解释一下:

u430:~ RehabMan$ echo -n GFX0|xxd
0000000: 4746 5830                                GFX0
u430:~ RehabMan$ echo -n IGPU|xxd
0000000: 4947 5055                                IGPU
复制代码

参考资料

相关文章
相关标签/搜索