Home

Awesome

范例

https://github.com/cattyhouse/opencore-efi-instance

本文现在只能做一个大致的参考, OpenCore每天都在变化, 请以官方的文档为主

更新记录

已知问题和解决方法

iGPU 在解码编码过程中频率不超过 0.5 Ghz. 相关 issue

针对 iMac19,2 和 iMac19,1 的 SMBIOS.

总结: 如果有 AMD 独立显卡, 直接使用 iMacPro1,1, 关闭 iGPU, 一了百了.

iGPU 无法播放 Apple TV 里面的电视剧和电影, 相关 issue1, issue2

针对 iMac19,2 和 iMac19,1 的 SMBIOS.

总结: 如果有 AMD 独立显卡, 直接使用 iMacPro1,1, 关闭 iGPU, 一了百了.

开启网络唤醒后, Wi-Fi ping 延迟在睡眠唤醒后非常高

解决方法 1 :

解决方法 2 :

唤醒后蓝牙硬件找不到

资源:

  1. OpenCore 的官方下载地址: OpenCore
  2. 与 OpenCore 配合使用的 kexts, efi 下载地址: kexts

Wiki

wiki 会放一些OpenCore使用过程中的一些经验

关于本文

黑苹果与白苹果的主要区别

2006年乔布斯将苹果电脑使用的处理器从IBM转向Intel之后, 在普通PC上安装macOS的大门才算正式开启, 随着硬件的发展, PC与苹果电脑的差异越来越小, 黑苹果越来越接近苹果电脑, 目前的区别主要在于EFI以及ACPI.

所以接下来的内容就非常明了:

OpenCore的优缺点

优点

缺点

从 Recovery DMG 安装 macOS

OpenCore安装与配置

OpenCore的文件结构

首先, 我们看看一个已经配置好的 OpenCore 的文件结构, 在 EFI 分区 (/Volumes/EFI/) 下面, 有一个 EFI 文件夹, 内容如下


EFI
│   ├── BOOT
│   │   └── BOOTx64.efi
│   └── OC
│       ├── ACPI
│       │   ├── SSDT-PLUG.aml
│       ├── Drivers
│       │   ├── ApfsDriverLoader.efi
│       │   ├── FwRuntimeServices.efi
│       │   ├── HFSPlus.efi
│       ├── Kexts
│       │   ├── AppleALC.kext
│       │   ├── IntelMausi.kext
│       │   ├── Lilu.kext
│       │   ├── SMCProcessor.kext
│       │   ├── SMCSuperIO.kext
│       │   ├── VirtualSMC.kext
│       │   └── WhateverGreen.kext
│       ├── OpenCore.efi
│       ├── Tools
│       │   └── Shell.efi
│       └── config.plist

简单说明如下, 蓝色高亮的是下载链接, 都是指向原作者的最新版.

所以, OC下面总共有4个文件夹, 1个主文件, 和一个配置文件, 是不是非常简洁

搭积木 - 从零开始组建OpenCore

相信看完 OpenCore的文件结构, 心里已经有底了, 我们从 0 开始玩, 以下终端操作, 当然也可以在 Finder 里面鼠标操作, 结果是一样.

配置config.plist

  1. 推荐值:

    • 重要的事情说三遍: 用U盘做测试 用U盘做测试 用U盘做测试
    • AvoidRuntimeDefrag=YES , 必要项目
    • DisableVariableWrite=YES, 100/200/300系列主板没有nvram的, 需要YES, 如果设置为 NO, 那么表现就是睡眠会自动重启. 通常 z370 主板不需要开启此选项.
    • EnableWriteUnprotector=YES, 必要项目
    • SSDT-AWAC.dsl, 300系列主板, 新版本BIOS必须要的SSDT, 需要编译为 aml 才可以使用. 具体google搜索如何把 dsl 编译为 aml. 加载方法见下面的说明. 如果想了解它的作用, 可以看这里的 原理分析
    • Kernel/Add Lilu.kext 必须永远在第一条
    • AppleCpuPmCfgLock=YES, AppleXcpmCfgLock=YES, AppleXcpmExtraMsrs=YES 如果主板有 CFG LOCK 且无法从 BIOS 里面关掉的话,如果可以 BIOS 关掉 CFG LOCK, 这三个选项都设置为 NO
    • PanicNoKextDump=YES 启动过程中如果崩溃了, 禁止 Kext Dump, 这样可以看到具体引起崩溃的原因 (backtrace)
    • 启动参数在 config.plist/NVRAM/Add/7C436110-AB2A-4BBB-A880-FE41995C9F82/boot-args 这里加入或者修改. 建议的启动参数为 -v alcid=1 keepsyms=1 debug=0x100 , 其中: -v 跑码, alcid=1 声卡id注入, keepsyms=1 debug=0x100 系统崩溃不自动重启, 方便查看崩溃原因.
    • XhciPortLimit=YES, 取消 macOS 15个 USB 端口的限制
    • ConnectDrivers=YES, 让 *.efi 文件可以顺利加载
    • ConsoleControl=YES, 更好的控制opencore菜单
    • IgnoreTextInGraphics=YES, 修复一些图形界面显示部分文字消息的问题
    • ProvideConsoleGop=YES, 一般需要为YES, 否则看不到 apple logo
    • RequireSignature=NO, RequireVault=NO, 关闭 OpenCore 的文件校验功能, 否则启动不了, 等你玩熟悉了可以去玩玩这个功能. 必要项目
    • PollAppleHotKeys=NO, 关闭菜单界面的快捷键功能, 这个功能目前兼容性不是很好.
    • Automatic=YES, 根据 Generic 里面的信息自动注入 SMBIOS 所需要的其他信息.
    • shikigva=80 , 加入这个启动参数, 实现用 AMD GPU 解码 Apple Tv, 解决无法播放的问题.
  2. EFI下面的每一个 kext, efi, aml, 都必须在config.plist里面有对应的条目, 且设置为Enabled=YES, 否则他们不会加载

    • OC/ACPI/*.aml 对应 config.plist/ACPI/Add
    • OC/Drivers/*.efi 对应 config.plist/UEFI/Drivers
    • OC/Kexts/*.kext 对应 config.plist/Kernel/Add
    • OC/Tools/*.efi 对应 config.plist/Misc/Tools
    • 附图举例, config.plist/UEFI/Drivers/ 下面配置了5个条目, 要保证 OC/Drivers/ 下面有这5个efi, 否则启动会提示出错. 同样 OC/Drivers/ 下面如果有efi没有加入config.plist里面,是不会被加载的. 所以我上面提到的这4个一一对应的地方, 要反复核对, 确保没有疏忽. 1to1
  3. 如果config.plist里面有条目, 但是OC文件夹下面的子文件夹没有对应的文件, 启动会报错, 所以两者必须是一一对应.条目被设置为Enabled=NO,除外.

  4. 如果想新增一个条目, 那么可以右键点击已有条目,选择 Duplicate, 然后做相应的修改

  5. 新增kext的注意事项

    • 以附图为例附图
    • 注意kext里面是否有可执行文件, 如果有, 需要按图填入 ExecutablePath 如果没有,这个地方留空.
    • 查看kext的内容, 可以右键点击kext, 然后选择show package contents
  6. 如果是从Clover过来的, 使用了比如rename EHC1 to EH01 (此处为举例, 这个 rename 只在很旧的主板上需要), 这样的补丁, 可以将他们添加到config.plist/ACPI/Patch, 并设置Enabled=YES 让其生效. 注意Count=0 表示搜索整个DSDT表,直到搜不到为止, Skip=0 表示从头搜到尾. TableSignature=44534454 表示搜索DSDT表(因为DSDT的hex为44534454), TableSignature=0 表示搜索整个ACPI表, 包括SSDT表.

  7. config.plist里面有很多Quirks, 可以理解为作者预设好的补丁, 减轻使用者的负担, 每个Quirks的作用, 可以查阅Docs/Configuration.pdf

  8. DeviceProperties/Add 里面的参数, 可以设置比如iGPU的AAPL,ig-platform-id等等, 具体阅读 whatevergreen.kext github 页面的文档

  9. 最后, 这个config.plist是没有序列号等等信息的, 只需要填 PlatformInfo/Generic 里面的5个项目, 可以 通过macserial生成

    1. macserial --help 获取帮助
    2. macserial -m iMacPro1,1 示例生成iMacPro1,1的 SystemSerialNumberMLB
    3. 找个在线生成 UUID 的地方, 可以生成 SystemUUID
    4. 找个在线生成 MAC Address 的地方, 生成一个网卡地址, 去掉 : 或者 -, 转换为大写, 填入 ROM
  10. 如果选择玩启动项目的数字就卡住, 开了debug显示 Failed to find first BOOT_MODE_SAFE | BOOT_MODE_ASLR sequence 有可能是MSR寄存器的问题, 可以尝试设置 IgnoreInvalidFlexRatio=YES