本文档解释了在 Docker-OSX 系统中如何配置和使用 OpenCore。OpenCore 作为 macOS 在虚拟化环境中的引导加载程序,通过使用 QEMU/KVM 虚拟化在 Docker 容器内运行操作系统。
有关与 OpenCore 配置密切相关的序列号生成信息,请参阅 序列号生成。
OpenCore 是 macOS 的开源引导加载程序,通过结构化的属性列表 (plist) 文件提供了一种干净、声明式的配置方法。在 Docker-OSX 中,OpenCore 通过加载必要的驱动程序、应用补丁和配置系统参数,确保与虚拟化环境的兼容性,从而促进 macOS 的引导过程。
来源:custom/config-nopicker-custom.plist custom/opencore-image-ng.sh
Docker-OSX 中的 OpenCore 配置主要基于一个自定义的 plist 文件 (`config-nopicker-custom.plist`),其中包含控制引导过程和系统功能的各种部分。
来源:custom/config-nopicker-custom.plist1-4 custom/config-nopicker-custom.plist1024-1064
ACPI 部分控制系统表、设备和电源管理功能。在 Docker-OSX 中,此部分主要管理:
Docker-OSX 中使用的主要 SSDT 文件
| SSDT 文件 | 目的 | 默认启用 |
|---|---|---|
| SSDT-EC.aml | macOS 的伪造嵌入式控制器 | 是 |
| SSDT-PLUG.aml | CPU 电源管理 | 是 |
| SSDT-DTGP.aml | 添加 DTGP 方法 | 是 |
| SSDT-EHCI.aml | USB 2.0 注入 | 是 |
来源:custom/config-nopicker-custom.plist8-274
Kernel 部分管理 kext(内核扩展)、补丁和内核操作的 Quirks。
来源:custom/config-nopicker-custom.plist340-784
PlatformInfo 部分定义了虚拟机的身份标识,包括型号类型、序列号和硬件信息,供 macOS 使用。
来源:custom/config-nopicker-custom.plist1024-1064
NVRAM 部分配置持久化变量,这些变量控制引导行为、系统功能和传递给 macOS 内核的参数。
| GUID | 键 | 值 | 目的 |
|---|---|---|---|
| 7C436110-AB2A-4BBB-A880-FE41995C9F82 | boot-args | -v keepsyms=1 tlbto_us=0 vti=9 {{KERNEL_ARGS}} | 内核引导参数 |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82 | csr-active-config | ZwAAAA== (0x67) | 系统完整性保护配置 |
| 7C436110-AB2A-4BBB-A880-FE41995C9F82 | prev-lang:kbd | ZW4tVVM6MA== (en-US:0) | 默认键盘布局 |
| 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14 | UIScale | AQ== (1) | UI 缩放因子 |
来源:custom/config-nopicker-custom.plist937-1022
UEFI 部分配置 OpenCore 的 UEFI 环境、驱动程序和界面设置。
来源:custom/config-nopicker-custom.plist1065-1398
Docker-OSX 使用模板系统,在 OpenCore 配置中包含占位符,这些占位符在运行时会被实际值替换。
| 可变 | 描述 | 示例值 |
|---|---|---|
| {{DEVICE_MODEL}} | macOS 设备型号标识符 | MacBookPro15,1 |
| {{SERIAL}} | 系统序列号 | C02XG0FDH7JY |
| {{BOARD_SERIAL}} | 主板序列号 | C02839303QXH69FA8 |
| {{UUID}} | 系统 UUID | 5CCB366D-9118-4C61-A00A-E5BAF3BED451 |
| {{ROM}} | MAC 地址(数据格式) | ESIzAAAA== |
| {{WIDTH}} | 屏幕宽度(像素) | 1920 |
| {{HEIGHT}} | 屏幕高度(像素) | 1080 |
| {{KERNEL_ARGS}} | 额外的内核参数 | -framework unloadable |
来源:custom/config-nopicker-custom.plist1-3 custom/config-nopicker-custom.plist1036-1052 custom/config-nopicker-custom.plist960 custom/config-nopicker-custom.plist1325
Docker-OSX 使用一个脚本 (`opencore-image-ng.sh`) 来创建 OpenCore 引导磁盘镜像(qcow2 格式)。此过程创建一个 GPT 分区的磁盘,其中包含一个 EFI 系统分区,该分区包含 OpenCore 及其配置。
来源:custom/opencore-image-ng.sh72-165
当 Docker-OSX 启动时,它遵循此引导顺序:
来源:custom/opencore-image-ng.sh
为了优化性能,请考虑以下 OpenCore 配置更改:
Kernel > Emulate 设置。WhateverGreen.kext 已启用。如果遇到启动问题:
boot-args` 中。来源:custom/config-nopicker-custom.plist960
OpenCore 的显示设置在 UEFI 部分配置,分辨率由 `{{WIDTH}}` 和 `{{HEIGHT}}` 占位符定义。
<key>Resolution</key>
<string>{{WIDTH}}x{{HEIGHT}}@32</string>
默认配置使用 OpenCanopy 提供图形化引导界面,并启用控制台 GOP(Graphics Output Protocol)以在引导过程中实现正确的显示。
来源:custom/config-nopicker-custom.plist1325
对于需要对 OpenCore 配置进行更深入自定义的高级用户:
请记住,广泛的自定义可能会影响与未来 Docker-OSX 更新的兼容性。