毒盘 EFI 435b
一、安装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
设置为Optional
,Misc/Security/SecureBootMode
设置为Disabled
,然后保存即可。
sonoma
后会机型检测,不通过会提示与该mac
不兼容,随便找个能用的EFI
拷贝PlatformInfo
项目即可。
二、核心驱动
2.1 安装必要的驱动。
先确保能进入登录界面,为排除干扰,只安装能开机的驱动。
- Lilu,内核扩展,显卡,声卡等一些硬件驱动的前置驱动。
- VirtualSMC,仿冒水果机的某个控制芯片。
-
WhateverGreen,A卡、牙膏厂核显驱动。游戏本都是N卡,双屏只能靠雷电接口(暗夜精灵/微星/各种轻薄本)或者无线投屏(隔空播放)。
把压缩包的*.kext
拖到EFI/OC/Kexts
下。
2.2 检查配置文件
OCC
检查一下配置文件,看看还默认配置了哪些驱动,取消勾选或者补全。
默认勾上了AppleALC,顺便就补上去,以免卡引导。
检查UEFI
驱动,前缀#
表示禁用,没有的驱动补回去。
发现缺少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
给搞了。
2.4 引导修复
机型差异,抄作业参考常见引导问题。
Missing key LoadEarly
OpenCore
版本与编辑器的版本不一致,导致保存后缺失选项,编辑器支持通常会滞后,降级就好了,对齐版本或者用VSCode
编辑。In Memory Panic Stackshot Succeeded
集显没有配置显存,给缓冲帧打补丁。-
AppleNVME Assert Failed
缺少SSDT-EC.aml
,把OpenCore
压缩包Docs/AcpiSamples
下面的补丁拖到OC/ACPI
下,OCC
勾上对应补丁,保存。
-
disk %d : device is write locked
居然是博通网卡驱动问题,搞死我了,瞬间感觉AC9462
真香。
Big sur
需要禁用掉子驱动AirportBrcmFixup.kext/Contents/PlugIns/AirPortBrcm4360_Injector.kext
。
安装后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
文件夹,不要复制旧版的。XCPM: registered
OpenCore Legacy Patcher
相关,移除AMFIPass.kext
,引导参数添加amfi=0x80
。
三、扩展驱动
其他驱动,附录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.aml
和SSDT-PNLF.aml
(第8代CPU下载SSDT-PNLF-CFL.aml
),注意目标分区不要选错,或者从OpenCore
压缩包Docs/AcpiSamples
里面拖。
引入SMCLightSensor.kext
,点击快照添加,选中EFI/OC/Kexts
文件夹,勾选上SMCLightSensor.kext
。
3.5 声卡驱动
安装AppleALC,挨个试layout-id
。ALC269
注入66
,麦克风居然活了。
注入alc-delay
防止开机间歇性掉声卡。
3.6 触摸板
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.kext
、SSDT-EC.aml
即可。
OpenCore
所有系统共用一套引导配置,以往四叶草针对水果系统直接改DSDT
的方式可能会导致Windows
系统出问题。
总之就是推荐使用分支判断+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
AirportBrcmFixup
BrcmPatchRAM
OCC
快照添加。
AirportBrcmFixup.kext
BrcmBluetoothInjector.kext
(Monterey 12.0 替换为BlueToolFixup.kext
)
BrcmFirmwareData.kext
BrcmPatchRAM3.kext
Sonoma博通驱动补充
Sonoma
移除了博通驱动,按以上步骤添加驱动后,需要额外注入,使用该方案root patch
状态下会使系统更新不可用,每次更新都要还原。
NVRAM > Add > 7C436110-AB2A-4BBB-A880-FE41995C9F82
,csr-active-config
设置03080000
,boot-args
添加ipc_control_port_options=0 -amfipassbeta -brcmfxbeta brcmfx-country=HK
-
NVRAM > Delete > 7C436110-AB2A-4BBB-A880-FE41995C9F82
添加csr-active-config
-
禁用原生驱动
com.apple.iokit.IOSkywalkFamily
,设置最小内核23.0.0
Misc > Security > SecureBootModel > Disabled
补充驱动
AMFIPass.kext
-
调整驱动顺序,并设置最小内核
23.0.0
:- AMFIPass.kext
- IOSkywalkFamily.kext
- IO80211FamilyLegacy.kext
- IO80211FamilyLegacy.kext/Contents/PlugIns/AirPortBrcmNIC.kext
-
重启后,下载
OpenCore-Patcher-GUI.app
,如果上面步骤没有遗漏,Start Root Patching
是启用状态,并提示无线驱动可修复
Sequoia博通驱动补充
安装前移除AMFIPass.kext
,引导参数添加amfi=0x80
,安装OpenCore Legacy Patcher 2.0.1+
,不需要AMFIPass.kext
,Start Root Patching
后重启即可。
3.7.2 Intel
原装网卡有救了,狂喜,赶紧卸了博通装回AC9462
试试。
-
蓝牙
IntelBluetoothFirmware
游戏本上网主要还是插网线,无线设备就只能通过蓝牙了。
-
看说明暂时是两种方案,互斥。
AirportItlwm.kext
试了下隔空投送,搜不到手机。
Speedtest搞了下,掉速,不过足够应付在线1080P视频。
itlwm.kext + HeliPort客户端
居然搜不到电脑旁边路由的SSID
,屋外的倒是可以。
选择“加入其他网络”,手动输入SSID
和密码,成功连上。
空投协议还是不支持,不知道是网卡还是驱动问题,只能以后再试了,换回了博通。
对于游戏本,使用上是可以接受的范围,蓝牙连接情况良好,而上网一般都是插网线,对于今后的新机器而言,考虑到驱动完善上的可能性,并且只是作为辅佐系统的话可以不用换网卡,主力系统Windows
不存在驱动问题。
3.8 睡眠修复
各种问题,白苹果的体验基本是不存在的,主要是防止挂机到息屏后不能唤醒只能强制断电。
1、使用Hackintool
辅助,USB内建,保留USBInjectAll.kext
需要添加SSDT-UIAC.aml
修补。
SSDT-EC-USBX.aml
包含SSDT-EC
,添加可能会使电池驱动失效。
3、8代或以上核心,SSDT-PMC.aml
。
四、引导迁移
复制U盘EFI/OC
到硬盘引导分区下面,复制U盘BOOT/BOOTx64.efi
到硬盘的OC
目录下。
Booter/Quirks/SyncRuntimePermissions
打上勾,否则引导Windows
会蓝屏。
换到
PE
环境下用BOOTICEx64.exe
添加UEFI
引导即可,可能还需要进BIOS
调整本地硬盘的引导顺序,把OpenCore
调到前面。
检查所有SSDT
,出现Device
定义的,加上系统判断,UIAC.aml
、SSDT-EC.aml
、ALS0.aml
等。 例如UIAC.aml
不补充修改,Windows
设备管理器会出现未知设备UIAC
。
开启图形界面:
自定义启动项:
使用Opencore引导ubuntu以及Linux的步骤
切换到FS0
、FS1
...导出映射表。
添加自定义图标,放在引导项的同一目录:
五、疑难杂症
屏蔽PM981
Sonoma
整了个莫名其妙的东西扫描硬盘,扫描到PM981
就会突发恶疾。
没办法只好屏蔽了,参考,OCC
添加设备路径,设置属性使其不识别。
<key>PciRoot(0x0)/Pci(0x1,0x1)/Pci(0x0,0x0)</key>
<dict>
<key>IOName</key>
<string>#display</string>
<key>class-code</key>
<data>/////w==</data>
<key>name</key>
<string>#display</string>
</dict>
屏蔽后的设备会显示为传统设备,这个鬼东西还可以弹出主硬盘,你点错了就直接死机。
不能登录Apple账号
参考,终端执行:
sudo rm -rf /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist*