概述
随着各种数字币价格持续走高(本文发布时),很多 黑苹果er 经不住矿老板开的高价诱惑卖掉了手里的独立显卡,核显就成为了唯一的显示设备;也有新手想入坑黑苹果,原来搭配的却是 NVIDIA 无法驱动的型号,只能使用核显;对笔记本用户来说,绝大部分型号只能使用核显,无法驱动独显;根据苹果机型的工作原理,核显在 iMac 机型中对随航/硬件解码等功能起了直接甚至决定性的影响。
因此,黑苹果驱动核显对使用体验的提升起到举足轻重的作用。本文接下来会以问题排查的思路,逐步加码讲解驱动核显遇到的问题和解决方法。
文中标注了「注意」的部分都是坑,注意认真看。
情况确认
白苹果中在默认情况下,各机型核显的配置和工作情况如下:
- 核显是唯一的显示输出
- 常见于在没有独显的 Mac Mini,MacBook Air,13寸 MacBook Pro 和 iMac
- 核显仅用于驱动内置显示器,而独显处理外部显示器
- 常见于 15寸/16寸 MacBook Pro
- 核显仅用于内部计算,而独显处理所有显示输出
- 常见于包含独显的 iMac
- 官方没有核显的机型
- iMacPro 和 Mac Pro
苹果在 macOS 内置的核显驱动中限定了支持的核显型号和具体配置情况。这样的设计决定了很多情况,包括支持的显示器的数量,允许的显示器类型,这些显示器的位置,所需的最小 VRAM 等,因此当你的硬件配置和白苹果的越接近,问题越少,体验越好。苹果究竟用过哪些硬件,参考 SMBIOS ID 机型选择。和免驱独立显卡不同,缓冲帧补丁(Framebuffer Patching)一般情况下不会自动给你打上,即便你的硬件和白苹果一模一样。
由于 EFI 配置文件不具备普适性,所以黑苹果系统安装完成后,很多情况下会出现核显无法识别,或没有显存。虽然现在已有 WhateverGreen 这样的“显卡驱动”(实际上是针对显卡的补丁集)可以方便的打缓冲帧补丁,但是很多人不是很明白具体如何操作。如果你的关于本机显示下面的情况,那么你的核显没有正常驱动。
具体就是“图形卡”部分显示 核显型号 + 7MB,或者直接显示 Display + 7MB,并且在 Hackintool 中 CPU 架构一项显示三个问号 ??? 。这种情况是 100% 没有驱动核显的。
正常驱动的核显,应该是下面这样的:
「注意」
- 笔者至今没见过 奔腾/赛扬/锐龙 的核显正确驱动的案例,如果你是这类情况建议更换处理器;
- 酷睿处理器名字中带“F”后缀的型号没有核显,没有核显,没有核显,例如 9400F/9900KF/10400F,这是物理上就不带核显这个东西,不必继续往下看了。
核显基本驱动流程如下:
确定核显型号 → 寻找缓冲帧信息 → 在 config 中注入对应信息 → 重启验证
前期准备
确认了有问题,下一步就是要解决,需要准备一些必要的文件和 OpenCore 配置工具。
- Hackintool.app
- WhateverGreen.kext
- 简称 WEG,依赖 Lilu.kext,把文件放到 /EFI/OC/Kexts/ 目录下,并在 config 中添加启用
我们需要修改 OC 配置文件,指的是修改 /EFI/OC/ 目录下的 config.plist 文件,这是 OpenCore 的核心配置文件。考虑到目前已经有各式各类的工具可配置 OpenCore,这里提供多种工具和方法,选择其中之一即可:
- OpenCore Configurator:简称 OCC,和开发 Clover 配置工具的是同一个团队,优点是拥有逻辑清晰的图形界面,操作比较直观;缺点是只有 macOS 版本,并且偶尔会出现污染配置文件的情况,使用前注意备份;
- OCAuxiliaryTools:OpenCore 配置工具中的后起之秀,优点是拥有跨平台客户端,支持 Windows、macOS 和 Linux,拥有图形界面,操作比较直观;缺点是功能排版上稍显凌乱,和 OCC 一样偶尔会出现污染配置文件的情况,使用前注意备份;
- ProperTree:使用 Python 编写的跨平台 Plist 编辑工具,优点是可跨平台,支持 Windows、macOS 和 Linux(Python),通常情况下不会污染配置文件;缺点是虽然拥有图形界面,但却是一个树状的编辑器,和前两者不是同一个概念,因此操作上没有前二者方便;
- Visual Studio Code:严格来说这是一个代码编辑器,同类型的还有 Sublime Text,UltraEdit 等,其优点是自由度较高,不会污染配置文件;缺点是没有代码基础知识没法使用,较高的自由度也带来了犯更多错的可能;
一般情况下 EFI 文件夹位于 ESP 分区,需要使用工具或方法才能打开。
BIOS 设置
要驱动核显,我们还需要对 BIOS 设置进行一些更改,一般情况下笔记本默认激活核显,但可能需要调整 DVMT。大部分台式机都需要改改设置。因各个品牌 BIOS 设置不尽相同,这里不做详细说明,请自己在 BIOS 里查找以下项目:
- iGPU → Enabled
- 部分主板此项可能名为 GFX 或 Integrated Graphics 等,实在找不到请百度或上官网查一下用户手册;
- 部分主板在开启本项保存退出 BIOS 重启再进入 BIOS 后,才会显示下面选项;
- Multiple Monitor → Enabled
- 此项主要开启核显多屏幕连接功能,但在部分机型上,没独显仅用核显时需要开启此项才能正常驱动核显;
- Primary Display IGFX/IGD/PEG/PCIE → Auto
- 如果同时存在独显和核显,使用 Auto,如果仅用核显选择 IGFX/IGD,仅用独显选择 PCIE/PEG
- DVMT Total Memory Size → MAX
- DVMT Pre-Allocated → 64M/96M/128M/256M
- 以上 DVMT 两项在大部分机型的 BIOS 里只存在其中一个;
- DVMT 不需要太高,但建议不要低于 64M,「注意」如果 BIOS 没有此项请注意看下文(完善型驱动部分)说明
捷径型驱动方法
Hackintool 堪称黑苹果界的瑞士军刀,它可以帮助你轻松生成缓冲帧补丁。对于新手和“我不想了解那么多”的人来说,直接使用这个软件生成缓冲帧补丁即可。
首先下载并运行 Hackintool,然后勾选顶部菜单栏中的:
- 缓冲帧 → macOS 10.14(根据你实际情况选择,10.15 及以上同样勾选 10.14 )
- 应用补丁 → 应用当前补丁
可以在第一个页面下方选择 CPU 架构和对应的 平台 ID,不要选错。- CPU 架构怎么选?小白请看举例:i9-9900KF,i9 代表的是分级,第一个 9 代表是第九代酷睿,也就是 Coffee Lake 家族,900 指的是性能等级,后缀 K 代表不锁倍频,F 代表没有核显(你的 CPU 如果带 F 后缀可以不用继续往下看了,你的 CPU 没有核显)英特尔 CPU 详细信息查询官网 Ark 数据库。
- 关于平台 ID:对于桌面端处理器有独显的情况,应选择“无端口”(Headless)的缓冲帧;如果是没有独显,单独使用核显,选择桌面端有端口的缓冲帧;笔记本机型由于独显基本无法驱动,因此首选笔记本默认推荐的缓冲帧,如有问题再尝试其他。这个部分可参考本文最末尾 Framebuffer 参考信息。
接下来使用 Hackintool 生成需要的补丁,切换到 应用补丁 选项卡,勾选设备属性,图形卡:
切换至 高级 选项卡,根据自身需求决定选项,看图操作:
生成补丁后,需要点击菜单 → 文件 → 导出 → 引导工具 config.plist
可以直接选择你的 /EFI/OC/config.plist 文件,直接覆盖。Hackintool 会自动备份你原有的 config 文件(建议是手动备份),把补丁内容合并到新的 config 中。
如果此方法未能解决你的问题,建议继续往下看,详细了解 WhateverGreen.kext 对核显打补丁的方法和原理。
基本型驱动
如果你处理器是比较新的第八到第十代酷睿(桌面),那么恭喜你,它们内置的 UHD630 是目前最容易驱动的核显型号。在没有独显的情况下,只需要提供一个 AAPL,ig-platform-id 即可,参数解释:
- AAPL,ig-platform-id,平台设备 ID,DATA 格式,填写时需要按十六进制倒序,例如 UHD630 的其中一个 ID 是 0x3E9B0007,则需要填入 07009B3E
- 如何倒序?0x 代表的是十六进制,没有实际意义略过。剩下的值两两一组分隔开:3E 9B 00 07,然后按从右到左的顺序重新排列,得到 07 00 9B 3E
- 「注意」如果是第三代酷睿核显,这个参数要改成 AAPL,snb-platform-id
- 其它型号的核显的缓冲帧补丁可参阅本文 Framebuffer 参考信息 部分
我们使用 OpenCore Configurator(OCC)打开 config 文件,切换到 DeviceProperties,加入 AAPL,ig-platform-id 信息,见图:
「注意」绝大部分情况下,核显的 Pci 位置就是 PciRoot(0x0)/Pci(0x2,0x0) 。如果你的不是,请通过以下位置确认。
第二个需要说明的是 APPL,ig-platform-id 的值,07009B3E 适用于第八代到第十代所有内置的 UHD630 核显,但在某些机器里,07009B3E 可能会造成黑屏,这种情况可以试试 00009B3E 。「注意」这两个 id 要求机型 ID 不低于 iMac19,1,因为从 iMac19,1 和同代机型开始苹果才配备了第八代酷睿,所以这点应该很容易理解。苹果究竟用过哪些硬件,参考 SMBIOS ID 机型选择。
以上两个 id 针对只有核显的情形,「注意」如果有独显的情况使用 iMac 机型,希望核显参与硬解码不参与画面输出的,使用下面几个 id:
- 0300913E、0300983E:适用于第八代-第九代酷睿核显
- 0300C49B:适用于第十代酷睿,i3 10100-10300
- 0300C89B:适用于第十代酷睿,i5 10400-10600
- 0300C59B:适用于第十代酷睿,i7 10700 及以上
对于其他核显型号,可参考本文最下方的 Framebuffer 列表。「注意」截止本文发布,第十一代酷睿的 Xe 核显 UHD730/750 还无法被驱动。
完善型驱动
如果基本驱动方法无法满足你的需求,又或者默认的 1536MB 显存不够你使,或有卡死/卡顿/无限循环重启等问题,除了尝试更换不同的缓冲帧 ID 外,就是需要对注入的信息做进一步的扩展,这里介绍以下几个由 WhateverGreen(WEG)提供的功能。「注意」绝大部分情况下,有独显核显仅参与计算的情形不需要下面这些参数。
- framebuffer-patch-enable:决定是否开启 WEG 提供的补丁功能,有独显的情况不需要。「注意」要启用其它补丁功能则此项必须开启
- 该值可以使用 DATA 和 NUMBER 两种格式
- DATA:01000000(启用) 00000000(不启用)
- NUMBER:0(不启用) 1(启用)
- 该值可以使用 DATA 和 NUMBER 两种格式
- framebuffer-stolenmem:视频动态分配的内存大小,建议不要低于 64M,下面的值已经转换并倒序,可直接使用。「注意」如果你的 BIOS 有 DVMT 则无需此项,反之则必须
- 00000004(64M)
- 00009003(57M)
- 00000008(128M)
- framebuffer-fbmem:此项需要和 stolenmem 搭配使用,DATA 格式,主要影响高分辨率显示,可设置以下值「注意」如果你的 BIOS 有 DVMT 则无需此项,反之则必须
- 00009000(9M)
- 00000003(48M)
- framebuffer-unifiedmem:设置核显能调用的显存大小(实际使用的是内存),DATA 格式,按需使用
- 00000060(1536M,默认)
- 00000080(2048M,如果花屏可尝试)
- 000000C0(3072M)
- 0000F0FF(4095M)
- framebuffer-cursormem:字面意思是光标内存,DATA 格式,主要针对 Haswell 核显,如果遇到鼠标卡顿跳跃可试一试
- 00009000(9M)
- 00000003(48M)
- device-id:设备 id,DATA 格式,同样需要十六进制倒序,另外,常说的仿冒设备 ID 就是需要设置这个属性
- 例如:八代九代酷睿 UHD630 核显输出填写 9B3E0000,核显仅计算填写 983E0000 或 913E0000
- 仿冒设备 id 例如:HD4400 没有原生支持,需要填写 12040000 仿冒 HD4600 的设备 id
- enable-hdmi20:开启 HDMI 2.0 输出,解决使用 HDMI 2.0 输出 4K@60Hz 画面
- 该值可以使用 DATA 和 NUMBER 两种格式
- DATA:01000000(启用) 00000000(不启用)
- NUMBER:0(不启用) 1(启用)
- 该值可以使用 DATA 和 NUMBER 两种格式
- enable-hdmi-dividers-fix:用于修复 HDMI 无限循环重启,按需
- 该值可以使用 DATA 和 NUMBER 两种格式
- DATA:01000000(启用) 00000000(不启用)
- NUMBER:0(不启用) 1(启用)
- 该值可以使用 DATA 和 NUMBER 两种格式
- AAPL,GfxYTile:用于修复 Skylake HD530 核显在菜单栏/窗口左上角的“毛刺”,按需
- 该值可以使用 DATA 和 NUMBER 两种格式
- DATA:01000000(启用) 00000000(不启用)
- NUMBER:0(不启用) 1(启用)
- 该值可以使用 DATA 和 NUMBER 两种格式
- disable-external-gpu:用于笔记本关闭独立显卡(因为驱不动),DATA 格式,按需
- 该值可以使用 DATA 和 NUMBER 两种格式
- DATA:01000000(关闭独显) 00000000(不关闭)
- NUMBER:0(不关闭) 1(关闭独显)
- 该值可以使用 DATA 和 NUMBER 两种格式
- AAPL,slot-name:显示该设备的接口,字符串格式,可不填
- Internal@0,2,0 或 Built-in
- device_type:该设备的类型,字符串格式,可不填
- Display controller 或 VGA compatible controller
在选择并添加以上信息后,我们得到了下面的注入信息:
到这一步,应该解决了绝大部分核显驱动相关的问题。最后是几个小提示:
- 使用 HDMI 接口每次开机/重启都需要重新插拔才能显示的,添加启动参数 igfxonln=1
- 添加启动参数 -wegnoegpu 也可以禁用独显(针对笔记本机型)
- device-id 用于仿冒设备 id 从而驱动原本不支持的设备,例如 HD4400 仿冒 HD4600。macOS 的 IOKit 通过检测设备 id 来决定哪些设备可以连接到哪个驱动文件,这些存放驱动的 kext 本身能支持的设备是很多的,但是苹果的 iGPU 驱动里包含的设备 id 是有限的,因此指定 device-id 即可让 IOKit 加载对应的文件驱动设备。因此可以这么做的前提就是存放驱动的 kext 本身能够支持设备,所以给 RTX3090 指定 RX6900XT 的设备 id 是没有用的。仿冒设备 id 原理和方法可以参考「仿冒设备 id 以驱动显卡」
- Ice Lake 需要添加启动参数 -igfxcdc(或 enable-cdclk-frequency-fix 属性)以及 -igfxdvmt(或 enable-dvmt-calc-fix 属性)启动参数避免硬件和设置的问题导致的内核崩溃;
- WhateverGreen 于 1.4.6 版弃用了 igfxcflbklt=1(和 enable-cfl-backlight-fix 设备属性),这是用于修复屏幕亮度的。如果你的 WEG 升级到 1.4.6 及以上后开机屏幕很暗,使用新的参数 -igfxblr(和 enable-backlight-registers-fix 设备属性)