
本文以 macOS Mojave 为例进行说明,包含内容较多,主要适合较新主板的安装。
记录硬件配置
在 Windows 下,右键点击此电脑,选择管理-设备管理器,得到设备清单。在某设备上点击属性-详细信息,在属性下拉栏选择硬件 ID,记录下 VID 和 PID。VID 即 Vendor ID,指供应商 ID,在 Windows 下以VID_显示。PID 即 Device ID,指设备 ID,在 Windows 下以PID_显示。
可通过以下链接查询设备名称与 PID 的关系。
1 | # Intel |
Mac 对 Intel CPU 基本兼容,对 AMD CPU 需要进一步处理。本教程仅讨论 Intel CPU 的情况。
对于笔记本,主要记录显卡、声卡、网卡、键盘、触控板和蓝牙的型号。以本机为例,型号为华硕 FL8000U,硬件基本信息如下。需要注意的是,BIOS 类型应为 UEFI。
| 型号 | Device ID | Vendor ID | |
|---|---|---|---|
| CPU | Intel Core i7-8550U(Kaby-Lake) | / | / |
| 核心显卡 | Intel UHD Graphics 620 | 5917 | 8086 |
| 独立显卡 | NVIDIA GeForce 940MX | 134D | 10DE |
| 声卡 | Realtek ALC 294 | 0294 | 10EC |
| 有线网卡 | Realtek RTL8111 | / | / |
| 无线网卡 | Atheros AR9565 | 0036 | 168C |
| 键盘 | PS2键盘 | / | / |
| 触摸板 | I2C触摸板 | / | / |
| 蓝牙 | Atheros Bluetooth 4.0 | 3018 | 04CA |
硬盘分区
由于 macOS 只能以 EFI 方式引导,因此需确保分区表为 GPT 格式。
可在 Windows 下打开 DiskGenius,确认分区表为 GUID 格式,若不是,则在硬盘上单击右键,选择转换分区表类型为 GUID 格式。
确保硬盘有一个 200-300M 的 EFI 分区,若没有则需要新建,一般新建到硬盘最前部。提前备份 EFI 内的文件至 U 盘,防止安装 Mac 时引导丢失。为 Mac 的安装划出 50G 以上的分区,格式化为 APFS。
若用 Mac 进行格式化,则格式化为 GUID 分区表时会自动生成一个 200MB 的 EFI 分区。
引导器下载
黑苹果需要特殊的引导器进行引导。此处使用 Clover,链接如下。
1 | # 普通版 |
建议下载 pkg 或 ISO 版本,其中对于 ISO 版本,可用解压软件打开,提取 Clover 启动所需要的完整 EFI 文件夹,以便于后续安装。该文件夹的目录层级如下。
1 | └── EFI |
安装盘制作
此处以 Majove 10.14.3 为例。插入容量大于 8G 的 U 盘,提前备份好 U 盘资料。以下方式选其一即可。
黑果小兵
通过以下链接下载,镜像带引导。
1 | https://blog.daliansky.net/categories/%E4%B8%8B%E8%BD%BD/%E9%95%9C%E5%83%8F/ |
若为 Windows,且下载的镜像为带引导的 dmg 格式,则以管理员身份打开 TransMac,在插入的 U 盘上点击右键,选择 Restore with Disk Image,点击 Yes 以抹掉资料,选择 dmg 镜像,等待写入完成。也可通过 Etcher 完成以上操作。
由于黑果小兵的安装盘已带引导器,故可以直接进行安装步骤。
macrecovery
注意,该方法只可获取恢复分区,安装系统时需要互联网连接。
以 Windows 为例,下载 OpenCore,链接如下。
1 | https://github.com/acidanthera/OpenCorePkg |
解压后打开命令提示符,路径切换到解压文件夹内的Utilities/macrecovery,然后通过以下命令进行下载。
1 | # Lion |
完成后将USB格式化为GUID分区表下的FAT32。在USB根目录新建文件夹,名称为com.apple.recovery.boot,并将下载好的BaseSystem/RecoveryImage文件放入文件夹内。
下载完成后将获得 BaseSystem 或 RecoveryImage 文件。将 USB 格式化为 FAT32,在根目录新建名为 com.apple.recovery.boot 的文件夹并复制下载内容至该文件夹,注意.dmg 和.chunklist 文件都要复制。然后复制从 Clover 提取的 EFI 文件夹到根目录,保持与 com.apple.recovery.boot 文件夹同级。
GibMacOS
对于 10.13 及以上系统,可在 Mac 环境下通过 GibMacOS 下载原版镜像,注意不带引导。运行 gibMacOS.command 即可,链接如下。
1 | https://github.com/corpnewt/gibMacOS |
对于 Big Sur,下载后在 Mac 下打开 installAssistant.pkg,安装到当前系统盘,即可在应用程序中找到安装包程序。对于 Catalina 及更早版本,则应当运行 BuildmacOSInstallApp.command 以得到安装包,然后将安装包拖入应用程序文件夹。
将 USB 进行分区,分区表为 GUID,创建一个大小为 200-300MB 的 EFI 分区,剩余空间则用于安装程序。
打开终端并输入以下命令,注意将 MyVolume 替换为 USB 磁盘名称。完成后复制从 Clover 提取的 EFI 文件夹到 EFI 磁盘。
1 | # 以Mojave为例 |
若为 Windows,则通过 MakeInstall.bat 进行制作,注意该脚本将默认创建 MBR 引导。
【进阶】用BaseSystem.dmg制作安装盘
不适用于 High Sierra 及以上系统。
BaseSystem.dmg可在安装包上点击右键,选择显示包内容,然后进入/Contents/Shared Support/即可找到。复制到桌面后,打开终端并输入以下命令以制作。
1 | # disk1s2为USB设备路径,按照实际情况更改 |
其他方式
官方下载
通过以下链接,通过 App Store 下载。
1 | https://apps.apple.com/cn/app/macos-mojave/id1398502828?mt=12 |
也可通过以下链接。
1 | 链接 / https://cloud.189.cn/t/FFvIV3aeQZRz |
InstallInstallMacOS
适用于在 Mac 环境下下载,打开终端并输入以下命令即可得到 dmg 文件。
1 | mkdir ~/macOS-installer && cd ~/macOS-installer && curl -O https://raw.githubusercontent.com/munki/macadmin-scripts/main/installinstallmacos.py && sudo python installinstallmacos.py |
BIOS 设置
全局设置
有 AHCI 的均选AHCI,开启支持 UEFI 启动。
| 选项 | 本机BIOS地址 | 设定值 | 设置 | 说明 |
|---|---|---|---|---|
| Fast Boot | 0xF7A | 0x0 | Disabled | 快速启动 |
| Secure Boot | Disabled | 安全启动 | ||
| CFG Lock | 0x527 | 0x0 | Disabled | CFG锁(MSR 0xE2写入保护) |
| Vt-d | 0x7EC | 0x0 | Disabled | 直接I/O访问的VT虚拟化技术 |
| CSM | 0x1032 | 0x0 | Disabled | 兼容性支持模块(如果看到乱码则启用) |
| Intel SGX | 0x5DC | 0x0 | Disabled | Intel架构新扩展 |
| IO Serial Port | Disabled | 串行端口,打开可能会引起睡眠死机问题 | ||
| LAN/WLAN switching | Disabled | LAN/WLAN切换 | ||
| Extended Idle Power States | Disabled | 扩展空闲电源状态 | ||
| Wake on LAN/WLAN/WWAN | Disabled | LAN/WLAN/WWAN唤醒 | ||
| Wake on USB | Disabled | USB唤醒 | ||
| Firewire/IEEE 1394 | Disabled | 火线/IEEE 1394设备 | ||
| USB 3.0 | Disabled | 安装好系统后可以开启 | ||
| TMP/Security Chips/Security modules | Disabled | 安全模块 | ||
| VT-x | / | / | Enabled | 英特尔虚拟化技术 |
| Above 4G decoding | 0x7ED | 0x1 | Enabled | 大于4G地址空间解码 |
| Hyper Threading | 0x4F0 | 0x1 | Enabled | 处理器超线程 |
| Execute Disable Bit | 0x4E9 | 0x1 | Enabled | 执行禁止位 |
| EHCI Hand-off | 0x2 | 0x1 | Enabled | 接手EHCI控制 |
| XHCI Hand-off | 0x1B | 0x1 | Enabled | 接手XHCI控制 |
| USB Hand-off | Enabled | 接手USB控制(打开后则无需ReleaseUsbOwnership/Fixownership) | ||
| Launch Hotkeys without Fn keypress | Enabled | 对于Skylake和KabyLake平台 | ||
| USB Legacy support | Enable | 旧版USB支持 | ||
| OS type | / | / | Windows 8.1/10 | 操作系统类型Windows 8.1/10 |
| Controller Mode | AHCI mode | 硬盘模式 | ||
| Thunderbolt Support | Disabled | |||
| Intel Platform Trust | Disabled | |||
| Portable Device Charging Mode | Disabled | |||
| Thunderbolt Security Level | Legacy Mode | |||
| HPET Support | Enabled | |||
| HPET Mode | 64-bit mode | |||
| ACPI Suspend Type | S3(STR) | |||
| Parallel Port | Disabled | |||
| Serial Port | Disabled |
显卡设置
若有Nvidia/AMD的显卡,则主显示器应设置为PEG或PCIE,并禁用与Intel显卡有关的选项(Hybrid Graphics/Dual Graphics/DVMT size等)。
若有 Intel 的显卡,则将 DVMT 设置为 64MB 或更大,将 MAX TOLUD 设置为 Dynamic。
安装系统
BIOS 中启动顺序把 UEFI 启动的 U 盘设为第一,在弹出的 Clover 界面选择 Boot OS X Install from Install macOS Majove,稍等片刻进入安装界面。
【注意】关于安全启动
不要打开安全启动进行安装,因为 Mac 将使用安装程序生成的随机值进行个性化设置。由于随机值不同,将无法再用安全启动引导到系统。
在 macOS 实用工具中选择磁盘工具,点击左侧按钮选择显示所有设备,选择之前分好的 Mac 安装盘,点击抹掉,并选择格式为 APFS。返回安装界面,选择刚才格式化好的盘进行安装,等待安装完成。
重启时需继续从 U 盘启动,Clover 界面中选择 macOS 的安装盘,进入欢迎界面后注意用户密码不能为空且跳过 iCloud 设置。正常进入黑苹果桌面后不要登录 iCloud、iMessage、FaceTime。
若在跑代码的过程中发生错误,则根据常见问题进行排除。
引导本地系统
Clover 安装
在 Mac 下打开 Clover 的 pkg 安装包,同意协议后点击自定,勾选安装在 Clover 到 EFI 分区、UEFI Drivers。
安装完成后使用Clover Configurator挂载EFI分区,并打开EFI/CLOVER/kexts,只留Others文件夹,其余删除。打开Others文件夹,只留VirtualSMC.kext、WhatEverGreen.kext和Lilu.kext。
然后打开EFI/CLOVER/DRIVER64UEFI,删除SMCHelper-64.efi并复制VirtualSMC.efi到此目录下。
目录层级如下。
1 | ├── ACPI |
Clover 配置
用 Clover Configurator 打开 config.plist,按下列设置进行修改。
ACPI
将 Fixs 下所有选项取消勾选(1 和 2 两个页面的选项都要取消),并添加以下更名补丁。
1 | Comment: change _DSM to XDSM |
Boot
Arguments 下勾选 Verbose(-v)、nv_disable=1、dart=0,其余不勾选。
Graphics
取消勾选 Inject Intel、Inject EDID。
Devices
在 Audio 的 Inject 下拉菜单选择 No,把下方 Arbitrary、Properties 和 Add Properties 所有内容删掉。
进入系统
退出 Clover Configurator,保存更改后拔出 U 盘并重启,在 BIOS 下应当多出一项 UEFI OS,进入后选择 macOS 安装盘启动。此时已完成 Clover 引导器的安装,可以脱离 U 盘引导。
若Windows引导丢失,将备份好的EFI/BOOT中的Microsoft文件夹复制到EFI分区中的EFI/BOOT,与Clover文件夹同级即可。
驱动修补
Mac的驱动以Kernel Extensions(kexts)形式存在。系统的kexts存放于/System/Library/Extentions(SLE)或/Library/Extentions(LE),其中SLE为系统kexts的主要放置路径,LE为系统拓展kexts放置路径。kexts内部的dsYM是签名文件,仅用于调试目的。
一般不建议修改 SLE 或 LE 目录。若需将驱动装入 SLE 或 LE,可通过 Kext Utility(在 Catalina 下需先解锁系统分区)或 Hackintool。以 Hackintool 为例,在 Hackintool 的工具选项卡下点击下方的小屋按钮即可。
显卡
默认情况下,Mac 对没有提供驱动程序的任何 GPU 都将运行非常基本的驱动程序,称为 VESA 驱动程序,提供了最少的显示输出,但在该情况下无法与这些设备正确交互。为了解决这个问题,需要让 Mac 认为显卡是一个通用的 PCIe 设备,或完全关闭显卡。
注意,VGA 在 Mac 中不可使用。驱动显卡前确保 kexts 文件夹内有 Lilu.kext 和 WhateverGreen.kext。
选择显卡
在 DSDT 的 PCI0 设备目录下,Intel 显卡拥有关键字Name (_ADR, 0x00010000)。Mac 原生支持 Intel 显卡,但需要进行缓冲帧修补。
对于笔记本而言,如果独显不与核显绑定,即独显本身可以独立工作,则不需要屏蔽独显,可从 BIOS 层面关闭核显,并寻找独显驱动。该情况能够存在的必要条件是 MUX 芯片存在,但大多数笔记本电脑都没有该芯片。包含该芯片的笔记本列表可参照以下表格。
| 设备 | CPU | dGPU直通 | iGPU直通 | eGPU直通 | 备注 |
|---|---|---|---|---|---|
| Razer Blade 15 (2018 Basic) | Intel Core i7-8750H | GTX 1060 Mobile with Max-Q design (6GB)Windows下工作,但Nvidia驱动会遇到43错误;Linux下大概能工作 | Intel UHD Graphics 630Windows下大概能工作;Linux下大概能工作 | GTX 970Windows下工作,但Nvidia驱动会遇到43错误;Linux下大概能工作 | 支持TB3 eGPU |
| Gigabyte P35X v4 | Intel Core i7-5700HQ | GTX 980M (8GB)Windows下工作;Linux下未知 | Intel HD Graphics 5600Windows下工作;Linux下未知 | 需要修改的UEFI/BIOS(禁用Secure Boot) | |
| MSI GF72 8RE-032 | Intel Core i7-8750H | GTX 1060 Mobile (6GB)Windows下工作,但Nvidia驱动会遇到43错误;Linux下大概能工作 | Intel UHD Graphics 630Windows下大概能工作;Linux下大概能工作 | ||
| HP Pavilion G6-2348SG | Intel Core i7 3632QM | AMD Radeon HD 7670MWindows下不可能;Linux下不可能 | Intel HD Graphics 4000Windows下不支持4代及更早的Intel CPU;Linux下不支持4代及更早的Intel CPU | ||
| ASUS TUF Gaming FX505DY | AMD Ryzen 5 3550H | AMD Radeon RX 560X (4GB)Windows下工作,但AMD驱动会遇到43错误;Linux下能工作 | AMD Radeon Vega 8Windows下大概能工作;Linux下大概能工作 | ||
| ASUS ROG G751JY | Intel Core i7-4710HQ | GTX 980M (4GB)Windows下不可能;Linux下不可能 | Intel HD Graphics 4600Windows下不支持4代及更早的Intel CPU;Linux下不支持4代及更早的Intel CPU | iGPU被禁用,且没有UEFI选项开启 | |
| ASUS G752VS-BA329T | Intel Core i7-7700HQ | GTX 1070 Mobile (8GB)Windows下不可能;Linux下不可能 | Intel UHD Graphics 630Windows下不可能;Linux下不可能 | iGPU被禁用,且没有UEFI选项开启 | |
| ASUS ROG G551JW | Intel Core i7-4720HQ | GTX 960M (2GB/4GB DDR3)Windows下工作;Linux下未知 | Intel HD Graphics 4600Windows下不支持4代及更早的Intel CPU;Linux下不支持4代及更早的Intel CPU | ||
| ASUS G751JM | Intel Core i7-4710HQ | GTX 860M (2GB)Windows下工作;Linux下未知 | Intel HD Graphics 4600Windows下不支持4代及更早的Intel CPU;Linux下不支持4代及更早的Intel CPU | ||
| ASUS X550VX | Intel Core i5-6300HQ | GTX 950M (2GB)Windows下工作;Linux下未知 | Intel HD Graphics 530Windows下未知;Linux下未知 | ||
| MSI GS63VR 7RF REV:1.0 | Intel Core i7-7700HQ | GTX 1060 Mobile (6GB)Windows下工作,但Nvidia驱动会遇到43错误;Linux下能工作 | Intel HD Graphics 630Windows下大概能工作;Linux下大概能工作 | ||
| MSI GS60-040XFR | Intel Core i7-4720HQ | GTX 970M (3GB)Windows下工作;Linux下未知 | Intel HD Graphics 4600Windows下不支持4代及更早的Intel CPU;Linux下不支持4代及更早的Intel CPU | ||
| MSI GS60 2PC | Intel Core i7-4720HQ | GTX 860M (2GB)Windows下工作;Linux下未知 | Intel HD Graphics 4600Windows下不支持4代及更早的Intel CPU;Linux下不支持4代及更早的Intel CPU | ||
| MSI GT70 2PE Dominator Pro | Intel Core i7-4800MQ | GTX 880M (GDDR5 8GB/4GB)Windows下工作;Linux下大概能工作 | Intel HD Graphics 4600 Windows下不支持4代及更早的Intel CPU;Linux下不支持4代及更早的Intel CPU | dGPU直通需要SeaBIOS而不是UEFI(OVMF) | |
| Gigabyte Aero 14 | Intel Core™ i7-7700HQ | GTX 1050 Ti (4GB)Windows下工作;Linux下未知 | Intel HD Graphics 630Windows下工作;Linux下未知 | ||
| Gigabyte Aero 15X v8 | Intel Core i7-8750H | GTX 1070 with Max-Q design (8GB)Windows下工作,但Nvidia驱动会遇到43错误;Linux下能工作 | Intel UHD Graphics 630Windows下大概能工作;Linux下大概能工作 | ||
| Lenovo ThinkPad P51 | Intel Core i7-7700HQ | NVIDIA Quadro M1200 (4GB)Windows下未知;Linux下能工作 | Intel UHD Graphics 630Windows下未知;Linux下能工作 | 可使用Intel GVT-g以使两张卡同时通过,Bumblebee可在访客模式下使用 | |
| Lenovo Legion Y7000 | Intel Core i7-8750H | GTX 1060 Mobile (6GB)Windows下工作,但Nvidia驱动会遇到43错误;Linux下大概能工作 | Intel UHD Graphics 630Windows下大概能工作;Linux下大概能工作 | ||
| Dell XPS 15 9550 | Intel Core i7-6700HQ | GTX 960M (2GB)Windows下工作,但Nvidia驱动会遇到43错误;Linux下大概能工作 | Intel HD Graphics 530Windows下大概能工作;Linux下大概能工作 | ||
| Dell XPS 15 9570 | Intel Core i7-8750H | GTX 1050Ti (4GB)Windows下工作;Linux下大概能工作 | Intel UHD Graphics 630Windows下工作;Linux下大概能工作 | ||
| Dell Precision 7510 | Intel Xeon E3-1200 v5 | Nvidia Quadro M2000MWindows下工作,但Nvidia驱动会遇到43错误;Linux下大概能工作 | Intel HD Graphics P530Windows下大概能工作;Linux下大概能工作 | ||
| OVERPOWERED Gaming Laptop 15+ | Intel Core i7-8750H | GTX 1060 (6GB)Windows下工作,但Nvidia驱动会遇到43错误;Linux下大概能工作 | Intel UHD Graphics 630Windows下大概能工作;Linux下大概能工作 | ||
| CLEVO P950ER | Intel Core i7-8750H | GTX 1070 with Max-Q design (8GB)Windows下工作,但Nvidia驱动会遇到43错误;Linux下大概能工作 | Intel UHD Graphics 630Windows下大概能工作;Linux下大概能工作 | ||
| XMG P505 (Clevo P650SG) | Intel Core i7-4720HQ | GTX 970M (4GB)Windows下工作,但某些应用只能在RDP下运行;Linux下大概能工作 | Intel HD Graphics 4600Windows下不支持4代及更早的Intel CPU;Linux下不支持4代及更早的Intel CPU | 需要Nvidia驱动(353.82)以在Windows 10下运行 | |
| CLEVO N957TP6 | Unknown (Intel) | Unknown (Nvidia)Windows下工作,但Nvidia驱动会遇到43错误;Linux下大概能工作 | UnknownWindows下大概能工作;Linux下大概能工作 |
可使用以下脚本进行判断。
1 | https://github.com/T-vK/MobilePassThrough |
若没有该芯片,由于 Mac 不支持双显卡切换技术,为使显卡正常,需要屏蔽独显。大多数笔记本上的双显卡切换是让集显承担图像输出任务,所以不能屏蔽集显,屏蔽会导致黑屏。
可以通过外接显示器判断独显是否独立。外接显示器后在桌面右键,打开 NVIDIA 控制面板,然后看是否可以调节数字振动这类设置。如果可以,说明此独显可以被独立驱动。
对于本机而言,由于 BIOS 中有 External Gfx Card Primary Display Configuration,理论上可以屏蔽核显以驱动独显。考虑到 BIOS 中的设置会影响其他系统,此处采用屏蔽 Nvidia 独显而驱动 Intel 核显的方案。
对于旧版 Mac 的独显,可尝试通过 purge-wrangler 驱动,链接如下。
1 | https://github.com/mayankk2308/purge-wrangler |
查找设备路径
设备路径描述了设备在所有硬件中的具体位置,为类似_SB.PCI0.PEG0.PEGP的形式。
通过 gfxutil
下载gfxutil后打开终端,并切换到 gfxutil 所在路径,执行以下命令以输出显卡设备路径。
1 | # 独显 |
通过 Windows
打开 Windows 下的设备管理器,在独显设备上右键单击属性,在详细信息标签卡下拉菜单选择BIOS 设备名称即可。
通过 ACPI 表
在Clover引导界面按下F4,进入系统后打开EFI/CLOVER/ACPI/origin,可得到本机所有ACPI文件。复制到任一位置后打开终端,切换到复制到的位置并执行以下命令。
1 | grep -l _OFF *.aml |
检查输出并记录两个输出中均存在的文件。打开这些文件并查找_OFF 方法,如果这个方法在 PowerShell 宏中(即由 PowerShell 大括号括住),则舍弃。找到独立的_OFF 方法并记录其设备路径即可。
驱动 Nvidia 显卡
Nvidia 显卡一般免驱,部分显卡打开 Inject Nvidia 即可驱动成功。对于未受支持的显卡,则需要安装 Nvidia WebDriver。此驱动最新版只适用于 10.13,因此需要进行修补。
可使用 Benjamin-Dobell 的脚本,仓库如下。
1 | https://github.com/Benjamin-Dobell/nvidia-update |
在终端输入以下命令以启动安装脚本。
1 | curl -O https://raw.githubusercontent.com/Benjamin-Dobell/nvidia-update/master/nvidia-update.sh |
安装完成后重启,在系统设置中已经能够看到 Nvidia 控制面板。若未驱动,则需要在 Clover 的 System Parameters 下勾选 NvidiaWeb。
若为笔记本,独显通常不可驱动。若为台式机,在 Catalina 上独显无法开启硬件加速。若该显卡正常驱动,可安装 WebDriver 和 CUDA Driver 获得更好的体验,下载链接如下。
1 | # WebDriver |
【进阶】旧版Nvidia GPU用于Mojave/Catalina
部分旧版 GPU 最多仅支持到 High Sierra,可通过修改系统文件的方式实现驱动。下载链接如下。
1 | https://www.insanelymac.com/forum/topic/339035-pre-release-macos-catalina/page/21/?tab=comments#comment-2677545 |
需要替换以下文件。
1 | # Frameworks |
并删除以下内容。删除后修复权限并重建缓存即可。
1 | /System/Library/UserEventPlugins/com.apple.telemetry.plugin |
【进阶】OC引导
OpenCore 需添加 EFI 字符串。在配置文件添加以下设备即可。
1 | <?xml version="1.0" encoding="UTF-8"?> |
注意需根据以下内容替换。
| 选项 | 内容 |
|---|---|
| [DEVICEPATH] | 设备路径 |
| [MODELNAME] | 设备名称 |
| [MEMORYSIZE] | 32 - 0x0200000064 - 0x04000000128 - 0x08000000256 - 0x10000000320 - 0x14000000512 - 0x20000000640 - 0x28000000768 - 0x300000001024 - 0x40000000 |
| [OUTPUTS] | DVI-I / DVI-I - BAAAAAAAAwAMAAAAAAAABwAAAAA=VGA / DVI-I - BAAAAAAAAQAGAAAAAAAAAAAAAAA=DVI-I / VGA - BAAAAAAAAwAEAAAAAAAABwAAAAA= |
驱动 Intel 显卡
Intel 显卡位于地址 0x00020000,在 DSDT 中可通过搜索Name (_ADR, 0x00020000)定位到显卡。
打开 Hackintool,在缓冲帧菜单项选择 macOS 10.14,在 IntelGen 菜单项选择显卡的次代。本机为 Intel HD Graphics 620,选择 Kaby Lake。然后选择 PlatformID,本机选择 0×59160000。具体对应架构和 PlatformID 参见附录。
点击应用补丁选项卡,进行以下设置。
1 | # 通用 |
点击Generate Patch生成显卡驱动补丁。点击File-Export-Clover config.plist,路径选择EFI/CLOVER并确认替换。注意,Hackintool会将原来的config.plist和生成的补丁进行合成,替换以后的config.plist为原有基础上添加了显卡补丁的配置文件,原有配置文件则被备份为config-backup.plist。
【进阶】DeviceProperties中显卡设备参数含义
framebuffer-unifiedmem 用于设置显存参数,可随意设置,仅在系统设置中显示,无实际作用。注意,UHD630 经测试最高只能修改到 4080MB,再往上会变成 0MB。
驱动 AMD 显卡
AMD 显卡大部分免驱,部分需要通过伪装 ID 的方式驱动。
【进阶】伪装ID
部分 GPU 需要将其欺骗为其它显卡以正常工作。列表如下。
1 | R9 290/390 |
以 R9 390 为例,最接近的可驱动卡为 390X,可得 vendor ID 为 1002,device ID 为 67B0。仅需将 device ID 进行处理,结果如下,注意遵循小端规则。
1 | "device-id", |
下载以下文件并用 MaciASL 打开。
1 | https://github.com/dortania/Getting-Started-With-ACPI/blob/master/extra-files/decompiled/SSDT-GPU-SPOOF.dsl.zip |
将以下内容修改为显卡的设备路径。
1 | External (_SB_.PCI0, DeviceObj) |
然后将前面修改过的 device ID 放入该 SSDT 中。同时修改 model,该部分仅为装饰性作用。
1 | "model", |
另存为aml文件后放置在Clover的ACPI/patched即可。
可尝试 PyVega 以实现超频和电压调整。
1 | https://github.com/corpnewt/PyVega |
禁用显卡
必须在 BIOS 中关闭 CSM,才可使以下方法工作。
通过添加引导标志
保证 Whatevergreen 存在,在 Clover 引导标志中添加-wegnoegpu。此方法不能保证始终正常工作。
通过添加独显设备并禁用
注意,进入该设备路径的其它设备也将获得这些属性,从而失效,即会禁用同一品牌的所有显卡,也会禁用开普勒 GPU。其它 PCIe 驱动器也可用此法禁用。
查找到独显设备路径,对于 Nvidia 一般为\_SB.PCI0.PEG0.PEGP,对于 AMD 一般为\_SB.PCI0.PEGP.DGFX。找到后在 Clover 的 Device-Add Properties 下添加该独显路径,并填写以下内容。
对于 Nvidia 显卡采用以下内容。
| Device | Key | Value | Disabled | Value Type |
|---|---|---|---|---|
| NVidia | name | 23646973706C6179 | False | DATA |
| NVidia | IOName | #display | False | STRING |
| NVidia | class-code | FFFFFFFF | False | DATA |
对于 AMD 显卡则采用以下内容。
| Device | Key | Value | Disabled | Value Type |
|---|---|---|---|---|
| ATI | name | 23646973706C6179 | False | DATA |
| ATI | IOName | #display | False | STRING |
| ATI | class-code | FFFFFFFF | False | DATA |
| ATI | vendor-id | FFFF0000 | False | DATA |
| ATI | device-id | FFFF0000 | False | DATA |
通过 SSDT
查找到独显设备路径后,打开MaciASL并新建文件,复制以下代码并将_SB.PCI0.PEG0.PEGP修改为所找到的设备路径,保存为aml文件并放到EFI/CLOVER/ACPI/hotpatch,然后添加change _DSM to XDSM更名补丁。
对于 Nvidia 显卡采用以下 SSDT。
1 | DefinitionBlock ("", "SSDT", 2, "hack", "spoof", 0) |
对于 AMD 显卡采用以下 SSDT。
1 | DefinitionBlock ("", "SSDT", 2, "hack", "spoof", 0) |
通用版 SSDT 如下。
1 | DefinitionBlock ("", "SSDT", 2, "DRTNIA", "spoof", 0x00000000) |
仓库如下。
1 | https://github.com/dortania/Getting-Started-With-ACPI/blob/master/extra-files/decompiled/SSDT-GPU-DISABLE.dsl.zip |
屏蔽独显
查找到独显设备路径后,打开MaciASL并新建文件,复制以下代码并将_SB.PCI0.PEG0.PEGP修改为所找到的设备路径,保存为aml文件并放到EFI/CLOVER/ACPI/hotpatch。
【进阶】禁用原理
该 SSDT 通过调用显卡设备中的_OFF方法实现屏蔽独显。
1 | https://github.com/dortania/Getting-Started-With-ACPI/blob/master/extra-files/decompiled/SSDT-dGPU-Off.dsl.zip |
对于部分显卡,该方法无法使其正常关闭,则可通过发送 D3 state 的方式使显卡处于最低耗能状态。使用以下 SSDT 即可,操作同上。
1 | https://github.com/dortania/Getting-Started-With-ACPI/blob/master/extra-files/decompiled/SSDT-NoHybGfx.dsl.zip |
屏幕亮度
启用调节
对于笔记本,可使用 BrightnessKeys.kext,链接如下,
1 | https://github.com/acidanthera/BrightnessKeys |
对于台式机,打开Maciasl,新建文件并复制以下内容,保存为SSDT-PNLF.aml并放入Clover的ACPI/patched下。
对于 Coffee Lake 及更新 CPU,使用以下补丁。
1 | https://github.com/acidanthera/OpenCorePkg/blob/master/Docs/AcpiSamples/Source/SSDT-PNLFCFL.dsl |
其它使用以下补丁。
1 | https://github.com/acidanthera/OpenCorePkg/blob/master/Docs/AcpiSamples/Source/SSDT-PNLF.dsl |
或以下内容。
1 | DefinitionBlock ("", "SSDT", 2, "hack", "_PNLF", 0x00000000) |
重启电脑后进入系统偏好设置-显示器,若出现亮度调节滑块则已成功。
完成后可通过NativeDisplayBrightness,实现通过F1/F2控制显示器亮度。
1 | https://github.com/Bensge/NativeDisplayBrightness |
也可尝试 IntelBacklight,或 ACPIBacklight。
1 | https://github.com/RehabMan/OS-X-Intel-Backlight |
【进阶】DSDT PNLF补丁
对于 SandyBridge 和 IvyBridge 如下。
1 | into_all device label PNLF remove_entry; |
对于 Haswell 和 Broadwell 如下。
1 | into_all device label PNLF remove_entry; |
对于 SkyLake 和 Kabylake 如下。
1 | into_all device label PNLF remove_entry; |
对于 Coffeelake、WhiskeyLake、CometLake 和 Ice Lake 如下。
1 | into_all device label PNLF remove_entry; |
【进阶】DSDT的相关代码
LMAX 变量代表 PWM 背光最大值,示例如下。若设置为 0 则在引导时使用 BIOS 寄存器值。
1 | Name(LMAX, 0x56c) |
亮度恢复
AppleBacklight.kext 将当前亮度级别存储在 NVRAM 中,以便在重新启动后进行恢复。
为了使恢复正常工作,必须正确实施 NVRAM。且 Clover 的配置文件中,SystemParameters-BacklightLevel 不应设值,ACPI-DSDT-Fixes-AddPNLF 应关闭
若电脑有环境光传感器,则可能会对亮度恢复造成干扰。可在 DSDT 中通过查找ACPI0008检查是否存在光传感器。若有,则可通过编辑其_STA 方法禁用,示例如下。
1 | Device (ALSD) |
效果检验
重启后显卡正常情况下已经驱动,Dock 栏变为半透明。
点击左上角苹果按钮,选择关于本机,若图形卡一栏显示 2048MB 而不是 7MB,则核显驱动成功。在系统报告-图形卡中若不能看到所屏蔽的独显,则独显屏蔽成功。点击核显,若有Metal: 支持,功能集 macOS GPUFamily2 v1字样,则 metal 支持打开成功。
显卡驱动后需检验显卡硬件加速(QE/CI)是否已经打开。如果能够运行象棋游戏、屏幕保护程序正常工作、Grapher能看到三维图像、截屏功能正常,则硬件加速已打开。
也可使用 VDADecoderChecker 或 VideoProc 检测。对于 VideoProc,打开应用后进入设置,点击硬件加速引擎旁边的选项,查看检测结果即可。VideoProc 下载链接如下。
1 | https://www.videoproc.com/ |
对于 VDADecoderChecker,下载链接如下。双击即可进行检查。若不正常,需保证 iGPU 注入正确,若无效则尝试更改 SMBIOS。
1 | https://github.com/cylonbrain/VDADecoderCheck |
【进阶】对于Catalina及更高版本
由于默认情况下不显示来自 AppleGVA 的调试信息,因此需要在系统日志查看结果。在终端输入以下命令。
1 | defaults write com.apple.AppleGVA enableSyslog -boolean true |
输入后开启 VDADecoderChecker。完成后输入以下命令禁用 AppleGVA 调试。
1 | defaults delete com.apple.AppleGVA enableSyslog |
【进阶】Big Sur中的错误
若出现 VDADecoderCreate failed. err: -12473 错误,在有 AMD 独显的情况下,可在终端输入以下命令。
1 | defaults write com.apple.AppleGVA gvaForceAMDAVCDecode -boolean yes |
DRM 支持
若未开启 DRM,则 Apple TV+、Amazon Prime、Netflix 将无法正常观看。开启 DRM 需要支持的 dGPU。
【进阶】其它系统支持性
对于 Big Sur 和 Safari 14,系统不再提供软件 DRM 支持与传统硬件 DRM 支持,WhatEverGreen 目前未提供 DRM 支持。在 Catalina 中,对于 Intel,Haswell 及更新的核显不提供 DRM 支持。
iGPU 的 DRM 中断通过 WhatEverGreen 修复,在 10.12.2 及更低系统起作用。
DRM 类型如下。
| 类型 | 说明 |
|---|---|
| FairPlay 1.x | 基于软件的DRM,用于支持旧版Mac |
| FairPlay 2.x/3.x | 基于硬件的DRM,用于Netflix和Amazon Prime,需Polaris+的AMD GPU以保证工作 |
| FairPlay 4.x | 混合DRM,用于AppleTV+,需无iGPU (Xeon)或有Polaris+的AMD GPU以保证工作 |
首先通过 VDADecoderChecker 保证硬件正常工作。然后通过以下视频检查各 DRM 类型。
1 | # FairPlay 1.x |
根据以下列表设置 SMBIOS,并添加启动参数或添加设备属性即可。以shikigva=80为例,设备属性如下。注意应当仅对一个显卡注入 shikigva 属性,否则 WhatEverGreen 将使用它首先找到的任何内容,并且不能保证一致。
| Properties Key | Properties Value | Value Type |
|---|---|---|
| shikigva | 80 | Number |
注意,IQSV 代表英特尔快速同步视频。这仅在 iGPU 存在并启用且设置正确时才有效。
1 | https://github.com/acidanthera/WhateverGreen/blob/master/Manual/FAQ.Chart.md |
显示修复
若出现屏幕花屏,可以尝试将 DVI 换为 HDMI,或注入 EDID。
平滑字体
在终端输入以下命令即可。
1 | # 开启 |
Hidpi
HiDPI 即 High Dots Per Inch,用四个硬件像素渲染一个图像像素。开启 Hidpi 可使显示更清晰。
通过脚本
在终端下输入以下命令打开一键 HiDPI 脚本,安装以获得原生屏幕缩放体验。
1 | sh -c "$(curl -fsSL https://raw.githubusercontent.com/xzhih/one-key-hidpi/master/hidpi.sh)" |
通过 RDM
打开 DarwinDumper,只勾选 EDID,点击左侧的 Run,会在桌面生成 EDID 文件夹。下载链接如下。
1 | https://mac.softpedia.com/get/Utilities/DarwinDumper.shtml |
下载 FixEDID,链接如下。
1 | https://github.com/andyvand/FixEDID |
打开并点击Open EDID binary file,选择桌面文件夹的EDID/EDID.bin。选择对应显示比例的显示器,此处为Apple MacBook Pro Display(16:10)。
在右侧输入想设置的分辨率,点击 Add Resolutions 添加分辨率,点击 Make 在桌面生成文件。参考分辨率如下。
1 | 3840×2160 |
将桌面的DisplayVendorID-xxx放到/System/Library/Displays/Contents/Resources/Overrides。安装RDM并重启电脑,即可在RDM看到需要的分辨率,链接如下。
1 | http://avi.alkalay.net/software/RDM/RDM-2.2.dmg |
通过手动设置
【进阶】对于Big Sur
该方法适用于Big Sur,将最后生成的文件放置于/Library/Displays/Contents/Resources/Overrides即可。
具体可在终端使用以下命令。
1 | sudo mkdir -p /Library/Displays/Contents/Resources/Overrides/ |
打开终端并输入以下命令。
1 | sudo defaults write /Library/Preferences/com.apple.windowserver.plist DisplayResolutionEnabled -bool true |
输出类似如下信息,其中所有外部监视器由 AppleDisplay 标识,内部监视器由 AppleBacklightDisplay 标识。在行末可识别出 DisplayVendorID 和 DisplayProductID,此处为10ac和d06e。
1 | "IODisplayPrefsKey" = "IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/IGPU@2/AppleIntelFramebuffer@2/display0/AppleDisplay-10ac-d06e" |
打开以下网页并输入刚才得到的 DisplayVendorID 和 DisplayProductID,DisplayProductName 可以随意。注意一个分辨率需填写两个 Scale Resolutions,其中第一个是原分辨率,另一个是长宽均为两倍后的分辨率,如添加 1920×1080,则需填入 3840×2160 和 1920×1080。注意相近的分辨率将会被系统过滤。
1 | https://codeclou.github.io/Display-Override-PropertyList-File-Parser-and-Generator-with-HiDPI-Support-For-Scaled-Resolutions/ |
调整完成后下载plist文件,去掉扩展名并放在DisplayVendorID-10ac文件夹,其中10ac更改为自己的VendorID。将文件夹复制到/System/Library/Displays/Contents/Resources/Overrides并重启即可。
注入 EDID
注入 EDID 可修复笔记本显示器内屏黑屏或花屏的问题。若前面选择采用 Hidpi 一键脚本,则无需进行此步。
通过 patch-edid.rb
打开终端并输入以下命令以下载脚本。
1 | curl -O https://gist.github.com/ejdyksen/8302862/raw/patch-edid.rb |
打开脚本文件并查找AppleDisplay,其代表外接显示器,若为内接显示器则需修改为AppleBacklightDisplay。然后继续在终端输入以下命令以运行并生成配置文件。
1 | sudo ruby patch-edid.rb |
将生成的配置文件复制到/System/Library/Displays/Contents/Resources/Overrides/DisplayVendorID-xxx(对于El Capitan及以前版本为/System/Library/Displays/Overrides/DisplayVendorID-xxx),若已存在配置文件,则将两个文件的内容合并,重启即可。
通过 Clover
在终端分别输入以下命令并记录其输出。其中第一个输出为 EDID 信息,另外两个分别为屏幕设备的 VendorID 和 ProductID。
1 | ioreg -lw0 | grep -i "IODisplayEDID" | sed -e 's/.*<//' -e 's/>//' |
打开 Clover 的 config.plist,切换到 Graphics,将三者分别粘贴到对应的位置,注意 VendorID 和 ProductID 需要转换为十六进制。勾选Inject EDID,保存并重启即可。
通过 Hackintool
打开 Hackintool,进入显示器,选择要编辑的显示器,可添加或修复监视器范围,以及修改分辨率。
点击导出,将DisplayVendorID-x和Icons.plist复制到/System/Library/Displays/Contents/Resources/Overrides(对于El Capitan及以前版本为/System/Library/Displays/Overrides)即可。
也可将 DisplayEDID-x-x.kext 复制到 Clover 的 kexts 文件夹。
常见问题
部分 iGPU 唤醒中断
Apple 对 AppleGraphicsPowerManagement.kext 中进行的修改导致。需要添加启动参数 igfxonln=1 以强制所有显示器联机。
NVMe 内核崩溃
部分配备iGPU的系统(Sandy Lake/Coffee Lake等)可能会导致系统在低功耗状态下不稳定。需要添加启动参数forceRenderStandby=0以禁用RC6渲染待机。
Ice Lake 笔记本出现 panic,为 Cannot allow DC9 without disallowing DC6
状态转换问题,需要添加启动参数-noDC9 或-nodisplaysleepDC6。
带有 AMD dGPU 的 4k 显示器无法随机唤醒
AGDC 设置引起。在配置文件中定位到该设备的设备属性,添加以下项即可。
| 选项 | 类型 | 内容 |
|---|---|---|
| CFG,CFG_USE_AGDC | Data | 00 |
有线网卡
几乎所有的有线网卡都受支持。
Realtek
Realtek L8200A 不受支持。
以Realtek RTL8111有线网卡为例,网络上寻找对应驱动的kext,并放入Clover的kexts/Others即可驱动。
驱动后进入系统偏好设置-网络,可看到有线网卡。或点击左上角苹果按钮,选择关于本机-系统报告…,在以太网卡中可以看到有线网卡。
1 | # Realtek RTL810X(RTL8101E/8102E/8103E/8401E/8105E/8402/8106E/8106EUS) |
Intel
Intel 有线网卡驱动下载链接如下。不支持 Intel I225 2.5Gb NIC、Intel I225 2.5Gb NIC、Intel 10Gb server NICs、Mellanox and Qlogic server NICs。
1 | # 新版,支持82578LM/82578LC/82578DM/82578DC/82579LM/82579V/I217LM/I217V/I218LM/I218V/I218LM2/I218V2/I218LM3/I219V/I219LM/I219V2/I219LM2/I219LM2 |
Intel i225-V需要欺骗为被支持的i225LM,具体为在Clover的设备属性下添加路径PciRoot(0x0)/Pci(0x1C,0x1)/Pci(0x0,0x0),其中具有键device-id,类型为Data,值为F2150000。完成欺骗后通过AppleIntelI210Ethernet驱动即可。若出现panic,则设备路径应改为类似PciRoot(0x0)/Pci(0x1C,0x4)/Pci(0x0,0x0)。
Broadcom
对于BCM5722 NetXtreme/NetLink,可用BCM5722D,链接如下。适用于10.6及更高版本。
1 | https://github.com/chris1111/BCM5722D |
其它则需要 FakePCIID+FakePCIID_BCM57XX_as_BCM57765。
AMD
I211-AT 驱动下载链接如下。
1 | https://github.com/khronokernel/SmallTree-I211-AT-patch/releases |
Atheros
Atheros 有线网卡驱动下载链接如下。
1 | # Qualcomm Atheros E2200 |
也可尝试使用 ALXEthernet。
Aquantia
Aquantia 有线网卡驱动下载链接如下。
1 | https://www.insanelymac.com/forum/topic/330614-aquantia-10-gb-ethernet-support-thread-10132-upwards/ |
无实际网卡
因为 Mac App Store、iCloud、FaceTime 和 iMessage 的正常工作要求在 en0 处具有内置以太网,因此,若无有线网卡,需将 NullEthernet.kext 放到 Clover 的 kexts 以模拟出一个有线网卡设备。下载链接如下。
1 | https://bitbucket.org/RehabMan/os-x-null-ethernet/downloads/ |
网络端口重置
若以太网端口不在 en0,则需进入网络偏好设置,删除所有接口并应用。
然后删除/Library/Preferences/SystemConfiguration/NetworkInterfaces.plist,重新启动后进入网络偏好设置,重新添加网络端口。
有线网卡内建
在 Clover 的 Devices 选项卡中选择 Properties,添加一个新设备,路径为通过 Hackintool 找到的有线网卡设备,并添加条目 built-in,数值为 01,类型为 DATA,重启即可。
如果用的是NullEthernet.kext,则打开Maciasl,复制以下内容并保存为SSDT-RMNE.aml,然后放入Clover的ACPI/patched中即可。
1 | DefinitionBlock ("", "SSDT", 2, "RehabM", "RMNE", 0x00001000) |
免驱卡
免驱卡列表如下。
1 | ## Aquantia Series |
无线网卡
Atheros
本机无线网卡为 Atheros AR9565,可用驱动由 corecapture.kext、CoreCaptureResponder.kext 和 IO80211Family.kext 组成,下载链接如下。
1 | http://www.mediafire.com/file/2rjm76vro8ha28l/9565.zip/file |
对于 macOS 10.14,把它们放入 Clover 的 kexts 中,重启电脑后无线网卡可用。
【进阶】更高版本系统
上述 kexts 在 Catalina 中需要放到 SLE 才能正常工作,在 Big Sur 中已不适用。Big Sur 中需要使用 HS80211Family.kext 和 AirPortAtheros40.kext,下载网站如下。
1 | https://www.longzc.cn/index.php/archives/330 |
在 Catalina 中,也可尝试以下 kexts。
1 | https://github.com/tj320442/AR9565-DW1707-macOS-10.15-Catalina |
对于 AR946X(AR9462&AR9463)、AR9485、AR9565,也可尝试 ATH9KFixup。
1 | https://github.com/chunnann/ATH9KFixup |
对于 AR242x、AR542x、AR5416、AR5418、AR9280-AR5BHB92、AR9285-AR5B95、AR9287-AR5B97、AR9380-AR5BXB112,可尝试 High Sierra 的 IO80211Family。
1 | https://github.com/khronokernel/IO80211-Patches/blob/main/10.13.6-High-Sierra-Kexts/IO80211HighSierra.kext.zip |
【过时】低版本系统
对于AR5B95/195/97/197,在High Sierra中可用以下kext。下载后解压并将kexts/ProbookAtheros.kext放置到引导器即可。
1 | https://github.com/RehabMan/HP-ProBook-4x30s-DSDT-Patch/archive/master.zip |
Intel
可尝试 Itlwm,支持 10.13 及更高版本。注意应当使用 itlwm.kext 或 AirportItlwm.kext,两者不能同时使用。推荐使用 itlwm.kext。
1 | https://github.com/OpenIntelWireless/itlwm |
支持列表如下。
1 | https://openintelwireless.github.io/itlwm/Compat.html |
该 kexts 会使 Intel 无线网卡识别为有线网卡,因此需要配合 HeliPort 客户端使用。
1 | https://github.com/OpenIntelWireless/HeliPort |
【进阶】使用AirportItlwm
若使用 AirportItlwm,则需要开启安全启动,具体可查看黑苹果的进阶操作中 OpenCore 的相关处理方法。
Broadcom
可尝试 AirportBrcmFixup,适用于 10.10 及更高版本,链接如下。
对于DW1820A/DW1830/DW1560,需添加启动参数brcmfx-country=#a和brcmfx-aspm。安装前先于BIOS中禁用WLAN/WIFI和Bluetooth,待安装系统成功后再行开启。
对于DW1820A,还需要在config.plist添加以下设备属性。如果想体验Sidecar/Apple Watch解锁功能,compatible可为pci14e4,43a0或者pci14e4,4353,以便驱动AirPortDriverBrcmNIC并开启相应功能。
| Properties Key | Properties Value | Value Type |
|---|---|---|
| AAPL,slot-name | WLAN | STRING |
| compatible | pci14e4,4353 | STRING |
| device_type | Airport Extreme | STRING |
| model | DW1820A (BCM4350) 802.11ac Wireless | STRING |
| name | Airport | STRING |
如果插上网卡后进入系统直接卡住,可添加引导参数-brcmfxoff 以暂时跳过网卡驱动的加载。
1 | https://github.com/acidanthera/AirportBrcmFixup |
【注意】BCM94350ZAE芯片组
BCM94350ZAE 芯片组在 macOS 中不正确支持电源管理,因此需要通过属性注入禁用。在引导器的设备部分添加无线网卡设备,并添加以下属性。
| 属性 | 类型 | 值 |
|---|---|---|
| pci-aspm-default | Data | 00 |
【进阶】AirportBrcmFixup与BrcmWLFixup
BrcmWLFixup 已被整合到 AirportBrcmFixup。
【进阶】OC引导
对于OpenCore,kext注入顺序为AirportBrcmFixup-AirportBrcmFixup/Contents/Plugins/AirPortBrcm4360_Injector-AirportBrcmFixup/Contents/Plugins/AirPortBrcmNIC_Injector。
对于BCM94352z/DW1560,需使用AirportBrcmFixup和BrcmPatchRAM。BrcmPatchRAM链接如下。该方法适用于10.11至10.14系统。
1 | https://github.com/acidanthera/BrcmPatchRAM |
若蓝牙失效,则将BrcmFirmwareData.kext、BrcmPatchRAM2.kext、AirportBrcmFixup.kext复制到/Library/Extensions目录下,以解决睡眠唤醒后可能引起的蓝牙失效的问题。重启前需要重建系统的缓存。
也可尝试 BroadcomWiFiInjector。
【进阶】OC引导
对于 OpenCore,kext 注入顺序为 Injector-Data-RAM。
Realtek
对于 RTL8192CU,可采用以下链接。
1 | https://drive.google.com/file/d/1ZtdMqlvKBbHULJhl1u9omuLOy6j0vx48/view |
免驱卡
列表如下。
| 无线网卡型号 | 蓝牙型号 | 连接器型号 | 使用的Mac产品型号 |
|---|---|---|---|
| BCM943602CDP | 20703A1 | U.FL Connector | iMac16,xiMac17,1iMac18,x |
| BCM94360CD | 20702B0 | U.FL Connector | iMac14,xiMac15,xMacPro6,1 |
| BCM94331CD | BRCM20702(05AC:828b) | U.FL Connector | iMac13,x |
| BCM94360CS2 | BRCM20702(05AC:821f) | MHF4 Connector | MacBookAir5,xMacBookAir6,xMacBookAir7,x |
| BCM943224PCIEBT | |||
| BCM943602CS | 20703A1 | MHF4 Connector | MacBookPro12,x |
| BCM94360CS | 20702B0 | MHF4 Connector | Macmini7,xMacBookPro11,x |
| BCM94360CSAX | BRCM20702(05AC:828c) | MHF4 Connector | MacBookPro10,x |
| BCM94350 | 4350C1 | MHF4 Connector | MacBook8,1 |
| BCM94350 | 20703A2 | MHF4 Connector | MacBookPro13,x |
| BCM94350 | 4350 | MHF4 Connector | MacBookPro14,x |
| BCM4364 | 4364B0 | iMac19,xMacmini8,1MacBookPro15,xiMacPro1,1 - 4364MacPro7,1- 4364B3 | |
| BCM4355 | MacBookAir8,1 | ||
| 以下为传统无线网卡 | |||
| BCM4328 | iMac5,1-9,1MacBook3,1-4,1MacBookAir1,1-2,1 | ||
| BCM4321 | MacPro2,1Macmini4,1 | ||
| BCM4322 | MacBook5,1MacBookPro5,1 and 7,1MacBookAir3,1-5,1MacPro5,1 | ||
| BCM43224 | MacBook6,1MacBookPro6,1 | ||
| BCM4331 | Macmini5,xMacBookPro8,x-10,x | ||
| AR242X/AR542X | MacBook1,1Macmini1,1-2,1 | ||
| AR5418 | MacBook2,1 | ||
| AR928X | iMac10,1-11,xMacPro3,1 | ||
| AR93XX | iMac12,x |
其它
对于 MT7610,可使用以下 kext。
1 | https://d86o2zu8ugzlg.cloudfront.net/mediatek-craft/drivers/MT7612_7610U_D5.0.1.25_SDK1.0.2.18_UI5.0.0.27_20151209.zip |
对于 RT5370,可使用以下 kext。
1 | https://d86o2zu8ugzlg.cloudfront.net/mediatek-craft/drivers/RTUSB_D2870-4.2.9.2_UI-4.0.9.6_2013_11_29.zip |
替代方法
对于无解的网卡,可以更换网卡、购买黑苹果 USB 网卡或者将手机作为热点。
USB 网卡可尝试以下驱动。
1 | https://github.com/chris1111/WirelessAdapterCloverBigSur |
对于 iPhone 用户,将手机接入电脑,手机开启个人热点功能,即可使用手机热点。对于 Android 用户,可安装hoRNDIS,然后将手机连接到电脑,开启安卓手机的 USB 网络共享即可。下载链接如下。
1 | https://github.com/jwise/HoRNDIS |
声卡
通过 AppleALC 驱动
寻找 Layout ID
保证系统SLE下有AppleHDA.kext,在Clover的kexts文件夹中放入AppleALC.kext。注意,该kext不能与VoodooHDA、RealtekALC、CloverALC、HDA Blocker、HDAEnabler1/2/3共用。下载链接如下。
1 | https://github.com/acidanthera/AppleALC/releases |
打开 Hackintool,切换到 Audio,通过下拉列表可查看该硬件支持的 Layout ID。在启动参数中添加以下参数,其中#为所查询到的 Layout ID 之一。
1 | alcid=# |
若为Windows/Linux与macOS双引导,则打开Clover的config.plist,在Devices选项卡勾选Audio项下的ResetHDA选项。
重启后检查声卡是否被驱动,可在终端运行以下命令。若三者都存在,则驱动成功。
1 | kextstat | grep -E "AppleHDA|AppleALC|Lilu" |
若无声,则可更换不同的 Layout ID。本机使用的 Layout ID 为 12。打开 IORegistryExplorer 并搜索 HDEF,若存在该设备,其下有 AppleHDAController,右侧属性中的 alc-layout-id 不是修补前默认的 07000000,且包含 AppleHDAInput 设备,则 AppleALC 已成功修补。
如果睡眠后机器无声,则还需要在 Clover 的 kexts 中放入 CodecCommander.kext。注意,尽管 Hackintool 提示该 kexts 已被合并到 AppleALC 中,但不放置时仍会出现问题。
1 | https://github.com/Sniki/EAPD-Codec-Commander |
写入 Layout ID
确保该Layout ID可用后,可将该配置写入Clover的配置文件中。打开Hackintool,切换到Audio,通过下拉列表选择Layout ID。切换到Intel-Patch,选择Devices/Properties,勾选Auto Detect Changes、Audio,点击Generate Patch生成声卡驱动补丁。完成后保存以替换。
也可手动生成设备信息。打开 Clover 的 config.plist,在 Devices 选项卡下选择 Properties。
先在左侧栏添加声卡的设备路径。可在 Hackintool 中查找,也可通过 gfxutil,命令如下。
1 | gfxutil -f HDEF |
然后右侧栏添加以下条目即可。
| Properties Key | Properties Value | Value Type |
|---|---|---|
| alc-layout-id | 21 | NUMBER |
| hda-gfx | onboard-1 | STRING |
| AAPL,slot-name | Internal | STRING |
【进阶】十进制与十六进制
若将 alc-layout-id 设置为 Data 类型,则为十六进制模式,且遵循小端规则。如 256 为 FF010000。
实现顺序
对于AppleALC,指定Layout ID的优先级顺序为启动参数alcid=#->配置文件Device Properties中的alc-layout-id属性(仅适用Apple硬件)->配置文件Device Properties中的layout-id属性(适用Apple/非Apple硬件)。
常见问题
【进阶】对于OC
同一布局在 Clover 起作用而 OpenCore 不起作用
一般是由于 IRQ 冲突,可尝试使用 SSDTTime 中的 SSDT-HPET 热补丁,链接如下。
1 | https://github.com/corpnewt/SSDTTime |
10.15 中由于电源状态更改导致的 kernel panic
在 OpenCore 的配置文件中设置 Kernel-Quirks-PowerTimeoutKernelPanic 为 True。
AppleALC 工作不一致
由于硬件没有及时初始化,可能会导致没有声音输出。添加以下启动参数即可,注意 ALC 延迟不能超过 3000 毫秒。
1 | alcdelay=1000 |
或在设备属性中添加以下项。
| Properties Key | Properties Value | Value Type |
|---|---|---|
| alc-delay | 1000 | NUMBER |
双声卡时无声
需要让 AppleALC 忽略外部音频控制器。在外部音频控制器的设备属性中添加以下项即可。
| Properties Key | Properties Value | Value Type |
|---|---|---|
| external-audio | 01 | Data |
从 Windows 重启到 Mac 后无声
可添加启动参数alctsel=1,或在设备属性中添加以下项。
| Properties Key | Properties Value | Value Type |
|---|---|---|
| alctsel | 01000000 | Data |
通过 VoodooHDA 驱动
在 AMD 上运行 AppleALC 可能会不起作用,则可使用 VoodooHDA。下载 kext 并放到 Clover 中即可,链接如下。
1 | https://sourceforge.net/projects/voodoohda/ |
插孔检测
使用 JackFix 即可,支持 ResetHDA 和 3.5mm 耳机接口类型切换。
1 | https://github.com/fewtarius/jackfix |
键盘与鼠标
驱动
对于一般的 PS2 键盘,在 Clover 的 kexts 放入VoodooPS2Controller.kext,重启即可驱动。下载链接如下。
1 | # 10.11及以上系统 |
对于 MSI GK-701 键盘,可用以下 kext。
1 | https://github.com/osy/GK701HIDDevice |
键位映射
安装Karabiner Elements,链接如下。
1 | https://github.com/pqrs-org/Karabiner-Elements |
打开后选择 Complex Modifications,点击 Add rule-Import more rules from the Internet,在网页中搜索并安装PC-Style Shortcuts、PC-Style Modifiers、Adobe Photoshop,并在添加的类别上点击 Enable All,完成键位映射调整。
USB
USB3 端口为九针,USB2 端口为四针。
端口限制解除补丁
macOS 规定 USB 端口的数量应少于 15 个,其中一个 USB3.0 的接口应按两个端口的配额计算。若端口数量大于 15 个,可能会导致系统无法启动,需用以下 kexts 补丁解除,在引导器的 config.plist 中添加即可。
注意,完成以下端口定制后,应当及时取消该补丁。
El Capitan
1 | Comment: change 15 port limit to 26 |
Sierra
1 | Comment: Port limit increase |
或使用以下补丁。
1 | Comment: change 15 port limit to 26 |
High Sierra
对于 10.13.6,应使用以下补丁。
1 | Comment: USB 10.13.6+ by PMHeart |
对于 10.13.4-10.13.5,应使用以下补丁。
1 | Comment: USB 10.13.4+ by PMHeart |
对于 10.13-10.13.3,应使用以下补丁。
1 | Comment: change 15 port limit to 24 |
Mojave
对于 10.14.5-10.14.6,应使用以下补丁。
1 | Comment: USB Port Limit Patch 1 PMHeart/DalianSky |
对于 10.14.4,应使用以下补丁。
1 | Comment: USB Port Limit Patch 1 ©PMHeart |
对于 10.14-10.14.3,应使用以下补丁。
1 | Comment: Port limit increase (Ricky) |
Catalina
对于 10.15-10.15.1,应使用以下补丁。
1 | Comment: USB port limit patch #1 10.15.x modify by DalianSky(credit ydeng) |
端口定制
在 Clover 下放置 USBInjectAll.kext,下载链接如下。
1 | https://bitbucket.org/RehabMan/os-x-usb-inject-all/downloads/ |
确保cofig.pilst的ACPI更名中已应用EHC1->EH01、EHC2->EH02以及XHCI/XHC1->XHC_补丁。然后通过以下方法之一处理。
【进阶】USBInjectAll适用范围及驱动原理
USBInjectAll 在桌面版 Skylake 及更新平台上无需使用,但在 Coffee Lake 及更旧平台的笔记本上则推荐使用。AsRock 主板也推荐使用。注意,该 kext 完全不支持 AMD CPU,需要 10.11 及以上版本。
USBInjectAll.kext以数据驱动方式进行编码。在kext代码本身中没有任何硬编码,所有数据都包含在Info.plist中。USBInjectAll.kext启动时,会在EH01/EH02/XHC或连接到EH01/EH02端口1的内部集线器上进行匹配,查询Info.plist中与它所连接的设备相关的配置数据,并注入找到的数据。
通过 Hackintool
打开 Hackintool,点击 USB,确保芯片组已被正确识别。把所有端口删除后刷新,然后分别取 USB3 与 USB2 的可移动设备对每一个接口进行插拔,每插拔一次设备将出现一个条目的改变,记录对应端口名称及 USB 类型,如下表所示。注意,TypeC 接口需要正反各插拔一次。
注意,USB2(HSxx)占用一条 USB 线路,USB3、TypeC、TypeC+Sw(SSxx)占用两条 USB 线路。Mac 最多支持占用 15 条 USB 线路,若超过则需要取舍。
| 设备类型 | 端口类型 |
|---|---|
| 永久连接设备的USB端口(如蓝牙) | Internal |
| 与USB3端口相连的HSxx端口(USB2) | USB3 |
| 内部集线器(通常连接到端口PR11和PR21) | Internal |
| TypeC正反插端口一致 | TypeC+Sw |
| TypeC正反插端口不一致 | TypeC |
完成后导出,将SSDT-EC.aml、SSDT-UIAC.aml和SSDT-USBX.aml放到Clover的ACPI/patched下。或将SSDT-EC.aml和USBPorts.kext分别放置到ACPI/patched和kexts/Other下。若放置的是SSDT,则需保留USBInjectAll.kext,若为SSDT+kext则需删除。
重启后若需检测是否成功,可插入USB3.0设备,通过系统报告查看速率是否为5G/s。或使用IOregistryExplorer,搜索XHC,可查看所有端口是否都已正常工作。
通过 USBMap
打开终端并运行以下命令以打开脚本。
1 | git clone https://github.com/corpnewt/USBMap |
脚本打开后会核查 USBInjectAll 是否被正确加载、USB 控制器是否被正确识别。脚本需要 USBInjectAll 的版本在 0.70 以上。若已完成放置但无法识别,则可能还需要 XHCI_unsupported.kext。
若端口数量大于 15 个,则需要应用端口解除补丁或在脚本主菜单上选择S. Exclude SSxx Ports或H. Exclude HSxx Ports端口以禁用 SSxx(一般为 USB3.0)或 HSxx(一般为 USB2.0)端口,完成后重启。若需要取消禁用,则选择C. Clear Exclusions。
选择D. Discover Ports,脚本将读取默认 USB 列表。依次将每个端口用 USB 设备插拔,过程与使用 Hackintool 相同。每发现新的端口会有提示,直接忽略即可。完成后按Q并回车,返回主菜单。
选择P. Edit Plist & Create SSDT/Kext,可以看到刚才所识别的结果。需根据实际情况修改端口类型,数字代号与端口类型对应关系如下。设置要求与使用Hackintool一致。
| 数字 | 含义 |
|---|---|
| 0 (0x0) | (USB2.0)Type A connector |
| 1 | Mini-AB connector |
| 2 | ExpressCard |
| 3 (0x3) | (USB3.0)USB 3 Standard-A connector |
| 4 | USB 3 Standard-B connector |
| 5 | USB 3 Micro-B connector |
| 6 | USB 3 Micro-AB connector |
| 7 | USB 3 Power-B connector |
| 8 | Type C connector - USB2-only |
| 9 (0x9) | (TypeC+Sw)Type C connector - USB2 and SS with Switch |
| 10 | Type C connector - USB2 and SS without Switch |
| 11-254 | Reserved |
| 255 (0xFF) | (Internal)Proprietary connector |
若需要将编号为 5 和 7 的端口改为 USB2.0 接口,则输入以下命令并回车。
1 | # T表示现在要更改端口的类型(Type),0表示端口类型 |
也可直接用plist编辑器打开脚本编辑,一般在用户目录/USBMap/Scripts中。
设置完成后可选择K. Build USBMap.kext或S. Build SSDT-UIAC,其中第一种需把生成的kext复制到Clover的kexts目录下且删除USBInjectAll,而第二种需把生成的SSDT复制到Clover的ACPI/patched下且保留USBInjectAll。推荐第二种。
注意,在按下创建SSDT之前,可以调节SSDT的形式,默认为三个SSDT,可设置为一个SSDT。生成的所有文件都在USBMap/Results中。
通过 SSDT
打开 IORegistryExplorer 并查找 XHC、EHC、EUSB 或 USBE,查看端口情况。
若设备不为XHC/EHC,则需要先在Clover中写入重命名。以设备为XHC1为例,需要change XHC1 to XHC_重命名,即58484331->5848435F。
打开 MaciASL 并新建文件,复制以下代码模版。其中 8086_a12f 需替换为 USB 总线的VendorID_DeviceID,可在关于本机-硬件报告的 USB 一项查看,如 Device ID 为 0xa2af,Vendor ID 为 0x8086,则应当修改为 8086_a2af。
“ports”以下的大括号需填写所有的端口,其中数字 255 表示 Internal,10 表示正反插时端口不同的 USBC,9 表示正反插时端口相同的 USBC,3 表示 USB3,0 表示 USB2。
"port", Buffer() { 0xNN, 0, 0, 0 },中的 0xNN 表示端口地址,可在 IORegistryExplorer 中点击相应端口并查找 Data,查看 port 一项即可。"port-count", Buffer() { 0xNN, 0, 0, 0},中的 0xNN 应当修改为使用的最高 SS 端口地址。
注意,SS 端口的地址开始于最后一个 HS 端口地址之外。因此 HS 地址为0x01,0,0,0的物理 USB 端口将在0x11,0,0,0处具有等效的 SS 端口。
1 | DefinitionBlock ("SSDT-USB.aml", "SSDT", 1, "sample", "USBFix", 0x00003000) |
完成后保存文件为 SSDT_USB.aml,并放置在引导器的 ACPI 部分。重启系统后打开 IORegistryExplorer,检查端口是否正确显示,其中小三角形表示插入的设备。
【进阶】对于ASUS 100系列的处理
该系列主板也可不使用 USBInjectAll,直接使用 SSDT。提取主机 SSDT 并打开包含 xh_rvp 的文件,开头修改为如下。
1 | DefinitionBlock ("SSDT-4", "SSDT", 2, "INTEL", "xh_rvp08", 0x00000000) |
在Name (USSD, Package (0x10)下定义了所有的端口,其中每一行代表一个端口,One 表示启用,Zero 表示禁用。同理,在Name (UHSD, Package (0x10)下,One 表示活动,Zero 表示非活动。
禁用端口需要修改_UPC 的返回值。以 HS11 为例,源代码如下。
1 | Scope (\_SB.PCI0.XHC.RHUB.HS11) |
修改如下。
1 | Scope (\_SB.PCI0.XHC.RHUB.HS11) |
完成后保存SSDT为SSDT-4.aml,放置到Clover的ACPI/patched目录下。Clover需要将该SSDT与当前的SSDT合并,并将修改部分替换,该工作被称为Automerge。在r4428及更新版本,Automerge已被正确设置,在旧版本则需要以文本方式打开config.plist,并添加以下内容。
若放置了 USBInjectAll,则将其删除。
1 | <dict> |
修复唤醒断线
在 Clover 的 kexts 文件夹放入 USBPower.kext,下载链接如下。
1 | https://blog.xjn819.com/wp-content/uploads/2019/10/USBPower.kext_.zip |
在kext上右键选择显示包内容,打开Contents/Info.plist,展开IOKitPersonalities_x86_64,将iMac19,1改成正在使用的机型,保存并重启即可。
修复 USB 导致的关机
下载以下文件,放置到引导器的ACPI/hotpatch部分即可。
1 | https://github.com/khronokernel/Opencore-Vanilla-Desktop-Guide/blob/master/extra-files/FixShutdown-USB-SSDT.dsl |
蓝牙
Atheros
本机蓝牙为与无线网卡 Atheros AR9565 共建的 Bluetooth 4.0。打开以下链接并下载,直接放到 Clover 的 kexts 文件夹即可。
1 | https://github.com/zxystd/AthBluetoothFirmware |
【进阶】OC引导
对于 OpenCore,放置到 Kexts 文件夹后需要在 config.plist 中添加对应条目,注意 Ath3kBTInjector 必须加载在 Ath3kBT 后面。
Intel
可尝试 IntelBluetoothFirmware,支持 10.13 及更高版本。
1 | https://github.com/OpenIntelWireless/IntelBluetoothFirmware |
Broadcom
对于 USB 蓝牙,可尝试 BrcmPatchRAM。
1 | https://github.com/acidanthera/BrcmPatchRAM |
对于 DW1820A,可使用以下 kexts。如果蓝牙睡眠唤醒后无法工作,需要添加引导参数 bpr_probedelay=100、bpr_initialdelay=300、bpr_postresetdelay=300。
1 | # 10.14及以下 |
【进阶】OC引导
对于 OpenCore,kext 注入顺序为 BrcmBluetoothInjector-BrcmFirmwareData-BrcmPatchRAM3。
启用蓝牙关闭按钮
已过时。
找到SLE下的IOBluetoothFamily.kext,复制到桌面后右键单击显示包内容,进入Contents/PlugIns,在BroadcomBluetoothHostControllerUSBTransport.kext上右键单击显示包内容,打开Contents/info.plist。用搜索功能搜索2652,修改idProduct和idVendor为自己的ID,注意需进行进制转换。从Windows上得到的是十六进制,需转换为十进制,可利用下面的进制转换工具。
1 | http://tool.oschina.net/hexconvert/ |
将修改好的 IOBluetoothFamily.kext 用 Kext Utility 进行安装,重启即可。注意,此法可以实现蓝牙关闭,但需要从 Windows 重启进入 Mac 后才可用。
冷启动与热启动
冷启动指从关机状态下进入系统,热启动指从一个系统重启至另一个系统。
少数蓝牙设备中嵌入了蓝牙所需的固件,因此它们开机即可直接使用。但是许多设备依靠固件上载器才能正常运行,此过程中,系统启动蓝牙设备的电源,固件上传器检测到该设备已打开电源,然后将固件发送(上传)到缓冲区中。
由于Mac无法加载相关蓝牙固件,即使设备被正确识别,也无法与任何其他外围设备配对。热启动时,Windows/Linux已完成固件上传,重启时缓冲区固件仍存在,因此蓝牙能够起作用。而冷启动时将重置蓝牙设备,导致上载固件的丢失。
蓝牙无法驱动的替代方案
可通过 Linux 虚拟机完成蓝牙固件上传操作。
从Clover的kexts文件夹删除BrcmPatchRAM.kext和BTFirmwareUploader.kext。以Ubuntu为例,下载镜像后打开Vmware Fusion,新建虚拟机并选择Ubuntu系统,CD/DVD驱动器选择刚才的镜像,完成配置。
关闭虚拟机,切换到虚拟机设置页。选择USB和蓝牙首选项,取消选中与Linux共享蓝牙设备,列表中将出现一个蓝牙设备。返回主界面并点击启动磁盘,选择CD/DVD为启动项,退出设置并启动虚拟机。
镜像引导成功后,选择试用 Ubuntu。待开机完成后,点击虚拟机的蓝牙选项以将蓝牙设备连接至 Ubuntu。等待 4-5 秒钟后取消蓝牙连接,固件已由虚拟机上传完成,蓝牙将正常运行。关闭虚拟机,VMware 将保存计算机状态,只要不让机器进入睡眠或重启状态,就可以使用蓝牙。
如果在睡眠/重新启动后失去了蓝牙功能,重新打开虚拟机,连接再断开蓝牙即可。
也可通过以下 TinyCore 虚拟机,使用方法同 Ubuntu。
1 | https://drive.google.com/file/d/1Ydm7Hd0d5XOKQkb02EMpm-6E-WQFiMkh/view |
传感器
在 Clover 的 kexts 下放入 VirtualSMC 包内的SMCLightSensor.kext、SMCProcessor.kext和SMCSuperIO.kext即可。
电池
【进阶】对于Big Sur
Big Sur 可能已经无须进行以下修补。
环境配置
在 Clover 的 kexts 中放入 VirtualSMC 包的 SMCBatteryManager.kext。打开 Maciasl,若出现错误提示,则检查 Clover 的 config.plist,Acpi-Fixs 下所有选项都应取消勾选。若仍然不行,则换另一个版本的 MaciASL。
修改 DSDT
查找字段
打开 MaciASL,正常情况下自动打开系统的 DSDT。搜索EmbeddedControl。可能会有一到多个,注意包含 EC 字样的那一个,记住其名称,本机为EC0R。
搜索Field ([EC名称],本机为Field (EC0R。查看Field里所有大于8的元素,全部进行记录后,逐个搜索它们的名字。若查找结果只有一处,表明此变量仅被定义但未被使用,因此可以将此字段从记录结果中删除,否则将此字段保留。记录时需注明每个字段的对应位数(16位/32位/大于32位)。
点击Patch,复制下列代码,确认下面 Change(s)处的数字不为零后点击Apply-Close。
1 | # 添加B1B2方法,用于16位字段拆分 |
【拓展】方法原理
对于 B1B2,Arg0 和 Arg1 为拆分后的两个 8 位寄存器。取 Arg0 作为低 8 位,将 Arg1 运用左移运算变成 16 位数据,此时它的的低 8 位全是 0,再运用或运算拼接成完整的 16 位数据。B1B4 同理。
【进阶】其它方法
W16B 方法如下,将拆分后的两个 8 位寄存器 Arg0 和 Arg1 合并后写入到 Arg2。
1 | Method (W16B, 3, NotSerialized) |
16/32位的字段需要拆分成多个8位的字段,而大于32位的字段需要修改其偏移地址。
【提示】注意事项
如果某个寄存器被全局定义过,例如在根路径\或\_SB路径下的 Field 里面有相同名字的寄存器,那么搜索该寄存器被调用情况时应注意区分此处的调用是不是 EC 下的这一个,如果不是,说明此处调用使用的是全局定义,对 EC 没有影响,不需要记录下来。
16/32 位字段处理
对于16/32位的字段,需要拆分成2/4个8位字段。
以HWAK, 16为例。这是个 16 位的字段,可以拆分成两个 8 位的字段,分别命名为AK00和AK01。命名可以随意,但是要确保命名为 4 个字符,且这个命名没有出现过,如下。
1 | # 拆分前 |
然后需要写出以下类似正则表达式的代码,以替换 DSDT 里的字段。
1 | into device label EC code_regex HWAK,\s+16, replace_matched begin AK00,8,AK01,8, end; |
相关含义解释如下,内容均根据自己的 DSDT 代码替换。
| 内容 | 含义 |
|---|---|
| EC | 搜索EmbeddedControl,在其上方的Device(不是Field里的参数) |
| HWAK,\s+16, | 拆分前的字段(\s+表示多个空格,故此句含义为搜索HWAK, 16,) |
| AK00,8,AK01,8, | 拆分后的字段 |
把写好的正则表达式复制到Patch里,在中间的Before/After和下面的Patch/Change两个地方都显示内容后,点击Apply-Close即完成一个变量的替换。
再以SBCH, 32为例。
1 | # 拆分前 |
正则表达式如下。
1 | into device label EC code_regex SBCH,\s+32 replace_matched begin CH00,8,CH01,8,CH02,8,CH03,8 end; |
注意,所替换的AK00,8,AK01,8,逗号前后均无空格。若所替换的字段为列表中的最后一个,则 Patch 时会提示 0 change(s),此时应该把正则表达式中的XSN1,\s+16,改为XSN1,\s+16,因最后一个字段没有逗号。
点击 Compile,此时会出现报错,除 Errors 以外的不需要理会。对于报错内容为 Object does not exist 的情况,主要是替换字段名后,没有替换访问该字段的位置所导致。
双击报错信息以定位至错误位置,向上检索以找到该段代码包含在哪个 method 里。
对于 16 位的字段,使用下面的正则表达式。
1 | into method label \_WAK code_regex \(HWAK, replaceall_matched begin (B1B2(AK00,AK01), end; |
相关含义解释如下,内容均根据自己的 DSDT 代码替换。注意,名字首位为_时,需要手动添加起始符\,如_WAK应写为\_WAK。
| 内容 | 含义 |
|---|---|
\_WAK |
代码对应的method |
\(HWAK, |
替换前的字段 |
| (B1B2(AK00,AK01), | 替换后的字段 |
对于 32 位的字段则使用下列表达式。
1 | into method label GBIF code_regex \(SBCH, replaceall_matched begin (B1B4(CH00,CH01,CH02,CH03), end; |
若出现\_SB.PCI0.LPC.EC.HWAK调用的特殊情况,修改替换字段即可。
1 | into method label \_WAK code_regex \(\\\_SB.PCI0.LPC.EC.HWAK replaceall_matched begin \(\\_SB.B1B2(\\_SB.PCI0.LPC.EC.AK00, \\_SB.PCI0.LPC.EC.AK01) end; |
【进阶】16/32位寄存器拆分读取/写入
修改 16 位寄存器拆分读取的语法如下,其中 Arg0、Arg1 为拆分后的两个 8 位寄存器名称。
1 | B1B2 (Arg0, Arg1) |
示例如下。
1 | # 修改前 |
修改 16 位寄存器拆分写入的语法如下,其中 Arg0、Arg1 为拆分后的两个 8 位寄存器名称,Arg2 为被写入的数值或数据对象。
1 | W16B (Arg0, Arg1,Arg2) |
示例如下。
1 | # 修改前 |
修改 32 位寄存器拆分读取的语法如下,其中 Arg0、Arg1、Arg2、Arg3 为拆分后的四个 8 位寄存器名称。
1 | B1B4 (Arg0, Arg1, Arg2, Arg3) |
示例如下。
1 | # 修改前 |
修改 32 位寄存器读取的语法如下,其中 Offset 为原寄存器的偏移量,Length 为原寄存器的长度。
1 | RECB (Offset, Length) |
示例如下。
1 | # 原始定义 |
修改 32 位以上寄存器写入的语法如下,其中 Offset 为原寄存器的偏移量,Length 为原寄存器的长度,Obj 为被写入的值或者数据对象。
1 | WECB (Offset, Length, Obj) |
示例如下。
1 | # 原始定义 |
超过 32 位字段处理
先 Patch 下面的两段代码,其中 H_EC 改成计算机的 Device。
1 | // 改的字段挨着左括号时所用代码(读操作) |
【拓展】方法原理
对于左括号的代码如下。对于 RECB,Arg0 是原寄存器的偏移量(即 Offset),Arg1 是原寄存器的长度。对于 RE1B,Arg0 是偏移量。
RECB 通过 Arg1 确定需要拆分的 8 位寄存器个数,通过 While 循环及偏移量自增方法调用 RE1B 从 Field 中循环读取出每个 8 位数据,并拼接成原始寄存器定义长度的数据返回结果。
1 | Method (RE1B, 1, NotSerialized) |
对于右括号的代码如下。对于 WECB,Arg0 是原寄存器的偏移量(即 Offset),Arg1 是原寄存器的长度,Arg2 为被写入的数据或对象。对于 WE1B,Arg0 是偏移量,Arg1 为从 Buffer 取出的一个字节数据(即 8 位长度数据)。
WECB 通过 Arg1 确定需要拆分的 8 位寄存器个数,创建 Buffer 对象将 Arg2 转化为若干个字节的数据(一个字节等于 8 位),通过 While 循环以及偏移量自增方法调用 WE1B,向 Field 中循环写入每个 8 位数据。
1 | Method (WE1B, 2, NotSerialized) |
有些笔记本的 EC 使用 SystemMemory 作用域,则 EC、RE1B 和 WE1B 的 Field 起始偏移量也需要加上原始定义数值,可参照如下所示代码进行修改。
1 | Scope (_SB.PCI0.LPCB.EC0) |
计算大于 32 位字段的偏移量,逢八进一,从起始值往下算。以下面的代码为例子。
1 | Offset (0x04), |
搜索DSDT中该字段被调用的地方。不同于16/32位字段的处理,超过32位的字段只需用偏移量和该字段位数代替字段本身。
若所替换字段挨着左括号,需要使用 RECB,即处理读操作。以Store(MBMN, XXXX) 改为Store(RECB(0x1A, 80), XXXX)为例,利用下列正则表达式进行替换,Patch 即可。
1 | into method label XXXX code_regex \(SBMN, replaceall_matched begin (RECB(0xA0,128), end; |
相关含义解释如下,内容均根据自己的 DSDT 代码替换。
| 内容 | 含义 |
|---|---|
| XXXX | 代码对应的method |
\(SBMN, |
替换前的字段 |
| (RECB(0xA0,128), | 替换后的字段,其中0xA0为所计算出来的偏移量,128为位数 |
若所替换字段挨着右括号,需要使用 WECB,即处理写操作。以Store (Arg3, \_SB.PCI0.LPCB.EC0.SMD0)改为Store (Arg3, \_SB.PCI0.LPCB.EC0.WECB(0x1C,264,Arg3)为例,则利用下列正则表达式进行替换。
1 | into method label SMRW code_regex Store\s\(Arg3,\s\\_SB.PCI0.LPCB.EC0.SMD0\) replaceall_matched begin \\_SB.PCI0.LPCB.EC0.WECB(0x1C,264,Arg3) end; |
应用修改
再次点击Compile,确认无Error后,点击菜单File-Save As,类型选ACPI Machine Language Binary,名称为DSDT.aml。保存后复制到CLOVER/ACPI/patched,重启即可。
说明
正则表达式写法
16 位和 32 位的区别在于,16 位会调用 B1B2 方法,而 32 位会调用 B1B4 方法。因此正则表达式的基本格式如下。
1 | // 16位字段 |
补丁结构
将前面所有 Patch 过的代码放到一起,即称为本机的电量补丁,示例如下。
注意,前面所有通过正则表达式的操作,其实可以直接在原文件上修改,而不必通过 Patch 的方式。通过 Patch 方式主要是便于补丁整合与传播。
1 | // 字段拆分 |
Mutex 置零检查及修复
检查
有些机器的 Mutex(互斥体,用于处理多线程同步)对象的 SyncLevel(同步等级)不为 0,这种情况下 macOS 无法正常执行多线程同步,造成的结果是电池状态等可能无法获取(如果电池相关的 Method 处于不同的同步等级,在 macOS 下会造成数据获取的异常,出现 0%的情况),此时应打上 Mutex 置 0 补丁来解决。
绝大多数笔记本 ACPI 的 Mutex 都是默认置 0 的,但是一些联想品牌的笔记本往往有几个 Mutex 的 SyncLevel 并不是 0。因此,在完成电池补丁后应检查 Mutex 是否属于这种情况。
在 DSDT 中搜索 Mutex,看出现的几个对象的 SyncLevel 是否为 0 即可。
修复
可通过 ACPI 更名的方式。以 Mutex (BATM, 0x07)为例,先转换 BATM 为十六进制代码,得到 42 41 54 4D。在前后加上完整定义的十六进制代码,最终得到 01 42 41 54 4D 07,其中 01 代表 Mutex,07 代表 SyncLevel 的 0x07。目的是使 Mutex 对象置 0,因此更名如下。
1 | Comment: Set Mutex BATM, 0x07 to 0x0 |
也可通过 Fix Mutex with non-zero SyncLevel 补丁。打开 MaciASL,点击 Patch,在左侧资源树中选择_RehabMan Laptop-[sys]Fix Mutex with non-zero SyncLevel,点击 Apply-Close 即可。
若没有该资源,则需要在偏好设置中添加补丁来源。常见补丁来源如下。
1 | # _RehabMan Laptop |
充电/放电状态的逻辑错误
某些华硕笔记本电脑的 DSDT 存在逻辑错误,容量达到 100%(电池充满电)时,_BST 返回错误的状态。使用以下补丁程序即可。
1 | into method label FBST code_regex If\s\(CHGS\s\(Zero\)\)[\s]+\{[\s]+Store\s\(0x02,\sLocal0\)[\s]+\}[\s]+Else[\s]+\{[\s]+Store\s\(One,\sLocal0\)[\s]+\} replaceall_matched begin |
触控板
以下的所有操作对软件版本均有要求。MaciASL 需为 RehabMan 编译版,IORegistryExplorer 需为 2.1 版本。
判断触控板类型
在 Windows 下打开设备管理器,若在人体学输入设备下存在 I2C HID 设备,则一般为 I2C HID 触摸板。查看触摸板设备的属性,若显示位置是在 I2C HID 设备 上,则得证。否则触控板一般为 PS2 类型。
PS2 触控板
用 VoodooPS2Controller.kext 驱动即可。
I2C 触控板
记录 IRQ
在 Windows 下打开设备管理器,在I2C HID 设备上右键选择属性,点击详细信息,选择位置路径并记录。然后切换到资源选项卡,记录 IRQ 后面的数字,该数字代表的是 APIC Pin。本机示例如下。
1 | # IRQ |
也可在 Mac 下查看 APIC Pin。打开 IORegistryExplorer,右上角搜索触控板 BIOS 名称,本机即为 ETPD,在详细页中记录 IOInterruptSpecifiers 的值即可。
确定工作原理
I2C 触控板均用 VoodooI2C 驱动,支持轮询模式或中断模式。
轮询模式是Voodoo的安全模式,每隔一个特定的时间扫描一次触摸板的状态,然后改变鼠标指针坐标。中断模式是触摸板在Windows/Linux等其他系统的正常工作方式。
在 DSDT 中定义如下。
| 定义 | 含义 | 适用范围 | 效率 | 驱动难度 |
|---|---|---|---|---|
| APIC中断 | 使用APIC控制器 | 无IOInterruptSpecifier,或APIC Pin<2F | 最高 | 能否以该模式驱动由硬件决定 |
| GPIO中断 | DSDT在SBFG中存在有效GPIO Pin,CRS方法中返回(SBFB,SBFG),并应用启用GPIO控制器的补丁 | 有IOInterruptSpecifier且APIC Pin>2F | 较高 | 较难 |
| 轮询 | CRS方法中只返回SBFB或者(SBFB,SBFI) | / | 较低 | 较易 |
也就是说,对于原始 DSDT,以 APIC Pin 为判断依据,若小于 2F 则默认使用 APIC 中断,若大于 2F 则默认使用 GPIO 控制器。但由于 GPIO 控制器默认不工作,因此系统会采用轮询模式,如下图所示。

【进阶】DSDT中的相关代码
找到触摸板的相关代码后,查看 SBFI 方法,该方法用于实现 APIC 中断。该方法中的数值即为 APIC Pin,当 APIC Pin 大于 2F 时,可判断为轮询模式。
1 | Name (SBFI, ResourceTemplate () |
查看 SBFB 方法,该方法可被轮询或中断调用。部分 DSDT 中不含 SBFB 而含 I2CM,两者基本一致,I2CM 相比 SBFB 具有更多的内容。
1 | Name (SBFB, ResourceTemplate () |
查看 SBFG 方法,该方法中的数值即为 GpioInt,用于中断处理。
1 | Name (SBFG, ResourceTemplate () |
轮询模式驱动
下载 VoodooI2C,按照以下规则将驱动放入 Clover 的 kexts 中(一个核心驱动+一个目标驱动)并重启。
1 | # 必放核心驱动 |
对于小部分机型(如华硕笔记本),触控板已被驱动。若未被驱动,则需要对 DSDT 应用Windows 补丁,根据出厂时随附的操作系统应用对应的补丁,一般用 Windows 10 Patch。
【非必要不使用】操作系统补丁
以下方法选择一种即可。
DSDT 修改法如下。
打开MaciASL,保证有VoodooI2C的补丁源。点击Patch,选择VoodooI2C下的Windows 10 Patch补丁,Apply-Close后保存DSDT,并将新的DSDT放入Clover文件夹的ACPI/patched下即可。
若 MaciASL 无法加载出补丁源,可直接在 Patch 界面复制以下代码内容。根据操作系统自行选择。
1 | # Windows 10 DSDT Patch for VoodooI2C |
SSDT 热补丁法如下。
打开 MaciASL,新建文件并复制以下内容,保存为 SSDT-XOSI.aml。
1 | DefinitionBlock ("", "SSDT", 2, "DRTNIA", "XOSI", 0x00001000) |
将SSDT-XOSI.aml放置在Clover文件夹的ACPI/patched目录下,然后在config.plist下添加以下改名补丁即可。
1 | Comment: change _OSI to XOSI |
中断模式驱动
查看 APIC Pin 值
不放置 VoodooI2C 驱动,并应用 Windows 补丁。打开 IORegistryExplorer,搜索前面保存的 BIOS 设备名称,然后定位到IOInterruptSpecifiers,最前面的两位数即为APIC Pin值。
若无 IOInterruptSpecifiers 项或 APIC Pin 值不大于2F,则直接跳到安装步骤,否则继续下列步骤。
移除 APIC 中断控制器
用 MaciASL 打开设备的 DSDT,搜索BIOS 设备名称(此处为 ETPD),定位到触控板设备的代码块下。注意,以下操作全部在触控板设备的代码块下进行,请勿跳到其他设备下的代码操作。
在触控板设备的代码块下寻找类似以下的代码。
1 | Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings |
在此段代码中,需将SBFI改为SBFB,并删除以下内容。
1 | Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, ,, ) |
以上面代码为例,修改后变为如下。
1 | Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings |
确定触控板固定类型
在触控板的 DSDT 下寻找以下代码块。
1 | Name (SBFG, ResourceTemplate () |
若此段代码出现在设备的根目录,则称为触控板设备已经root 固定。若出现在 CRS 方法中,则称为触控板设备已经CRS 固定。如果 Pin list 对应非零值,称为well-root 固定和well-CRS 固定。若此段代码未出现,则称为触控板设备未固定。
若未固定,则先将以上代码段复制到设备根目录下,示例如下。复制完成后跳到 GPIO 固定步骤。
1 | Scope (_SB.PCI0.I2C0) |
若为 root 固定或 CRS 固定,需在触控板代码块下查找_CRS方法,并确定以下代码是否存在。若存在,则证明设备已固定好,可直接跳到安装步骤,否则需继续 GPIO 固定步骤。
1 | Return (ConcatenateResTemplate (SBFB, SBFG)) |
若为 well-root 固定或 well-CRS 固定,则直接跳到安装步骤。
GPIO 固定
定位到代码块的_CRS 方法,删除此方法的 Return 语句并用以下 Return 语句替换,以确保 DSDT 通知系统设备已固定好 GPIO。
1 | Return (ConcatenateResTemplate (SBFB, SBFG)) |
驱动安装
驱动的安装包括驱动放置、禁用系统驱动、应用补丁,其中放置驱动操作与轮询模式完全一致。对于系统驱动,需禁用 AppleIntelLpssI2C.kext 和 AppleIntelLpssI2CController.kext,方法见说明。应用补丁需应用 Windows 补丁和 GPIO 补丁。
Windows 补丁的应用与轮询模式完全一致,GPIO 补丁的应用提供以下两种形式。
热补丁法应用 GPIO 补丁
在OC-little包中取SSDT-GPIO.aml并放置在Clover文件夹的ACPI/patched目录下,然后在config.plist下添加以下改名补丁即可。注意,在补丁无效时,可尝试删除Tgtbridge值。
1 | Comment: change _STA to XSTA in GPI0 |
DSDT 修改法应用 GPIO 补丁
在MaciASL下点击Patch,选择VoodooI2C下的GPIO Controller和SKL I2C Controller补丁,Apply-Close后保存DSDT,并将新的DSDT放入Clover文件夹的ACPI/patched下即可。
若 MaciASL 无法加载出补丁源,可直接在 Patch 界面复制以下代码内容。
1 | // GPI0 Controller |
确认驱动情况
所有步骤完成后重启。若触控板未驱动或开机卡 Busy timeout,则考虑更换不同的 Pin list 值。
对于本机而言,APIC Pin 值为 0x6D。
特殊处理
华硕笔记本
华硕笔记本的 DSDT 会有一个 TPD0 设备,该设备具有 GPIO 中断的模板,但并不是真实的设备。应当修补 ETPD 设备。
三星笔记本
使用轮询模式驱动时,需在应用补丁的同时在 DSDT 的以下代码中删除If (_OSI ("Windows 2012")) {及对应的},如下。
1 | If (_OSI ("Windows 2012")) |
若仍未解决,则在 DSDT 中进入设备 SPTP 的_INI 方法,搜索以下代码并将其内容更改为SHPO (Local0, One),如下。
1 | If (LEqual (SDM0, Zero)) |
其它
对于Thinkpad T480s/L380/P52的I2C-I801设备,为ELAN触控板,可用VoodooSMBus,适用于10.14及以上系统。
1 | https://github.com/VoodooSMBus/VoodooSMBus |
对于Synaptic的I2C HID/SMBus触控板,可用VoodooRMI,适用于10.11及以上系统。
1 | https://github.com/VoodooSMBus/VoodooRMI |
对于 Alps T4 USB 触摸板,可用 AlpsT4USB。
1 | https://github.com/blankmac/AlpsT4USB |
TouchID
笔记本的指纹传感器一般都无法被驱动。但由于 SMBIOS 设置的机型具有 TouchID,因此在输入密码或进行认证时,系统会等待指纹的反馈,导致键盘输入卡顿。
在 Clover 的 kexts 文件夹下放置NoTouchID.kext,重启后即可修复。
1 | https://github.com/al3xtjames/NoTouchID/releases |
SMBIOS 与三码设置
正确设置SMBIOS并注入正确的三码,可开启HWP功能,并正常登录iCloud等苹果服务。系统的SMBIOS支持列表可在安装盘的/System/Library/CoreServices/PlatformSupport.plist查看。
选择
选择 SMBIOS 应考虑 CPU 类型、GPU 类型、操作系统支持、USB 设备等。一般而言,应当先尽可能找到合适的 CPU,然后选择仅 iGPU 或仅 dGPU 的 SMBIOS,最后决定其它因素。
CPU
SMBIOS 的 CPU 决定了是否能使用 XCPM 进行电源管理修复,以及能否开启 HWP。XCPM 支持的 SMBIOS 如下。
1 | MacBook8,1+ |
打开终端并输入以下命令以查询支持 HWP 的机型,在输出内容中选择台式机机型或笔记本机型。注意需挑选带 HWP 字样的机型,且尽可能选最新的机型,2017 年及以后机型支持 Sidebar 功能。若机型为 Unknown,可用搜索引擎搜索其代码以确认机型。
1 | cd /tmp && curl -s https://raw.githubusercontent.com/Piker-Alpha/freqVectorsEdit.sh/master/freqVectorsEdit.sh > /tmp/freqVectorsEdit.sh && chmod +x freqVectorsEdit.sh && /tmp/freqVectorsEdit.sh && sudo rm -rf /tmp/freqVectorsEdit.sh && sudo rm -rf /tmp/Mac-*.bin |
GPU
Mac Mini 为移动端硬件,与台式机硬件不匹配。
由于 Apple 总是假设当 SMBIOS 存在 dGPU 时,所有显示输出都将通过 dGPU 路由,因此若 Optimus 笔记本电脑的外部显示器通过 iGPU 连接,将可能出现黑屏问题。
对于没有 iGPU 的 CPU,若 SMBIOS 需要 iGPU(如 iMac),则 Quicklook 等功能将被破坏。可使用 iMac Pro 或 Mac Pro 替代 iMac。
iMacPro1,1 和 MacPro7,1 是仅有的 2 个允许 dGPU 处理所有工作负载的 SMBIOS,需要 Polaris、Vega 或 Navi GPU。
iMac20,2 仅适用于 Apple 的定制 i9-10910 CPU。
除非运行没有内置显示器的移动硬件,否则应避免使用 MacMini SMBIOS,除了 Intel NUC。
操作系统支持
Mac 可能仍然支持 CPU,但不再支持那个时代的 SMBIOS。如 Arrandale,但在 10.13.6 之后没有 iGPU 支持。
配置
在进行之前通过以下命令清除旧配置。
1 | bash |
正常登录 iCloud 等苹果服务,需本机的 NVRAM 正常工作。部分主板需 Clover 的 Drivers64UEFI 文件夹中有EmuVariableUefi-64.efi才可使 NVRAM 正常工作。
打开 Clover 的 config.plist,选择左侧 SMBIOS,使用右侧上下箭头选择上面所确定的机型。也可通过 GenSMBIOS 生成 SMBIOS。
1 | https://github.com/corpnewt/GenSMBIOS |
前往以下网站(需要翻墙环境),复制 Clover 中的 Serial Number 到文本框进行查询。若出现具体机型,则说明此序列号可用。若提示无效,则此序列码不可使用,需点击 Generate New 生成新的 Serial Number。
1 | https://everymac.com/ultimate-mac-lookup/ |
前往以下 Apple 官网查询序列号。如果显示有购买日期和机型等保修信息,则此序列码不可使用,需返回 Clover 生成新的 Serial Number。直到出现提示很抱歉,这个序列号无效。请检查您的信息并再试一次,则可使用。
1 | https://checkcoverage.apple.com/cn/zh |
点击左侧 System Parameters,生成一个 UUID,系统生成或随机生成都可以,并勾选 Inject System ID。复制生成的 UUID 到 SMBIOS 的 SmUUID 里,复制 SMBIOS 里的 Board Serial Numbe 到 Rt VariablesMLB 里。点击获取 ROM,确保下方三码正常匹配,退出并重启。
重启后打开 Hackintool,转到工具选项卡,点击 Intel 图标,在工具输出中查看 enableHWP 的值,若为 1 则已成功开启 HWP。同时,iCloud、iMassage、FaceTime 应已可正常登录。
若出现问题,可打开 iMessageDebug 提取 Mac 的三码,查看 MLB 和 ROM 是否正常显示。若为 Failed,则应在 Clover 中加上 EmuVariableUefi-64.efi。若正常显示,可把结果保存,重启电脑后再打开 iMessageDebug,若两次结果一致,则黑苹果已成功洗白。
CPU 与电源管理
【进阶】Power Management State
通常为 0。X86PlatformPlugin.kext 能读取的已知 bit 如下。
| bit | 含义 | 说明 |
|---|---|---|
| 0x00000001 | PWROK事件导致关机 | 与GEN_PMCON_2 bit 0含义相同 |
| 0x00000002 | SYS_PWROK事件导致关机 | 与GEN_PMCON_2 bit 1含义相同 |
| 0x00000004 | THRMTRIP#事件导致关机 | 与GEN_PMCON_2 bit 3含义相同 |
| 0x00000008 | SYS_RESET#事件导致重启 | 与GEN_PMCON_2 bit 4含义相同 |
| 0x00000010 | 电源失败 | 与GEN_PMCON_3 bit 1 PWR_FLR含义相同 |
| 0x00000020 | RTC电源丢失 | 与GEN_PMCON_3 bit 2 RTC_PWR_STS含义相同 |
| 0x00000040 | 一般重置状态 | 与GEN_PMCON_3 bit 9 GEN_RST_STS含义相同 |
| 0xffffff80 | SUS电源丢失 | 与GEN_PMCON_3 bit 14含义相同 |
| 0x00010000 | ME唤醒事件导致唤醒 | 与PRSTS bit 0 ME_WAKE_STS含义相同 |
| 0x00020000 | ME引发事件导致冷重启 | 与PRSTS bit 1 ME_HRST_COLD_STS含义相同 |
| 0x00040000 | ME引发事件导致热重启 | 与PRSTS bit 2 ME_HRST_WARM_STS含义相同 |
| 0x00080000 | ME引发事件导致关机 | 与PRSTS bit 3 ME_HOST_PWRDN含义相同 |
| 0x00100000 | 全局重置Watchdog计时器事件 | 与PRSTS bit 6含义相同 |
| 0x00200000 | 全局重置电源管理Watchdog计时器事件 | 与PRSTS bit 15含义相同 |
原生电源管理
正常休眠需要启用原生电源管理,未启用时无法正确休眠。
启用
对于Haswell和更新的消费级Sandy/Ivy Bridge,可通过启用XCPM内核的方式实现启用原生电源管理。打开IORegistryExplorer并查找AppleACPICPU,若其下附有X86PlatformPlugin,证明原生电源管理已经启用。
由于 Sierra 放弃了对 Ivy Bridge 和 Ivy Bridge-E 的 XCPM 支持,因此 XCPM 方法仅在 10.8.5-10.11.6 之间受支持。较新的操作系统将需要 ssdtPRgen 方法。
确保在 BIOS 下开启以下设置。
| 选项 | 设置 |
|---|---|
| C States | True |
| P States Coordination | SW_ALL |
【注意】AMD CPU
对于 AMD CPU,可使用 SMCAMDProcessor,链接如下。注意需要在 VirtualSMC 之后加载。
1 | https://github.com/trulyspinach/SMCAMDProcessor |
通过 XCPM
【注意】旧版操作系统
要在较旧的操作系统(10.11 及更早版本)中启用 XCPM,只需在引导参数添加-xcpm,无需进行以下操作。
打开MaciASL,复制以下链接下的内容,另存为SSDT-PLUG.aml,并放置到Clover的ACPI/patched下即可。
1 | https://github.com/acidanthera/OpenCorePkg/blob/master/Docs/AcpiSamples/Source/SSDT-PLUG.dsl |
也可对以上 SSDT 进行清理。在 DSDT 中搜索 Processor,查看第一个处理器的名称。以SB.PR00为例,在 SSDT 中删除除 SB.PR00 意外以外的条目即可,最后应保留一个 External、一个 Method、一个 If。
【旧版】Haswell-E和Broadwell-E
XCPM 不支持 Haswell-E 和 Broadwell-E,但可通过设置 Fake CPUID 的方式实现。
对于 OpenCore,在 Kernel-Emulate 使用以下补丁。
1 | # Haswell-E |
通过 ssdtPRgen
在 Sandy Bridge 和 Ivy Bridge 采用新版系统(10.8.2 及以上)时使用。也可用于 Core 2、Haswell、Nehalem 或 Westmere。
对于Haswell,需要将SMBIOS设置为iMac14,x/MacBookAir6,x/MacBookPro11,x。对于Core 2,需要将SMBIOS设置为MacPro3,1。对于Nehalem或Westmere,需要将SMBIOS设置为iMac11,x/MacBookPro6,x/MacPro5,1。对于Sandy Bridge,需要将SMBIOS设置为iMac12,x/MacMini5,x/MacBookPro8,x。对于Ivy Bridge,需要将SMBIOS设置为iMac13,x/MacMini6,x/MacBookPro9,x/MacBookPro10,x。
以 OpenCore 为例,在配置文件的 ACPI-Delete 添加以下配置,以暂时删除 CpuPm 和 Cpu0Ist 表。
| Key | Type | Value |
|---|---|---|
| All | Boolean | YES |
| Comment | String | Drop CpuPm |
| Enabled | Boolean | YES |
| OemTableId | Data | 437075506d000000 |
| TableLength | Number | 0 |
| TableSignature | Data | 53534454 |
| Key | Type | Value |
|---|---|---|
| All | Boolean | YES |
| Comment | String | Drop Cpu0Ist |
| Enabled | Boolean | YES |
| OemTableId | Data | 4370753049737400 |
| TableLength | Number | 0 |
| TableSignature | Data | 53534454 |
重启后使用 ssdtPRGen.sh 脚本,命令如下。
1 | cd ~ |
脚本仓库如下。
1 | https://github.com/Piker-Alpha/ssdtPRGen.sh |
完成后得到 ssdt.aml,复制到引导器的 ACPI 目录并重命名为 SSDT-PM.aml。重启后将以上添加的两个条目禁用即可。
【注意】对于三代/HD4000,无Ivy Bridge电源管理的处理
应使用 Sandy Bridge 的 SMBIOS,运行 Sandy Bridge 电源管理。
可忽略IOPlatformPluginUtil : getCPUIDInfo: this is an unknown CPU model 0x3a错误消息。
若出现ACPI Error: Method parse/execution failed [\_SB._INI] , AE_ALREADY_EXIST错误,则需要修改SSDT格式,如下。主要修改为将Processor物体移至外置,且将所有方法移至CPU设备之内。
1 | DefinitionBlock ("ssdt.aml", "SSDT", 1, "APPLE ", "CpuPm", 0x00021500) |
然后使用 ssdtPRGen.sh 脚本,同上。
对于 Haswell 以前,可在 Clover 配置文件设置 KernelAndKextPatches-AppleIntelCPUPM=true。有可能需要删除 OEM 表,即设置 ACPI-SSDT-DropOem=true,非必要不使用。
对于 Haswell 及以后,可在 Clover 的配置文件中设置 ACPI-SSDT-Generate-PluginType=true,以及 KernelAndKextPatches-KernelLapic=true。也可使用 OC-Little 中的 X86 注入,链接如下。
1 | https://github.com/daliansky/OC-little/tree/master/05-%E6%B3%A8%E5%85%A5%E8%AE%BE%E5%A4%87/05-1-%E6%B3%A8%E5%85%A5X86 |
对于 AMD Radeon 笔记本,可能需要删除 MCFG 表,通过 Clover 配置文件的 ACPI-DropTables 即可。
【进阶】OC对于Haswell + low-end的电源管理XCPM补丁
需要使用以下 CPUID 补丁以仿冒为 Ivy Bridge。
1 | Cpuid1Data: <A9 06 03 00 00 00 00 00 00 00 00 00 00 00 00 00> |
对于 10.11 及更早版本,再在启动参数添加-xcpm即可。对于 10.12 及更高版本,则根据 CPU 类型选用以下补丁。
1 | # 通用AVX补丁,均需使用 |
完成后还可使用性能修复补丁,注意非必要不使用。
1 | # XCPM performance fix (10.8.5 - 10.13.3) |
变频
基本知识
LFM
即 Low Frequency Mode,表示空闲时的最低值。LFM 值仅适用于 Broadwell 和更新的 SMBIOS。
可通过以下网站查看 TDP-down Frequency 以确定。
1 | https://ark.intel.com/content/www/us/en/ark.html |
也可使用以下值。
| CPU次代 | LFM值 | 说明 |
|---|---|---|
| Broadwell+ Laptops | 08 | 相当于800Mhz |
| Broadwell+ Desktops | 0A | 相当于1000Mhz |
| Haswell/Broadwell HEDT/Server(如X99) | 0D | 相当于1300Mhz |
| Skylake+ HEDT/Server(如X299) | 0C | 相当于1200Mhz |
EPP
即 Energy Performance Preference,表示将 CPU 加速到其完整时钟的速度。EPP 值仅适用于 Skylake 和更新的 SMBIOS。
00 表示最快,FF 表示最慢。设置列表如下。
| EPP | 说明 |
|---|---|
| 0x00-0x3F | 最大性能 |
| 0x40-0x7F | 平衡性能 |
| 0x80-0xBF | 平衡省电 |
| 0xC0-0xFF | 最大省电 |
Perf-Bias
即 Performance Bias,确定 CPU 的期望整体性能。
通过 CPUFriendFriend
下载以下包,解压后运行 CPUFriendFriend.command。运行完成后将获得 CPUFriendDataProvider.kext 和 ssdt_data.aml,二者选其一放置即可。
建议放置CPUFriendDataProvider.kext。若放置ssdt_data.aml,则不再需要SSDT-PLUG。但此SSDT的设置在X99/X299等HEDT平台上已损坏。
1 | https://github.com/corpnewt/CPUFriendFriend |
【进阶】CPUFriend的注意事项
在 OpenCore 中无需考虑 CPUFriendDataProvider 的注入顺序,因为它仅为一个 plist-only kext。
CPUFriend 导致的唤醒问题可能是由于不正确的频率设置,需要修改生成配置以达到稳定效果。该问题主要表现为出现Sleep Wake failure in efi的 panic。
通过 one-key-cpufriend
不推荐,会创建不良频率向量。
在终端下输入以下命令以执行一键 CPU 变频脚本。
1 | bash -c "$(curl -fsSL https://raw.githubusercontent.com/stevezhengshiqi/one-key-cpufriend/master/one-key-cpufriend_cn.sh)" |
完成后把桌面的 CPUFriend.kext 和 CPUFriendDataProvider.kext 放到 Clover 的 kexts 中即可。
通过 kexts
放置 CPUFriend.kext 即可。
1 | https://github.com/acidanthera/CPUFriend |
锁频
通过 Clover
打开 Clover 的配置文件,进入 Cpu,开启 HWPEnable 和 UseARTFrequency,并修改 HWPValue 为频率值,如 i5 10400 可设为 002B2B2B,其中 2B 化为十进制为 43,即 4.3GHz,保存即可。
HWPValue 即为 CPU 的 IA32_HWP_REQUEST 寄存器,以 002B2B2B 为例说明如下。
| 位置 | 说明 |
|---|---|
| 00 | 00代表高性能,94代表节能 |
| 2B | |
| 2B | 最高频率(十六进制) |
| 2B | 最低频率(十六进制) |
通过 kexts
下载HWPEnable.kext,修改HWPEnabler.kext/Contents/Info.plist中的HWPDeaultVal为频率值,同上。修改完成后放置到引导器即可。
硬盘配置
不支持三星PM981/PM991、Micron 2200S、Intel 660p以及任何基于eMMC的硬盘。
Samsung 970 EVO Plus NVMe SSD 可通过固件更新修复相关问题。
对于所有 NVMe SSD,建议使用以下 kext 修复功率和能耗。
1 | https://github.com/acidanthera/NVMeFix |
SSD 开启 TRIM
在终端输入以下命令以打开 TRIM。
1 | sudo trimforce enable |
若执行后 TRIM 仍未开启,则需要通过 Clover 打 kext 补丁。打开 Clover 的 config.plist,选择 Kernel and Kext Pathches-Kext Pathches,添加以下补丁。
1 | Name*: IOAHCIBlockStorage |
屏蔽三星 PM981 NVMe SSD
PM981 可能会引起系统死机。放置以下 SSDT 即可。
1 | DefinitionBlock ("", "SSDT", 2, "hack", "NVMe-Pcc", 0x00000000) |
睡眠相关
打开
在终端输入以下命令,可打开 Clover 为黑苹果修补的休眠功能。
1 | sudo pmset -a hibernatemode 29(或21) |
在 Clover 的 kexts 文件夹放置 HibernationFixup.kext,并在启动参数中加-hbfxbeta,即可实现 hibernatemode 3 休眠,下载链接如下。
1 | https://github.com/acidanthera/HibernationFixup |
关闭
黑苹果不支持挂起到磁盘的休眠或 S4 睡眠。
首先需要打开 Clover 配置文件,将 NeverHibernate 设置为 true,并添加启动参数swd_panic=1,以避免进入睡眠后重启的问题,并给出相应的 panic 日志。然后在终端输入以下命令以禁止。
【进阶】对于OpenCore
还需在配置文件中设置 Misc-Boot-HibernateMode 为 None,以避免 S4 睡眠。
1 | # 设置睡眠模式为3 |
以上终端操作也可由 Hackintool 完成。在 Hackintool 里切换到电源选项卡,点击最下方的齿轮按钮即可。
修复
若睡眠后无法唤醒,如合盖后系统死机,则可能是设备不正确导致。因为当设备收到 S3 调用(或 S0 用于唤醒)时,驱动程序需要关闭设备电源并进入低状态模式(唤醒时反之亦然)。当此类设备不与驱动程序配合,就会出现问题。
首先需要关闭睡眠,放置 HibernationFixup,并按以下配置 BIOS。
| 选项 | 配置 | 说明 |
|---|---|---|
| Wake on LAN | Disabled | |
| Trusted Platform Module | Disabled | 若在Windows中使用BitLocker,禁用此功能将导致所有加密密钥丢失 |
| Wake on USB | Disabled | 大多数主板会通过该功能执行随机唤醒 |
| Wake on Bluetooth | Disabled | 需要使用蓝牙设备唤醒(如键盘)则可开启 |
设置 Clover 配置文件的 FixDSDTMask=0x30DF 可能会解决问题。
网卡检查
检查系统是否有两个有线网卡,一般为 NullEthernet 与有线网卡驱动共同使用造成的。若是,则删除 NullEthernet 后查看是否已经恢复正常。
显卡检查
检查显卡驱动是否正常、注入 EDID 并开启 Hidpi。可能需要禁用独显。
也可能是背光设置不正确,更换 SSDT-PNLF 即可。也可能是合盖唤醒检测损坏,在终端输入以下命令禁用即可。
1 | sudo pmset lidwake 0 |
也可能是 PS2 键盘在唤醒时发送了垃圾内容,导致唤醒错误。使用 SSDT-HP-FixLidSleep,并将 ACPI 路径修改为键盘路径即可。
1 | https://github.com/acidanthera/VoodooPS2/blob/master/Docs/ACPI/SSDT-HP-FixLidSleep.dsl |
声卡检查
错误的音频设备也可能会导致睡眠问题。
SMBus 检查
SMBus 未正确加载将可能导致睡眠问题。
TSC 检查
TSC(Time Stamp Counter,时间戳计数器)确保硬件以正确速度运行,某些固件可能不会将 TSC 写入内核的某部分而出现问题。TSC 出错时常伴随登录界面输入密码后立即卡住冻结的错误,也会导致屏幕残影。
对于笔记本电脑,可直接使用 CpuTscSync。CpuTscSync 结合了 VoodooTSCSync 的功能并在 TSC 不同步的情况下禁用 xcpm_urgency。
1 | https://github.com/acidanthera/CpuTscSync |
对于大多数HEDT硬件,可使用VoodooTSCSync。VoodooTSCSync校正华硕HEDT/Server主板上的TSC,改善时间、音频和视频的同步。
1 | https://bitbucket.org/RehabMan/VoodooTSCSync/downloads/ |
打开终端并输入以下命令,记录输出。
1 | echo $(($(sysctl -n hw.ncpu) - 1)) |
在kext上右键点击显示包内容,打开Contents/Info.plist,搜索#CORE并替换为刚才所得的值,保存即可使用该kext。
放置VoodooTSCSync后还需要放置TSCAdjustReset。下载后在kext上右键点击显示包内容,打开Contents/Info.plist,将IOKitPersonalities-IOPropertyMatch-IOCPUNumber更改为从0开始的CPU线程数,保存即可使用该kext。
1 | https://github.com/khronokernel/Opencore-Vanilla-Desktop-Guide/blob/master/extra-files/TSCAdjustReset.kext.zip |
RTC 检查
RTC 可能被禁用,或 RTC 与系统不兼容。可尝试在 Clover 的配置文件勾选 FixRTC。
对于第一个问题,可使用 SSDT-AWAC 或 SSDT-RTC0-RANGE-HEDT,如下。
1 | # SSDT-AWAC |
对于第二个问题,一般会在启动时出现BIOS Restarted in Safemode错误。
对于 OpenCore,可在配置文件开启 DisableRtcChecksum 以防止写入主校验和(0x58-0x59)。
然后设置 UEFI-ProtoclOverride-AppleRtcRam 和 NVRAM-Add-rtc-blacklist,将某些区域列入黑名单。
同时需要使用 RTCMemoryFixup,添加rtcfx_exclude=启动参数,将某些区域列入黑名单。该参数的范围为 0x00-0xFF,其中 0x00-0x0D 的偏移不会引起任何冲突,0x80-0xAB 的偏移用于存储休眠信息(IOHibernateRTCVariables),0xB0-0xB4 的偏移用于 PowerManagement 功能。
RTCMemoryFixup 下载链接如下。
1 | https://github.com/acidanthera/RTCMemoryFixup |
【旧版】对于Z68主板
可能需要修复 DSDT。打开 DSDT 并查找 RTC 设备,然后替换为以下内容,保存后放置到引导器的 ACPI 目录。
1 | Device (RTC) |
NVMe 检查
检查 NVMe 是否已经完成修复。
CPU 电源管理检查
检查 CPU 电源管理是否正常工作。
Thunderbolt 检查
可在 BIOS 禁用 Thunderbolt 3,以保证 Thunderbolt 与睡眠可同时工作。
或尝试修补 Thunderbolt。
1 | https://osy.gitbook.io/hac-mini-guide/details/thunderbolt-3-fix/ |
USB 检查
可尝试进行 USB 定制。
也有可能是 USB3 导致的问题,向 DSDT 打以下补丁即可。
对于 0x0d 使用以下补丁。
1 | #Maintained by: RehabMan for: Laptop Patches |
对于 0x6d 使用以下补丁。
1 | #Maintained by: RehabMan for: Laptop Patches |
【注意】Catalina的IOClass
对于Catalina上的USB睡眠问题,可能还需要将USBMap.kext(或/System/Library/Extensions/IOUSBHostFamily.kext/Contents/PlugIns/AppleUSBHostPlatformProperties.kext/Contents/Info.plist)的IOClass由AppleUSBMergeNub修改为AppleUSBHostMergeProperties。
IRQ 检查
IRQ 问题有可能导致睡眠不正常。
常见问题
修复休眠后摄像头失效
在终端输入以下命令即可。
1 | sudo killall VDCAssistant |
系统时间调整
Windows把系统硬件时间当作本地时间,即操作系统中显示的时间跟BIOS中显示的时间一致。而Linux/Mac把硬件时间当作UTC,操作系统中显示的时间是硬件时间经过换算得来的,比如说北京时间是 GMT+8,则系统中显示时间是硬件时间+8。因此两个系统的时间会出现差异。
在 Windows 以管理员身份打开命令提示符,输入下列命令并重启以修复两个系统时间不一致的问题。
1 | Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1 |
若仍不一致,则在 Windows 下修改时间为自动获取,在 Mac 下把时区改成北京并开启自动获取,重新启动即可。
完成度检查
对于笔记本,可通过以下选项进行完成度检查。
变频测试
使用 CPU-S 进行变频测试,二档可用,八档以上优秀。下载链接如下。
1 | http://bbs.pcbeta.com/viewthread-1698338-1-1.html |
也可使用 DPCI Manager 查看。打开 DPCI Manager 并点击 P States 即可。
显示
分辨率和显存显示正常,支持 DP、HDMI 外接显示,风扇不持续高速旋转,原生亮度调节正常。
声音
通过 VoodooHDA 能有声音则可用,通过 AppleALC 能有声音则优秀。
网络
以太网需位于en0,无线支持2.4G/5G双频。支持AirDrop和Handoff则优秀。
USB
USB接口2.0/3.0/3.1均能识别,3.0及以上接口的识别速度应有5G/s。
电池
系统偏好设置正常识别电池电量状态。
睡眠
合盖睡眠,开盖唤醒后正常点亮不黑屏。
输入设备
自带键盘和触摸板都能正常使用。
固态硬盘
打开关于本机-系统报告,检查NVMExpress和SATA/SATA Express,均显示TRIM支持已开启则优秀。
常见问题
系统安装
系统安装过程中,可通过打开安装器日志查看当前进度和所遇到的问题。
提示 MediaKit reports not enough space on device for requested operation
EFI 分区不够大。
安装时停在 verifying installmacosx.pkg/installesd.dmg
等待一段时间后会重新启动,然后再去安装一次即可。
需要蓝牙连接键盘连接
主要是启动后显示鼠标和键盘的开关界面,一直循环切换。按空格即可跳过。
验证安装器数据时发生错误
断开网络后尝试拔掉无用外置硬盘、终端修改时间,或检查镜像是否损坏。
提示安装资源已过期,退出安装器以重新启动电脑,然后再次尝试
将安装 U 盘插入 USB2.0 接口,或重新制作安装盘。
安装卡在第一次走条的最后两分钟很久,而后提示安装器资源损坏
内存驱动问题。
安装时提示找不到安装器资源
可能是安装器损坏。若不行,则删除 EmuVariableUefi.efi。也有可能是 SMBIOS 设置错误。
引导启动
安装完成后无法进入 BIOS
出现了不正确的引导项。在 Windows 下可通过 EasyUEFI 删除多余的引导项,在 Mac 下可重置 NVRAM。
Clover 提示 Invalid Signature…
需要在 BIOS 关闭安全启动。
Clover 提示 X64 Exception Error
Drivers 中的驱动太新,删除或更换为旧版即可。如将 PartitionDxe 更换为 PartitionDxeLegacy。
Clover 检测不到启动项或任何 HFS/APFS 分区
可能是 Clover 版本太旧。
内置 kexts 错误导致无法进入系统
进入恢复模式后点击常用工具-终端,输入以下命令以重建缓存。也可进入单用户模式操作。
1 | # MAC为系统盘卷标,需根据情况替换 |
无法更改启动路径
在某些情况下,电脑的启动路径被硬编码为启动EFI/Microsoft/Boot/bootmgfw.efi而不是EFI/BOOT/BOOTX64.EFI,这将导致计算机启动系统的锁定。若遇到以上情况,则需将EFI分区里的EFI/Microsoft/Boot/bootmgfw.efi重命名为其他名称并将Clover的CLOVERX64.efi重命名为bootmgfw.efi,复制替换即可。注意,Windows的每次更新都会覆盖bootmgfw.efi,因此需要重新操作。
抹盘时提示 MediaKit 报告设备上的空间不足以执行请求的操作,或磁盘工具自动退出
根本原因是 EFI 分区小于 200MB。
出现 Welcome to Clover xxxx user settings 卡住不动
更换版本即可。
提示 This version of Mac OS X is not supported on this platform
更改 SMBIOS 即可。
卡在 Clover 引导界面不动
在引导器目录把无用的 plist 删除,仅保留 config.plist。
运行后导致 CMOS 重置
对于 Clover,可在配置文件中勾选 Apple RTC,以防止 CMOS 重置与有关 AppleALC 的错误。
啰嗦模式
提示 Panic
内核恐慌。可先尝试加-x 参数后再次启动,若无效则应当根据错误提示选择以下的解决方案。
AppleIntelCPUPowerManagement/AppleRTC
Mac 的 CPU 电源管理不起作用。
在 Clover 加入 NullCPUPowerManagement.kext,或删除 SLE 下的 AppleIntelCPUPowerManagement.kext 和 AppleIntelCPUPowerManagementClient.kext。
AppleTyMCEDriver
删除AppleTyMCEDriver.kext即可,可能在SLE或引导器目录。或SMBIOS不要设置MacPro4,1/MacPro5,1/Xserve3,1。
VoodooHDA
删除 VoodooHDA.kext 即可,可能在 SLE 或引导器目录。
ApplePolicyControl
删除AppleGraphicsControl.kext中的Contents/Plugins/ApplePolicyControl.kext即可。
Local APIC
可能是因为 Mac 不支持当前 CPU。可尝试使用 cpus=1 启动标志。
Unable to find driver for this platform: "ACPI\
在极少数情况下,这种恐慌只会在 AppleACPIPlatform.kext 损坏时发生。可尝试启动安全模式。
Thread 14 crash
可尝试将 BIOS 降级。
VTDecoderXPCServ
在 Clover 引导界面中选择 Graphics Injector,勾选 Inject Intel,并将*-platform-id 修改为 0x3E9B0000。
IOATAFamily
可尝试删除 SLE 下的 IOATAFamily.kext。
卡在 PCI configuration begin
可尝试添加启动参数 npci=0x2000 或 npci=0x3000。两者不要同时使用。
Still waiting for root device 并禁行
表示系统无法找到系统盘,一般分为 USB 引导和 SATA 硬盘引导两种情况。更新引导器到最新版本,若无效则按照以下内容修复。
如果是 USB 引导,代表系统无法识别到 USB,可在引导器的 kexts 下放置 USBInjectAll.kext,也可尝试在 Clover 的 config.plist 中勾选 FixOwnership。也可尝试插入 USB 2.0 端口而非 3.0 端口。启动后应当通过 USB 端口定制解决该问题。
如果是 SATA 硬盘引导,代表 Mac 不支持该 SATA 控制器。由于 Mac 不能正确支持 RAID、IDE 和 RST,因此需要在 BIOS 将 SATA 设置为 AHCI 模式,或使用 AHCI 补丁。若不起作用,则可尝试在引导器的 kexts 部分放置以下 kext,注意不要同时使用。
1 | ## SATA-unsupported.kext |
【进阶】OC引导
可尝试打开 RealeasUSBOwnership、XhciPortlimit。
卡在 ApplelIntelLpssI2CController
在主机 Windows 下把 SLE 下的 AppleInteLpssI2CController.kext 删掉。若无效,再删 AppleIntelLpssI2C.kext。
或者在 Clover 配置中禁用。打开 Clover 的 config.plist,在 KextsToPatch 加入以下配置即可。
1 | Name: com.apple.driver.AppleIntelLpssI2C |
卡在 IOConsoleUsers:gIOScreenLockState 3 或出现 Busy Timeout 或[IGPU] Hash data from ME never returned, status =1, doing retry
此错误是由于显卡驱动问题。如果为双显卡,需屏蔽独显,驱动集显。
更新 Whatevergreen 和 Lilu。若无效,则在 Clover 主页面中选择 Options,点击 Graphics injector,取消勾选InjectIntel并把platform-id修改为0×12345678,然后启动系统。若无效,则将 LE 下所有 kexts 备份并删除,再次启动。
若仍无效,则找到SLE下AppleIntel/AMD/ATI/Ge/NVD开头的所有显卡kexts,并将除核显外的其它所有kexts备份后删除。假设为Intel核显,则删除除AppleIntel开头外的其余所有显卡kexts。
也可尝试关闭 CSM,或强制 PCIe 3.0 链接速度,或添加启动参数 agdpmod=pikera。
卡在 IOBluetoothHCIController
真正的问题可能与蓝牙无关,而是在显卡。解决方法同上。
显示 This version of Mac OS X is not supported on this platform!
Clover 添加启动参数-no_compat_check,或更换 SMBIOS。若不行,则换用其他版本的系统镜像。
卡在 Service only ran for 0 seconds. Pushing respawn out by 10 second
使用 SSDT 而非 DSDT 进行独显屏蔽即可。
卡在 Attempting system restart…MACH Reboot
在 Clover 的 config.plist 配置文件 DropTables 下添加以下内容。
| Signature | Type/key | String |
|---|---|---|
| MATS | ||
| DMAR | ||
| BGRT |
卡在 Welcome to Clover xxxx user settings
Clover 的 config.plist 不适合该系统,替换即可。
卡在 ACPI:System State [S0 S3 S4 S5] (S3)
显卡无解,可能需要外接显卡。
卡在 apfs_module_start 或 VoodooPS2Controller,或安装时键盘无法使用
删除 VoodooPS2Controller.kext,替换为 AppleACPIPS2Nub.kext 和 ApplePS2Controller.kext。
显示 DSMOS has arrived 后重启
显卡问题,添加启动参数 nv_disable=1 禁用独显即可。若无效。可到 SLE 下删除所有显卡 kexts。
出现 DSMOS 错误
FakeSMC.kext 与 dsmos.kext 同时使用导致。删除 dsmos.kext 并使用 FakeSMC.kext。
出现 ATIRadeonX2000/ATIRadeonX3000 错误
删除 SLE 下 ATI 开头的显卡驱动。
出现 CHUDKernLib 错误
Xcode 用于调试核心的驱动。删除 SLE 下的 CHUDKernLib.kext 即可。
出现 FakeSMC 错误
替换一个不同版本的 FakeSMC.kext 即可。
停在 FakeSMC
可能是 USB 问题。可关闭 BIOS 中的 USB Legacy Support。
出现 FakeSMCRadeon 错误
替换一个不同版本的FakeSMC.kext,或删除FakeSMC.kext中的Contents/PlugIns/FakeSMCRadeon.kext即可。
出现 ElliottForceLegacyRTC 错误
删除 ElliottForceLegacyRTC.kext 并使用 LegacyAppleRTC.kext。
出现 AppleRTL8169Ethernet 错误
删除IONetworkingFamily.kext,或IONetworkingFamily.kext下的Contents/PlugIns/AppleRTL8169Ethernet.kext。
出现 AppleRTC 错误
放入NullCPUPowerManagement.kext。或删除/System/Library/Extensions/AppleIntelCPUPowerManagement.kext和AppleIntelCPUPowerManagementClient.kext。
出现 AppleFWOHCI 错误
删除SLE下的IOFireWireFamily.kext/Contents/PlugIns/AppleFWOHCI.kext即可。
出现 SleepEnabler 错误
删除 SleepEnabler.kext。
出现 Trying to change a collection in the registry 的 OScollection.cpp 错误
在 BIOS 开启 ACPI 2.0 Support 及 ACPI APIC support。
出现 failed to locate SMC driver 错误
更新 FakeSMC.kext 即可。
出现 ApplePolicyControl 错误
删除SLE下的AppleGraphicsControl.kext/Contents/PlugIns/ApplePolicyControl.kext即可。
白屏且鼠标在屏幕左上角出现无限彩色风火轮
更新 FakeSMC.kext 即可。
出现 IOMemoryDescriptor.cpp 错误
内存读取错误。
发生 lapic_native.c/lapic.c 的 Local APIC error 内核错误
添加启动参数 cpus=1,可能还需要 busratio=16。
出现 can’t perform kext scan: no kext summary 错误
尝试不使用 kexts 缓存。
发生 Should have 2 threads, but only found 3 for Die 0 的 cpu_threads.c 错误
重新提取修改正确的 DSDT.aml 即可。
发生 IOAPIC: Version 0x20 Vectors 64:87 错误
使用启动参数 cpus=1 或 cpus=2,或删掉 DSDT.aml 即可。
出现 NVClockX 错误
删除NVClockX.kext或FakeSMC.kext/Contents/PlugIns/NVClockX.kext。
出现 AppleIntelGMA950 错误
删除 SLE 下的 AppleIntelGMA950.kext。
出现 GeForce7xxx 错误
删除 SLE 下的 eForce7xxx.kext。
出现 IntelCPUMonitor 错误
删除IntelCPUMonitor.kext或FakeSMC.kext/Contents/PlugIns/IntelCPUMonitor.kext。
出现 Window Server Service only ran for 0 seconds 错误
禁用独显。
卡在灰屏
灰屏表示 FakeSMC 未加载。
出现 RTC:Only single RAM bank 错误
在引导器放置 RTCMemoryFixup.kext 即可。
1 | https://github.com/acidanthera/RTCMemoryFixup |
卡在 VoodooPS2Trackpad:idengtify TouchPad command failed
关闭 RAID 或改为其它模式。
出现 SMCReadKeyActionError 错误
禁用 VT-d,或在启动参数中添加 dart=0,或在 Clover 设置 Drop DMAR。
在 Ivy Bridge CPU 出现 PState Stepper 错误
CPU 的 SSDT 错误,进行原生电源管理修复即可。
出现 AppleLMUController::smcReadKey Error:received error 0×84 when reading key ‘MSLD’错误
使用了多余的 SSDT。
出现 Forcing CS_RUNTIME for entitlement:com.apple.rootless.restricted-block-devices
等待即可。
启用安全启动后无法启动
若安装时启用了安全启动,需要关闭安全启动后再次安装系统。
若无启用,则可启动到恢复分区并输入以下命令。注意确保未安装两个 SSD,且已连接到网络。
1 | ## Macintosh HD为安装有Mac的分区名称 |
系统运行
内置 SATA 硬盘显示为橙色图标
打开 Clover 的 config.plist,在 Kernel and kext Patches 选项卡中的 KextsToPatch 加入以下代码即可。
1 | Name: AppleAHCIPort |
RTC 问题
打开终端并输入以下命令。
1 | cat /private/var/log/system.log | grep rtc |
输出示例如下。E00002C2 即为需要屏蔽的内存位置。
1 | localhost kernel[0]: Lilu: rtc @ rtc read failure 1 bytes from 180 E00002C2 |
下载 RTCmemoryfixup,并且在 boot args 中添加rtcfx_exclude=10-FF即可。其中 10-FF 为内存屏蔽区间,根据以上输出确定。
键盘/触控板不工作
可能是 EC 设备出现故障。对于笔记本,可关闭电脑后拔出电池,30 秒后装回,重新开机。
对于 ELAN 触控板,在键盘不工作时可尝试按 Escape。
App Store 无法登录
打开终端并输入以下命令以重置 NVRAM 即可。
1 | sudo nvram -c |
附录
Kexts
大部分 kexts 可在以下网站找到。
1 | # 新版kexts |
可在终端输入以下命令查看kext支持的体系结构。其中二进制文件路径可通过在kext上右键点击显示包内容,然后在Contents/MacOS中找到。
1 | lipo -archs [kext的二进制文件路径] |
Lilu
Lilu 为其它 kext 提供接口支持,许多 kext 需要依赖 Lilu 才能运行。需要 10.8 或更高版本的系统,下载链接如下。
1 | https://github.com/acidanthera/Lilu/ |
FakeSMC 包与 VirtualSMC 包
下载链接如下。
1 | # FakeSMC包 |
两者作用相同,均用于向 macOS 提供 SMC 信息,模拟白苹果启动环境。FakeSMC 早于 VirtualSMC,且已不再更新,因此推荐使用 VirtualSMC 替换 FakeSMC。注意,使用 VirtualSMC 时 Lilu 需为最新版本,否则将无法进入系统。VirtualSMC 包作用分别如下。
| Kext名称 | 作用 |
|---|---|
| VirtualSMC | 替换FakeSMC.kext,需在Clover的driver64UEFI中删除SMCHelper-64.efi并复制VirtualSMC.efi到此目录 |
| SMCProcessor | 监控CPU温度,不适用于基于AMD CPU的系统 |
| SMCSuperIO | 监控风扇速度,不适用于基于AMD CPU的系统 |
| SMCLightSensor | 用于笔记本电脑上的环境光传感器,台式机可以忽略 |
| SMCDellSensors | 对支持系统管理模式(SMM)的戴尔机器上的风扇进行更精细的监视和控制 |
| SMCBatteryManager | 电源管理驱动,用于替换ACPIBatteryManager,台式机可以忽略 |
VirtualSMC 需要 10.8 或更高版本的系统,旧版本应当使用 FakeSMC。
【进阶】FakeSMC的Info.plist说明
REV 表示 SMC 版本,以 Base64 表示,转换为十六进制即可,对应关系如下。
| 型号 | SMC版本 | REV值 |
|---|---|---|
| MacPro3,1 | 1.25f4 | ASUPAAAE |
| MacPro4,1 | 1.39f5 | ATkPAAAF |
| MacPro5,1 | 1.39f11 | ATkPAAAR |
| iMac8,1 | 1.30f1 | ATAPAAAB |
| iMac9,1 | 1.45f0 | AUUPAAAA |
| iMac10,1 | 1.53f13 | AVMPAAAT |
| iMac11,1 | 1.54f36 | AVQPAAA2 |
| iMac12,1 | 1.72f5 | AXIPAAAF |
| MacBookPro5,1 | 1.33f8 | ATMPAAAI |
| MacBookPro5,1 | 1.33f8 | ATMPAAAI |
| MacBookPro6,1 | 1.58f16 | AVgPAAAW |
| MacBookPro7,1 | 1.62f6 | AWIPAAAG |
| MacBookPro8,1 | 1.68f96 | AWgPAACW |
smc-compatible 的值列表如下。
| 型号 | smc-compatible值 |
|---|---|
| MacPro3,1 | smc-napa |
| MacPro4,1 | smc-thurley |
| MacPro5,1 | smc-thurley |
| iMac9,1 | smc-napa |
| iMac10,1 | smc-mcp |
| iMac11,1 | smc-piketon |
| iMac12,1 | smc-huronriver |
| MacBookPro5,1 | smc-mcp |
| MacBookPro5,5 | smc-mcp |
| MacBookPro6,1 | smc-piketon |
| MacBookPro7,1 | smc-mcp |
| MacBookPro8,1 | smc-huronriver |
tjmax 表示 CPU 可承受的最大温度,可通过 Aida64 等方式查到。
WebCamera
相机驱动。
1 | https://i.applelife.ru/2019/03/448848_WebCamera.kext.zip |
AnyiSightCam
在系统报告中添加相机信息。
1 | https://github.com/tuiuVN/EFI_Clover/tree/13a94765f8c3f4a5c7138b2fcc1b9e8d091c65e8/K46CA/EFI/CLOVER/kexts/Other |
AnyCardReader
在系统报告中添加读卡器信息(需更改为自己的 ID)。
1 | https://github.com/holoto/ec-471g/tree/master/EFI/EFI/CLOVER/kexts/10.11 |
AnyiSightCam
在系统报告中添加相机信息。
1 | https://github.com/tuiuVN/EFI_Clover/tree/13a94765f8c3f4a5c7138b2fcc1b9e8d091c65e8/K46CA/EFI/CLOVER/kexts/Other |
DebugEnhancer
啰嗦模式下可输出更多内容。
1 | https://github.com/acidanthera/DebugEnhancer |
IOElectrify
为 Intel Thunderbolt 硬件提供始终开启的电源。
1 | https://github.com/the-darkvoid/macOS-IOElectrify/releases |
VoodooInput
提供 Magic Trackpad 2 仿真。
1 | https://github.com/acidanthera/VoodooInput/releases |
LiluFriend
确保 Lilu 及其插件被加载。
1 | https://github.com/PMheart/LiluFriend |
VoodooSDHCMod
读卡器驱动。
1 | https://github.com/lvs1974/VoodooSDHCMod/releases |
SASMegaRAID
1 | https://github.com/dukzcry/osx-goodies |
Legacy_USB3&Legacy_InternalHub-EHCx
1 | https://applelife.ru/posts/537459 |
Sinetek-rtsx
读卡器驱动。
1 | https://github.com/tsingui/Sinetek-rtsx-1 |
SerialMouse
串行鼠标驱动,在系统启动前需先将鼠标接入电脑。
1 | https://github.com/Goldfish64/SerialMouse/releases |
RTCMemoryFixup
解决部分 Z370 B360 新 BIOS 的 RTC 中 STA 函数导致卡 Apfs NVME 的问题。
1 | https://github.com/acidanthera/RTCMemoryFixup |
SidecarEnabler
删除 Sidecar 使用的所有 SMBIOS 检查。
1 | https://github.com/hieplpvip/SidecarEnabler |
ThunderboltReset
禁用 Alpine Ridge 中的 ICM,以便 OSX 接管 LC。
1 | https://github.com/osy/ThunderboltReset |
SystemProfilerMemoryFixup
在 MacBookAir 和 MacBookPro10,x 平台上显示内存选项卡。
1 | https://github.com/Goldfish64/SystemProfilerMemoryFixup |
DiskArbitrationFixup
禁用此计算机无法读取您插入的磁盘消息。
1 | https://github.com/Goldfish64/DiskArbitrationFixup |
AHCI_3rdParty_eSATA/SATA
第三方eSATA/SATA驱动,连接到这些接口的设备将会识别为内置磁盘。
1 | # AHCI_3rdParty_eSATA |
AHCI_Intel_Generic_SATA
英特尔 SATA 驱动。
1 | https://github.com/NTT123/Hackintosh-HP-Z420-MacOS-High-Sierra-10.13-10.14/tree/master/CLOVER/kexts/10.12 |
FakePCIID
仿冒 PCI 设备核心驱动。与 IOPCIDevice 设备建立连接,以便当另一个驱动程序连接到同一设备时提供备用的 PCI ID。
必须放置 FakePCIID,然后根据需求放置以下 kexts 中的一个或多个。
| 名称 | 作用 |
|---|---|
| FakePCIID_AR9280_as_AR946x | 将PCI ID重新映射回AR9280(168c:002a),即使该设备本身报告的是168c:0034 |
| FakePCIID_Broadcom_WiFi | 模拟真正的Apple Airport(苹果无线网卡) |
| FakePCIID_Intel_GbX | 与一些Intel以太网设备建立连接,以使基于Intel芯片组的驱动程序工作。不做单独使用,通常与SmallTreelntel8254x.kext、Applelntel8254XEthernet.kext、SmallTreelntel82576.kext、SmallTreelntel8259x.kext一起使用 |
| FakePCIID_Intel_HD_Graphics | 用于核显HD4200/HD4400/HD4600/P4600,Iris 540/550 Iris Pro 580、HD510 HD515 HD520 HD530 P530(多数530不需要这个)、P4000、P6300 – 162a、UHD620 KabyLake-R、UHD630 CoffeeLake |
| FakePCIID_Intel_HDMI_Audio | 在Haswell以上的系统中提供HDMI-audio的设备,为不支持的HDAU提供支持(通常称为B0D3,但需要将其重命名为HDAU) |
| FakePCIID_XHCIMux | 把USB3.0主控器XHC下的USB2.0 port转移(bypass)到USB2.0主控器EHC1/EHC2下 |
| FakePCIID_BCM57XX_as_BCM57765 | 用于Broadcom无线网卡BCM5700/BCM5701/BCM5702/BCM5703/BCM5717/BCM5718/BCM5719/BCM5725/BCM5727/BCM5761/BCM5762/BCM57760/BCM57764/BCM57767/BCM57781/BCM57782/BCM57785/BCM57786/BCM57787/BCM57788/BCM57790/BCM57791/BCM57795/BCM5785/BCM5787M |
AMFIExemption
将允许的 entitlements 添加到非 Apple 签名的应用程序。
1 | https://github.com/osy/AMFIExemption |
Innie
使 PCIe 驱动器显示为内部驱动器。
NightShiftEnabler
NightShiftUnlocker 已被整合到 NightShiftEnabler。
开启 Night Shift 功能。
1 | https://github.com/cdf/NightShiftEnabler |
ECEnabler
允许读取长度超过 1 个字节的 EC 字段,大大减少工作电池状态所需的 ACPI 修改量。
1 | https://github.com/1Revenger1/ECEnabler |
RestrictEvents
MacProMemoryNotificationDisabler 已被整合到 RestrictEvents。
阻止不需要的进程,避免在不同的硬件上引起兼容性问题,并解锁对仅限于其他硬件的某些功能的支持。
1 | https://github.com/acidanthera/RestrictEvents |
TSCAdjustReset
修复了在 x299 主板和 Skylake-X 平台的 cpu 启动 Mac 时同步 TSC 的衰退的问题。
TOSMotionSensor
东芝 hackintosh 设备的加速度计驱动程序。
1 | https://github.com/jslegendre/TOSMotionSensor |
AAAMouSSE
1 | https://forums.macrumors.com/threads/mp3-1-others-sse-4-2-emulation-to-enable-amd-metal-driver.2206682/ |
Polaris22Fixup
修复Polaris22/VegaM的已知图形问题,支持10.14+。
1 | https://github.com/osy/Polaris22Fixup |
HWPEnable
1 | https://cgithub.com/headkaze/HWPEnable |
旧版 Kexts
| 名称 | 作用 | 下载 | 备注 |
|---|---|---|---|
| OpenHaltRestart/EvOreboot | 解决重启/关机时遇到无法断电问题 | 不可同时使用 | |
| ElliottForceLegacyRTC/LegacyAppleRTC | 防止主板BIOS的CMOS重置错误 | 不可同时使用 | |
| PlatformUUID | 解决Unable to determine UUID for host. Error:35的问题 | ||
| IOAHCIBlockStorageInjector | 修复将内置硬盘识别为外置硬盘的问题 | ||
| ApplePS2SmartTouchPad | 键盘鼠标触摸板万能驱动 | ||
| SATA-100-series-unsupported | Intel 100系列主板SATA磁盘识别驱动 | ||
| SATA-200-series-unsupported | Intel 200系列主板SATA磁盘识别驱动 | ||
| SATA-RAID-unsupported | SATA磁盘阵列驱动 | ||
| XHCI-200-series-injector | 200系列主板驱动 | ||
| XHCI-300-series-injector | 300系列主板驱动 | ||
| XHCI-unsupported | Intel X99系列主板驱动,可用于H370、B360、H310、Z390(Mojave及更新版本不需要)、X79、X99、AsRock(除B460/Z490+) | ||
| XHCI-x99-injector | Intel X99系列主板驱动 | ||
| BT4LEContiunityFixup | 开启BT4LE蓝牙上的hotspot以及handoff | ||
| NVEnabler | NVidia GeForce 9500GT驱动 | ||
| AppleAC97Audio | AC97音频驱动 | 适用于10.4-10.5 | |
| BCM5906MEthernet | NetLink BCM5906M有线网卡驱动 | https://github.com/vmatyushin/osx-bcm5906m/ | 适用于10.6-10.7 |
| ACPICPUThrottle | 根据负载自动调整CPU时钟和电压 | 适用于10.4 | |
| MMInputFamily | 多媒体输入设备驱动 | http://defyne.org/dvb/driver.html | 适用于10.2-10.4 |
| Macam | USB摄像头驱动 | https://sourceforge.net/projects/webcam-osx/ | 适用于10.4 |
Kext 禁用器
下载以下kext并右键显示包内容,打开Contents/Info.plist,将AppleUserUpstreamClient替换为需要禁用的kext名称,然后放到引导器的Kexts部分即可。
1 | https://www.tonymacx86.com/attachments/disabler-kext-zip.18081/ |
WhateverGreen
修复显卡必备驱动,适用于 10.8 及更新版本,下载链接如下。
1 | https://github.com/acidanthera/WhateverGreen/releases |
若未指定帧缓冲区,则默认帧缓冲区将被注入。若未设置帧缓冲区且系统具有独立显卡,则空帧缓冲区(零个控制器)将被注入。空帧缓冲区如下。
| 平台 | platform-id |
|---|---|
| SNB | 0x00050000 |
| IVY | 0x01620007 |
| HSW | 0x04120004 |
| SKL | 0x19120001 |
| KBL | 0x59120003 |
| CFL | 0x3E910003 |
| CML | 0x9BC80003 |
在未确定帧缓冲区时,可通过启动参数igfxframe=进行设置,此时将忽略设备属性中的参数。
WhateverGreen 中已包含以下 kexts。
1 | IntelGraphicsFixup |
注意需要关闭 Clover 的以下选项。
1 | # DSDT |
【过时】IntelGraphicsDVMTFixup
macOS 的启动需要 DVMT 大于32MB,否则将导致内核崩溃。DVMT 的大小可在 BIOS 设置,若 BIOS 无相应选项,可通过 grub 中的setup_var修改。或者使用本 kext,但仅用于 macOS 10.13 及以下,在 macOS Mojave 下不适用。
在 Majove 及更新系统,需在 Clover 的 config.plist 应用以下补丁以修复。或者使用 Hackintool,应用补丁时勾选DVMT 32MB 预分配。
1 | <key>Properties</key> |
VoodooI2C
VoodooI2C 具有记忆性,由中断模式切换到轮询模式、在中断模式下修改有关触控板的 DSDT 等均不生效,需将 VoodooI2C 的相关驱动在 Clover 的 kexts 下删除再重新复制才能恢复初始设置。适用于 10.11 及以上系统,下载链接如下。
1 | https://github.com/alexandred/VoodooI2C/releases |
NullCPUPowerManagement
AMD CPU 无法使用英特尔的电源管理,因此我们需要取消它。
1 | https://github.com/Goldfish64/SerialMouse/releases |
Windows 读写 HFS
HFSExplorer
1 | http://www.catacombae.org/hfsexplorer/ |
HFS+ driver
1 | https://forums.macrumors.com/threads/apple-hfs-windows-driver-download.1368010/ |
UEFI 驱动
EmuVariableUefi
用于模拟 NVRAM,从而将黑苹果洗白。若主板有原生 NVARM,则无需放置。
ApfsDriverLoader
APFS 驱动。
1 | https://github.com/acidanthera/ApfsSupportPkg |
HFSPlus
HFS 驱动。
1 | https://github.com/STLVNUB/CloverGrower/tree/master/Files/HFSPlus/x64 |
CrScreenshotDxe
1 | https://github.com/LongSoft/CrScreenshotDxe |
硬件驱动
EMU-USB
1 | https://github.com/Wouter1/EMU-driver |
kXAudioDriver
Windows 和 macOS 的 kX 音频驱动程序。
1 | https://github.com/kxproject/kx-audio-driver |
liquid coolers
液体冷却器驱动。
1 | https://github.com/liquidctl/liquidctl |
黑苹果库
1 | # 网站 |
OC-little 包
1 | https://github.com/daliansky/OC-little |
工具
MountEFI
挂载 EFI 分区。
1 | https://github.com/corpnewt/MountEFI |
Hackintool
1 | http://headsoft.com.au/download/mac/Hackintool.zip |
Kext Updater
1 | https://bitbucket.org/profdrluigi/kextupdater/downloads/ |
MaciASL
1 | # RehabMan版 |
IORegistryExplorer
IORegistryExplorer 可用于查看硬件情况。2.1 版下载链接如下。
1 | https://github.com/vulgo/IORegistryExplorer |
判断设备存在情况
将左上角的模式选为IODeviceTree,查看左侧设备树。若显示类似为P0P5@1C,1,则表示存在该设备。若显示类似为P0P5@1c0001,且点进去后只有 acpi-device 与 acpi-path 两项,则表示不存在该设备。
判断设备驱动情况
将左上角的模式选为 IOService,查看左侧设备树。
若显示类似为P0P4@1C且可展开,展开后可查看相应 kexts,则该设备已驱动。部分设备可能无法展开,但也已经被驱动,如 Memory Controller Hub、SMBus Controller。
若显示类似为pci8086,266a@1F,3,则该设备未驱动。
查看 CPU 变频档次
搜索 ACPI_SMC_PlatformPlugin,查看其中的 PerformanceStateArray 即可。
gfxutil
1 | https://github.com/acidanthera/gfxutil |
iMessageDebug
1 | https://github.com/YCSuperM/ImessageDebug |
Clover Configurator
1 | https://mackie100projects.altervista.org/download-clover-configurator/ |
Kext Utility
1 | https://en.freedownloadmanager.org/Mac-OS/Kext-Utility-FREE.html |
7z
1 | http://www.7-zip.org/download.html |
AW EDID Editor
1 | https://www.analogway.com/apac/products/software-tools/aw-edid-editor/ |
HWMonitorSMC2
监控硬件运行状况。
1 | https://github.com/CloverHackyColor/HWMonitorSMC2 |
Continuity-Activation-Tool
只能用在 Broadcom 无线网卡,用于启用接力功能。支持 10.10-10.13。
1 | https://github.com/dokterdok/Continuity-Activation-Tool |
一键安装系统工具
Ccmacos
1 | http://www.ccmacos.cn/# |
参考教程
alexandred/VoodooI2C-Gitter
https://gitter.im/alexandred/VoodooI2C/archives/2018/08/30(搜索@Piero512)
修改DSDT实现电量显示教程
https://blog.gzxiaobai.cn/2020/05/16/%E4%B8%BA%E5%B0%8F%E7%99%BD%E8%AE%BE%E8%AE%A1%E7%9A%84%E7%94%B5%E6%B1%A0%E6%95%99%E7%A8%8B%EF%BC%88DSDT%EF%BC%89/
VoodooI2C驱动教程
https://www.penghubingzhou.cn/2019/07/24/VoodooI2C%20DSDT%20Edit%20FAQ/
https://voodooi2c.github.io/#GPIO%20Pinning/GPIO%20Pinning
First time Hackintosh Stuck at Grey Screen after installation
[FIX] “Window Server Service only ran for 0 seconds” with dual-GPU
ASUS 100 Series and Later Custom SSDT for XHCI USB Port Control
[Guide] Laptop backlight control using AppleBacklightFixup.kext
acidanthera/bugtracker
https://github.com/acidanthera/bugtracker/issues/1247
https://github.com/acidanthera/bugtracker/issues/1193
Olarila
https://www.olarila.com/topic/4997-usb-raise-remove-limit-port-patch-el-capitan-sierra-high-sierra-mojave-catalina/
https://www.olarila.com/topic/6451-guide-generate-ssdt-for-power-management-with-ssdtprgen/