概述

随着各种数字币价格持续走高(本文发布时),很多 黑苹果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 配置工具。

我们需要修改 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(启用)
  • 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(启用)
  • enable-hdmi-dividers-fix:用于修复 HDMI 无限循环重启,按需
    • 该值可以使用 DATA 和 NUMBER 两种格式
      • DATA:01000000(启用) 00000000(不启用)
      • NUMBER:0(不启用) 1(启用)
  • AAPL,GfxYTile:用于修复 Skylake HD530 核显在菜单栏/窗口左上角的“毛刺”,按需
    • 该值可以使用 DATA 和 NUMBER 两种格式
      • DATA:01000000(启用) 00000000(不启用)
      • NUMBER:0(不启用) 1(启用)
  • disable-external-gpu:用于笔记本关闭独立显卡(因为驱不动),DATA 格式,按需
    • 该值可以使用 DATA 和 NUMBER 两种格式
      • DATA:01000000(关闭独显) 00000000(不关闭)
      • NUMBER:0(不关闭) 1(关闭独显)
  • 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 设备属性)
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐