黑苹果OpenCore迁移 (火影地狱火x6 i7-8750H)

EFI 435b
更新到 macOS 13 Ventura

macOS 13

一、安装OpenCore

首次迁移应该先尝试U盘引导现有系统,稳定后再迁移到本地硬盘。
准备一个刻录好安装镜像的U盘,直接干掉U盘引导分区的文件,把编译好的OpenCore/OpenCorePkgBeta解压x64/EFI到U盘引导分区根目录。

解压引导文件

解压Docs/Sample.plist文件到EFI/OC文件夹,并修改文件名为config.plist

配置文件模板

懒人必备OpenCore Configurator,下载后打开刚才的的config.plist,二话不说关掉加密保护,否则开机引导会报"no vault provided",将Misc/Security/Vault设置为OptionalMisc/Security/SecureBootMode设置为Disabled,然后保存即可。

关闭加密

二、核心驱动

2.1 安装必要的驱动。

先确保能进入登录界面,为排除干扰,只安装能开机的驱动。

  • Lilu,内核扩展,显卡,声卡等一些硬件驱动的前置驱动。
  • VirtualSMC,仿冒水果机的某个控制芯片。
  • WhateverGreen,A卡、牙膏厂核显驱动。游戏本都是N卡,双屏只能靠雷电接口(暗夜精灵/微星/各种轻薄本)或者无线投屏(隔空播放)。
    N卡用无线投屏器也能凑合双屏 RDM调分辨率和刷新率

把压缩包的*.kext拖到EFI/OC/Kexts下。

2.2 检查配置文件

OCC检查一下配置文件,看看还默认配置了哪些驱动,取消勾选或者补全。

补全扩展驱动

默认勾上了AppleALC,顺便就补上去,以免卡引导。

检查UEFI驱动,前缀#表示禁用,没有的驱动补回去。

复制到EFI/OC/Drivers

发现缺少HfsPlus.efi,可以直接从CLOVER拷过去。

配置最基本的驱动

2.3 禁用独显

引导过程最后会花屏,是因为独显没禁掉。
按最少折腾的方法,添加几个参数就好了。

屏蔽独显方法

  • DeviceProperties/Add/PciRoot(0x0)/Pci(0x2,0x0) 添加
    disable-external-gpu 01000000
  • 添加引导参数
    boot-args -wegnoegpu
屏蔽独显,添加引导参数

往显卡设备PciRoot(0x0)/Pci(0x2,0x0)添加属性,这个步骤跟核显缓冲帧打补丁重合。
使用Hackintool生成配置,或者直接从CLOVER复制过去,随便还把声卡layout-id给搞了。

复制配置

确认XML结构,防止贴错位置

2.4 引导修复

机型差异,抄作业参考常见引导问题。

  • Missing key LoadEarly
    OpenCore版本与编辑器的版本不一致,导致保存后缺失选项,编辑器支持通常会滞后,降级就好了,对齐版本或者用VSCode编辑。

  • In Memory Panic Stackshot Succeeded
    集显没有配置显存,给缓冲帧打补丁。

  • AppleNVME Assert Failed
    缺少SSDT-EC.aml,把OpenCore压缩包Docs/AcpiSamples下面的补丁拖到OC/ACPI下,OCC勾上对应补丁,保存。

    禁用EC

  • disk %d : device is write locked
    居然是博通网卡驱动问题,搞死我了,瞬间感觉AC9462真香。
    Big sur需要禁用掉子驱动AirportBrcmFixup.kext/Contents/PlugIns/AirPortBrcm4360_Injector.kext

    11.0禁用

  • 安装后BIOS时钟停止
    去除RTC相关驱动、修补。
    按网上的方法,刻录个Ubuntu安装盘,进入试用模式后重启。

  • 引导卡rt.gv wake-failure[EXITBS:START]
    打开配置文件,搜索并设置以下项目为true
    AppleCpuPmCfgLock
    AppleXcpmCfgLock
    IgnoreInvalidFlexRatio
    通常是刷过BIOS,进入BIOS然后选择Restore Defaults还原配置。

  • 引导卡 successful initialized nvme driver
    把新版本OpenCore压缩包的SSDT-EC.aml拖到ACPI文件夹,不要复制旧版的。

三、扩展驱动

其他驱动,附录1

  • HoRNDIS.kext - 共享安卓机USB网络
  • NVMeFix.kext - 固态优化
  • NoTouchID.kext - 禁用TouchID
  • CPUFriend - 睿频优化什么的,配合一键生成CPUFriendDataProvider.kext

3.1 通用键鼠驱动

VoodooPS2Controller,驱动笔记本自带键盘,以免进了登录界面输不了密码。
驱动拖到EFI/OC/Kexts下,OCC驱动选择快照添加:

驱动添加新姿势

选择U盘的EFI/OC/Kexts目录,会自动刷新出新的驱动条目,手动加万一加错了。

不要选错目录

3.2 USB驱动

USBInjectAll,原来普通外接键盘的指示灯是不亮的。

3.3 有线网卡

选择网卡型号匹配的驱动,RTL8111下载安装RealtekRTL8111.kext

下载对应驱动

OpenCore需要手动设置传输模式,否则就一直显示电缆被拔出。

系统偏好>网络>以太网>高级>硬件
新坑

3.4 屏幕背光

不要搞错下载目录

下载SSDT-ALS0.amlSSDT-PNLF.aml(第8代CPU下载SSDT-PNLF-CFL.aml),注意目标分区不要选错,或者从OpenCore压缩包Docs/AcpiSamples里面拖。

亮度调节和记忆补丁

引入SMCLightSensor.kext,点击快照添加,选中EFI/OC/Kexts文件夹,勾选上SMCLightSensor.kext

仿冒光线传感器
背光调节

3.5 声卡驱动

安装AppleALC,挨个试layout-idALC269注入66,麦克风居然活了。

注入alc-delay防止开机间歇性掉声卡。

ALC269注入66,数据类型可以选数字
MIC

ALC269驱动
Hackintool声卡修补
常见声卡layout-id
声卡内建

顺手搞一下

3.6 触摸板

VoodooI2C,驱动支持,摸得动就行。

VoodooI2C触摸板驱动教程

触摸板驱动依赖电池驱动,电量显示有问题,触摸板能摸但是偏好设置是检测不出的。

触摸板能进行基本的使用

驱动拖到EFI/OC/Kexts,使用OCC快照添加,刷新出子驱动,然后调整驱动加载顺序,VoodooInput.kext不勾选。
VoodooI2Cservice.kext
VoodooGPIO.kext
VoodooI2C.kext
VoodooI2CHID.kext

多个子驱动,可能会要求加载顺序

3.6 电池驱动

OpenCore 0.7.5后不再需要拆分变量了,热补丁配合SMCBatteryManager.kext可能没有效果,除非用老方法注入DSDT.aml强制覆盖。
注入ECEnabler.kext、SMCBatteryManager.kextSSDT-EC.aml即可。

Battery Status

OpenCore所有系统共用一套引导配置,以往四叶草针对水果系统直接改DSDT的方式可能会导致Windows系统出问题。

关于OpenCore引导双系统的一些总结和讨论

总之就是推荐使用分支判断+HotPatch

(Science online)电池热补丁指南 (Guide for Battery Hotpatch)
ASL编程语言
MaciASL补丁制作实战
用一次实战记录电池热补丁的编写方法
关于电量补丁大于32位字段补丁偏移计算

热补丁的原理在用高级语言表达就是拦截或代理,跟直接修改DSDT.aml一样,都需要加上系统的分支判断和重写并回调原函数,直接改DSDT.aml不用写更名规则。

直接改可以排除更名补丁影响,稳定后迁移代码为热补丁文件

懒人是不用算偏移量的,用不上的变量全部留空完事,快进到表达式替换。

变量拆分

表达式替换完,把原装函数改个名称,热补丁需要配合SSDT改名补丁使用。

添加热补丁
本机型只需要改两个函数

Hex Fiend来核查改名补丁的替换范围,例如45434245 00替换为58434245 00,即ECBE to XCBE,末尾的00不是可有可无的,二进制替换容易替换掉未知领域,使用文本编辑器不容易觉察。

核查替换范围,这是正确的替换

这是错误的替换,所以必须加上额外字符约束

在函数_BIF中,如果ECBE被替换掉那么回调的永远是原装函数,全部白写。

Method (_BIF, 0, NotSerialized)  // _BIF: Battery Information
{
    If (ECON)
    {
        ECBE ()
    }
    Else
    {
        Store (0xFFFFFFFF, Index (PAK0, One))
        Store (0xFFFFFFFF, Index (PAK0, 0x02))
        Store (0xFFFFFFFF, Index (PAK0, 0x04))
        Store ("Error", Index (PAK0, 0x09))
        Store ("00000", Index (PAK0, 0x0A))
        Store ("Error", Index (PAK0, 0x0B))
        Store ("Error", Index (PAK0, 0x0C))
    }

    Return (PAK0)
}

折腾后,电量显示了,触摸板也回来了。

热补丁生效

3.7 无线网卡

3.7.1 Broadcom

联想DW1560

AirportBrcmFixup
BrcmPatchRAM
OCC快照添加。
AirportBrcmFixup.kext
BrcmBluetoothInjector.kext(Monterey 12.0 替换为BlueToolFixup.kext
BrcmFirmwareData.kext
BrcmPatchRAM3.kext

无线
蓝牙

3.7.2 Intel

Intel WIFI驱动开发进展

原装网卡有救了,狂喜,赶紧卸了博通装回AC9462试试。

  • 蓝牙
    IntelBluetoothFirmware
    游戏本上网主要还是插网线,无线设备就只能通过蓝牙了。

    连接状况良好

  • 无线 AirportItlwm / itlwm

    WiFi驱动

看说明暂时是两种方案,互斥。

AirportItlwm.kext
试了下隔空投送,搜不到手机。
Speedtest搞了下,掉速,不过足够应付在线1080P视频。

DW1560

AC9462

itlwm.kext + HeliPort客户端
居然搜不到电脑旁边路由的SSID,屋外的倒是可以。
选择“加入其他网络”,手动输入SSID和密码,成功连上。
空投协议还是不支持,不知道是网卡还是驱动问题,只能以后再试了,换回了博通。

对于游戏本,使用上是可以接受的范围,蓝牙连接情况良好,而上网一般都是插网线,对于今后的新机器而言,考虑到驱动完善上的可能性,并且只是作为辅佐系统的话可以不用换网卡,主力系统Windows不存在驱动问题。

3.8 睡眠修复

各种问题,白苹果的体验基本是不存在的,主要是防止挂机到息屏后不能唤醒只能强制断电。

1、使用Hackintool辅助,USB内建,保留USBInjectAll.kext需要添加SSDT-UIAC.aml修补。
SSDT-EC-USBX.aml包含SSDT-EC,添加可能会使电池驱动失效。

2、添加HibernationFixup.kext

顺序拖到Lilu.kext后面

3、8代或以上核心,SSDT-PMC.aml

点下载/更新Acpi文件

四、引导迁移

复制U盘EFI/OC到硬盘引导分区下面,复制U盘BOOT/BOOTx64.efi到硬盘的OC目录下。
Booter/Quirks/SyncRuntimePermissions打上勾,否则引导Windows会蓝屏。


换到PE环境下用BOOTICEx64.exe添加UEFI引导即可,可能还需要进BIOS调整本地硬盘的引导顺序,把OpenCore调到前面。

检查所有SSDT,出现Device定义的,加上系统判断,UIAC.amlSSDT-EC.amlALS0.aml等。 例如UIAC.aml不补充修改,Windows设备管理器会出现未知设备UIAC

补充分支判断

开启图形界面:


扫描策略改为0完事
自制的界面使用Modern前缀
界面引擎驱动和截图驱动

自定义启动项:

使用Opencore引导ubuntu以及Linux的步骤
切换到FS0FS1...导出映射表。

添加自定义图标,放在引导项的同一目录:


自定义项目图标

你可能感兴趣的:(黑苹果OpenCore迁移 (火影地狱火x6 i7-8750H))