前几篇请参考
- ARTS Tips:黑苹果核心显卡驱动 - 掘金
- 掘金上内容还不全,详细的内容,可以参考ARTS Tips:黑苹果继续补课 - 知乎
- 还可以参考公号:学习者老六
最近涉及到黑苹果的事情比较多,顺便就一起补课,解决一下基础内容。
什么是ACPI?
ACPI 是 Hewlett-Packard, Intel, Microsoft, Phoenix 和 Toshiba 共同制定的一个开放的行业规范。是 The Advanced Configuration and Power Interface 的缩写,也就是“电源管理模式和配置管理的接口规范”。从名字可以看出主要是“电源管理”和“配置管理”。是 BIOS 的一个高级功能模块。
它帮助操作系统合理控制和分配计算机硬件设备的电量,有了ACPI,操作系统可以根据设备实际情况,根据需要把不同的硬件设备关闭。如Win7或者Win8系统,系统睡眠时,系统把当前信息储存在内存中,只保留内存等几个关键部件硬件的通电,使计算机处在高度节电状态。当然这只是它功能中的很少一部分。
它主要涵盖的功能包括:
- 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就是它的一个重要的描述表。
什么是DSDT和SSDT?
DSDT 是 The Differentiated System Description Table 的简写。字面上就可以知道它是一个描述系统不同信息的表。它包含了所有除基本系统以外所有不同设备的信息,也就是每台计算机设备的基本系统是相同的,而不相同的设备用 DSDT 来描述。DSDT 表代码为 ACPI Machine Language (AML)。
DSDT 包含了所有和基本系统(basesystem)不同的设备的信息,basesystem 每台机器都是一样的,这个是在 acpispec 里指定的,但是每台机器都是不相同的,所以不相同的设备大都是由 DSDT 表来描述。它包含了很多AML代码。大多数 BIOS 是针对 windows 开发的,而 windows 自己也不完全遵循 acpi 规范,所以因为 BIOS 的 bug,这些代码本身可能有错,导致其他的系统,如 linux,mac os 出错。
Mac OS X不完整支持ACPI规范,仅支持它的子集DSDT。
ACPI SSDT 是 Secondary System Descriptor Table 的缩写,它也是ACPI的描述表,包含了额外的AML信息,可以用来和硬件交互。用来定义的语言也是AML代码,和DSDT一样,通常SSDT是DSDT的补充。
什么是重命名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
参考资料
- [指南] hackintosh之hotpatch · Mac OS之程序员 · 看云
- [Guide] Intel IGPU HDMI/DP audio (all Sandy Bridge -> Kaby Lake [and likely later]) | tonymacx86.com
- SSDT GPU (Graphics Card) Injection | tonymacx86.com
- 【黑苹果教程】对笔记本的 DSDT/SSDT 打补丁_colorfulshark-CSDN博客_dsdt打补丁
- [Guide] Booting the OS X installer on LAPTOPS with Clover | tonymacx86.com
- [指南] hackintosh之SSDT/DSDT · Mac OS之程序员 · 看云
- [Guide] Intel IGPU HDMI/DP audio (all Sandy Bridge -> Kaby Lake [and likely later]) | tonymacx86.com
- [Guide] Patching LAPTOP DSDT/SSDTs | tonymacx86.com
- 手动提取DSDT和SSDT教程 | 史蒂芬周的博客
- [Guide] Using Clover to "hotpatch" ACPI | tonymacx86.com
- SSDT_百度百科 不相关,不过名字是一样的
- DSDT — What is it and how do I get it? - Technical FAQ - InsanelyMac Forum
- SSDT | tonymacx86.com
- DSDT | tonymacx86.com
- FAQ-Start Here - Technical FAQ - InsanelyMac Forum
- RSDT - OSDev Wiki
- Advanced Configuration and Power Interface - Wikipedia
- DSDT - ArchWiki
- SSDT Overlays — The Linux Kernel documentation
- Debug ACPI DSDT and SSDT with ACPICA Utilities | Ubuntu
- SSDTs: Easy Way · GitBook
- Getting Started With ACPI · GitBook
- uefi.org/sites/defau…
- Choosing the SSDTs · GitBook
- Welcome to Unified Extensible Firmware Interface Forum | Unified Extensible Firmware Interface Forum