跳转至

核显接口输出定制

macOS 下使用核显输出的话,一般 DP 接口都是免驱的,如果使用 HDMI 的话可能显示器会黑屏或者颜色输出不正确,所以往往需要我们进行显示接口定制。

设备介绍

本次教程实用的设备信息如下:

类别
主板 AsRock Z490 Steel Legend
CPU i7-10700
GPU Intel UHD Graphics 630
接口 DP 1.4 + HDMI 1.4

OC 配置信息

言简意赅,由于我的主板基本上选项齐全,这里核显部分只注入了 ID 属性:

重启进入系统后,Hackintool 通过这个核显 ID,自动判断了当前的平台 ID 为:0x3E9B0007

查看接口信息

Hackintool 里面找到「应用补丁」-「接口」选择上面你看到的平台 ID,即可看到当前的接口情况:

可以看到,这个平台默认是 3 个接口,而且都走的是 DP,而我们的主板的接口如下:

是 1 个 HDMI + 1 个 DP 的经典组合,所以此时我们的 HDMI 并无信号显示,那么该怎么办可以让这个 HDMI 显示呢?不要慌,继续往下看。

显示接口类型

  • 02000000
  • LVDS 和 eDP 接口
  • 一般用于驱动笔记本内置显示器
  • 00040000
  • DP 接口
  • 一般 USB-C 里面内置的就是 DP 接口的显示器
  • macOS 下 DP 接口一般是免驱的
  • 00080000
  • HDMI 接口
  • macOS 下的 HDMI 一般都不可以正常显示的,得需要定制下接口数据
  • 10000000
  • VGA 接口
  • 10.8 版本后默认是不支持 VGA 显示器的
  • 如果你的 CPU 是 6代往后的话,实际上走的还是 DP 接口,所以当做 DP 接口驱动就行了
  • 04000000
  • 双链 DVI 接口
  • 这玩意基本上淘汰了
  • 00020000
  • 单链 DVI 接口
  • 这玩意基本上淘汰了
  • 80000000
  • S 端子接口
  • 这玩意基本上淘汰了
  • 01000000
  • 当没有物理显示接口的时候使用

查找官方手册

WhatGreen 的官方手册里查找我们当前这个平台 ID 的缓冲帧信息:

Model name: Intel UHD Graphics 630         ID: 3E9B0007
Mobile: 0, PipeCount: 3, PortCount: 3, FBMemoryCount: 3
[1] busId: 0x05, pipe: 9, type: 0x00000400, flags: 0x000003C7 - ConnectorDP
[2] busId: 0x04, pipe: 10, type: 0x00000400, flags: 0x000003C7 - ConnectorDP
[3] busId: 0x06, pipe: 8, type: 0x00000400, flags: 0x000003C7 - ConnectorDP
01050900 00040000 C7030000
02040A00 00040000 C7030000
03060800 00040000 C7030000

可以看到这个 3E9B0007 平台列出了 3 个总线 ID,我们将它们分解以便更容易理解,这里就拿第 1 个举个例子,详细解释可以看下图:

  • 「总线 ID 」是唯一的,多个接口不能共用
  • 「总线 ID」在大多数平台上的最大值为06
  • 「总线 ID」很关键,一般我们定制接口,实际上就是在摸索遍历这个值
  • 「通道」这个其实没有参考价值,大家可以根据手册里面不同平台建议的值来写
  • C7030000 属于标识符,根据手册查找填写就行了
  • 定制接口显示数还需要配合 framebuffer-patch-enable | Data | 01000000 使用

遍历接口 1

现在开始定制显示器接口 1,一般只需要遍历 busid 即可,索引号、通道、标识符保持手册里面查询的那样不变,将接口 1 指定为 HDMI 类型:

framebuffer-con0-alldata = 01010900 00080000 C7030000
framebuffer-con0-enable  = 01000000

最终的效果如下:

替换完重启看看,虽然 HDMI 没有工作,但是确实可以看到我们指定的 HDMI 接口类型生效了:

既然接口 1 使用 「总线 ID」为01 并不能成功,那么开始一个个尝试将其遍历到最大值 06

framebuffer-con0-alldata = 01020900 00080000 C7030000
framebuffer-con0-alldata = 01030900 00080000 C7030000
framebuffer-con0-alldata = 01040900 00080000 C7030000 (因为接口2也是总线ID4 所以记得拔掉DP)
framebuffer-con0-alldata = 01050900 00080000 C7030000
framebuffer-con0-alldata = 01060900 00080000 C7030000

每次遍历后开始重启,最多只要再重启 5 次即可,如果都不行的话说明这个「接口 1」压根就对应不上物理的 HDMI 接口,那么只能开始遍历「接口 3」了

遍历接口 3

将接口 3 启用,指定显示器类型为 HDMI,并从 「总线 ID」01 开始遍历,最多尝试重启 6 次电脑即可:

framebuffer-con2-alldata = 03010800 00080000 C7030000
framebuffer-con2-alldata = 03020800 00080000 C7030000
framebuffer-con2-alldata = 03030800 00080000 C7030000
framebuffer-con2-alldata = 03040800 00080000 C7030000 (因为接口2也是总线ID4 所以记得拔掉DP)
framebuffer-con2-alldata = 03050800 00080000 C7030000
framebuffer-con2-alldata = 03060800 00080000 C7030000

幸运的是,我们最终尝试了「总线 ID」为04的时候成功了:

framebuffer-con2-alldata = 03040800 00080000 C7030000

因为我们的接口 2 也是走的「总线 ID」 04,所以此时同时插上 DP 和 HDMI 的话两个显示器均无法正常显示,所以得先拔掉 DP 线也就是接口 2 进行测试,最终发现 HDMI 接口成功点亮了显示器:

但是呢,此时因为接口 2 和 3 「总线 ID」冲突的原因,我们得手动将接口 2 换成其他的「总线 ID」,同样都得遍历一遍:

framebuffer-con1-alldata = 02010A00 00040000 C7030000
framebuffer-con1-alldata = 02020A00 00040000 C7030000
framebuffer-con1-alldata = 02030A00 00040000 C7030000
framebuffer-con1-alldata = 02050A00 00040000 C7030000
framebuffer-con1-alldata = 02060A00 00040000 C7030000

幸运的是,我们最终尝试了「总线 ID」为02的时候成功了:

framebuffer-con1-alldata = 02020A00 00040000 C7030000

同时记得多显示器的话,配合启动项:igfxonln=1 来使用。

最终效果

最终我们再重启了近 10 次电脑的情况下, DP 和 HDMI 接口终于可以同时点亮显示器了:

授人以渔

猜测其实各大主板厂商的这些主板都是有规律的,所以这个文章下面可以放一些常见的组合案例,因为国光我 1 个人精力有限,所以也欢迎评论区下面共享你们的成功案例(附上主板型号 和接口数据 就行了), 具体格式可以参考下面:

华擎 AsRock

  • DP + HDMI:Z490 Steel Legend
framebuffer-con1-alldata = 02020A00 00040000 C7030000
framebuffer-con2-alldata = 03040800 00080000 C7030000 
  • DP + HDMI:Z490 Extreme4(来自网友Emiliaヾ QQ 号:466672813 分享提供)
framebuffer-con2-alldata = 03040800 00080000 C7030000

华硕 ASUS

  • DP + HDMI:ROG STRIX B460-I GAMING(来自网友乌龙蜜桃来一打 QQ 号:47997806 分享提供)
framebuffer-con0-alldata = 01060900 00040000 C7030000
framebuffer-con1-alldata = 02040A00 00080000 C7030000
  • DP + HDMI:Z170I PRO GAMING(来自网友乌龙蜜桃来一打 QQ 号:47997806 分享提供)
framebuffer-con0-alldata = 01050900 00080000 C7030000 
  • DP + HDMI:TUF GAMING B460M-PRO(来自网友落幕 QQ 号:2662452310 分享提供)
framebuffer-con1-alldata = 02060A00 00080000 C7030000 
  • HDMI + DVI:TUF B360M-PLUS GAMING(来自网友 QQ 号:136046797 分享提供)
framebuffer-con1-alldata = 02020A00 00080000 C7030000 
  • 华硕飞行堡垒6 FX504GE HM370 芯片组(来自网友XRC QQ 号:3127679723 分享提供)
framebuffer-con2-alldata =01050900 00080000 C7010000

戴尔 Dell

  • HDMI + VGA:Vostro 3260 100系(来自网友梦卿樱似屿 QQ 号:209241494 分享提供)
AAPL,ig-platform-id = 00001259
framebuffer-con0-alldata = 01050900 00080000 C7030000
framebuffer-con1-alldata = 02000A00 00040000 C7030000 (VGA 可能不行)

微星 MSI

  • HDMI:MAG B365M MORTAR (来自群网友 QQ 号:9351991 分享提供)
framebuffer-con0-alldata = 01050900 00080000 C7030000
  • DP + HDMI:MPG Z390 GAMING PRO CARBON AC(来自群网友 苏格拉没有底分享提供)
framebuffer-con0-alldata = 01010900 00080000 C7030000 
  • DP + HDMI:MAG B460M MORTAR(来自网友Emiliaヾ QQ 号:466672813 分享提供)
framebuffer-con0-alldata = 01010800 00080000 C7030000
  • DP + HDMI + 雷电:MEG Z490I UNIFY(来自群网友 知世 QQ 号:2517714649 分享提供)
framebuffer-con0-alldata = 01010900 00080000 C7030000

联想 Lenovo

  • HDMI:扬天 S540-14-IWL-HDMI(来自群网友 璃朴:2914406369 分享提供)
framebuffer-con1-alldata = 01010900 00080000 C7010000
  • HDMI + VGA:V330-15IKB LNVNB161216 芯片组(来自群网友 风之翼:1716890278 分享提供)
framebuffer-con1-alldata = 01050900 00040000 87010000
framebuffer-con2-alldata = 02040A00 00080000 87010000

技嘉 GIGABYTE

  • DP + HDMI:B360M AORUS PRO
framebuffer-con0-alldata = 01050900 00040000 C7030000
framebuffer-con2-alldata = 03040800 00080000 C7030000

最后更新: 2022-09-19