これまで「あのかぼ」ではOpenCore Legacy Patcher (OCLP)を使用したインストールガイドや、OCLPを使用したMacのブートシーケンスについて解説するページを公開していきました。
この「OpenCore Legacy Patcher のパッチの内容」シリーズでは、Dortaniaの「Explaining the patches in OpenCore Legacy Patcher(英語)」で紹介されているパッチの解説を「OpenCoreの設定」と「注入される Kext」、「ルートパッチ」の3つに分けて時より注釈を入れながら分かりやすく解説しています。
※ 弊サイトの他のシリーズと比べると少々…マニアックな記事です。
この記事ではOpenCore Legacy Patcherで中心的な役割を果たす「OpenCore」によるパッチがサポートされなくなってしまったMacにどのような効果をもたらすのかについて解説します。
目次
OpenCoreの設定
OpenCoreはサポートされなくなってしまったMacにmacOSのネイティブなサポートを追加するOpenCore Legacy Patcherにおける主なロジックになっています。
なお、ここで紹介する「OpenCoreの設定」はOpenCoreを開発するAcidantheraのOpenCorePkg内やDortaniaのOpenCoreドキュメントにも言及があります。
ACPI -> Add
- SSDT-CPBG
- 理由: Big Sur の初期ビルドにおける Arrandale Macでのカーネルパニックを解決するため
- ロジック: ACPIでダミーのCPBGデバイスを無効化
- モデル: MacBookPro6,x および iMac11,x
- SSDT-PCI
- 理由: SandyおよびIvy BridgeのWindowsオーディオサポートを修正するため
- ロジック: PCI0 の 32 ビット割り当て制限を削除
- モデル: すべての Sandy および Ivy Bridge Mac (MacPro6,1 を除く)
- SSDT-DGPU
- 理由: 2011年のMacBook ProでソフトウェアベースのdeMUXを利用しdGPUを無効化
- ロジック: ACPI経由で電源オフ要求をdGPUに送信
- モデル: デッド dGPU を搭載した MacBookPro8,2 および MacBookPro8,3
ACPI -> Patch
EHCx
とXHC1
パッチ- 理由: 正常なUSB動作に必要なため
- ロジック: 新しいモデルの USB マップによる USB ポート機能の接続と破壊を回避
- モデル: ModerateまたはAdvanced SMBIOSでスプーフィングする場合は、すべてのモデルが必要
BUF0
からBUF1
パッチ- 理由: SSDT-PCI とペアリングするため
_INI
からXINI
パッチ- 理由: SSDT-DGPU とペアリングするため
Booter -> Patch
HW_BID
からOC_BID
へのリルート- 理由: サポートされていないモデルで macOS インストーラーを使用できるようにするため
- ロジック: Board IDのmacOS チェックをカスタム変数にリルート
- モデル: VMM スプーフィングを使用するすべてのシステム
Booter -> Quirks (癖)
- ForceBooterSignature
- 理由: 休止状態(ハイバネーション)のサポートをを確実にするため
- ロジック: boot.efi を騙して OpenCoreをApple のファームウェアと認識させる
- モデル: すべてのモデルで必要
DeviceProperties -> Add
PciRoot(0x0)/Pci(0x3,0x0)/Pci(0x0,0x0)
PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)
- 理由: アップグレードされたiMacの明るさ制御を確実にするため
- ロジック: AppleBackLight プロパティを設定
- モデル: NVIDIA Metal GPUにアップグレードされたiMac11,xおよびiMac12,x
PciRoot(0x0)/Pci(0x2,0x0)
- 理由: アップグレードされた iMac のスリープ問題を解決するために内部 GPU を無効化
- ロジック: macOSにiGPUを汎用PCIデバイスとして認識させる
- モデル: Metal GPUにアップグレードされたiMac12,x
Kernel -> Patch
- SMCパッチ
- 理由: SMC ファームウェアのアップデートを回避するために必要
- ロジック: AppleSMC.kext 内の
smc-version
をパッチし、完全な機能を使用するには SMC-Spoof.kext が必要 - モデル: SMBIOS をスプーフィングする場合はすべてのモデルが必要
- IOHIDFamilyパッチ
- 理由: 古いハードウェア上のmacOSでのHID周辺機器サポートのために必要
- ロジック: IOHIDFamilyに常にリカバリを起動していると認識させる
- モデル: Penryn CPU (Core2 シリーズ)
- Force FileVault on Broken Sealパッチ (壊れたシールに FileVault を強制)
- 理由: ルートパッチが適用されたMacでFileVaultを使用可能にするため
- ロジック: APFS.kextにFileVaultサポートを常にtrue (真)と返すよう強制する
- モデル: ルート パッチが必要なすべてのモデル
- Library Validation Enforcementパッチ(ライブラリ検証適用パッチ)の無効化
- 理由: 非Metal ルート ボリューム パッチがライブラリ検証テストに合格しないため
- ロジック: ライブラリ検証関数を常に不要と返すように強制する
- モデル: 非Metal GPU
- SurPlusパッチ
- 理由: macOS 11.3 ~ 12.0.1 は安定した起動のためにCPUのRDRANDサポートを必要とするため
- ロジック: RDRANDコードを事前定義された値を返すように強制する
- モデル: Ivy Bridge 以前のすべての Mac
kern.hv_vmm_present
パッチのリルート- 理由: サポートされていないハードウェアでmacOSのインストールと更新を可能にするため
- ロジック: ユーザースペースにシステムが仮想マシンであると認識させる
- モデル: VMM スプーフィングを使用するすべてのモデル
Kernel -> Quirks (癖)
- ThirdPartyDrives
- 理由: サードパーティ製ドライブでの休止状態(ハイバネーション)解除の問題を回避するため
- ロジック: AppleAHCIPort.kext をパッチしてサポートする
- モデル: 標準 SATA ポートを備えたすべてのモデル
- PanicNoKextDump
- 理由: カーネルパニック時のkextダンプを回避し、カーネルのデバッグを容易にするため
- ロジック: 不要な情報をダンプしないようにカーネルにパッチを適用
- モデル: ユーザーがVerbose Bootを有効にした場合のみ設定
Misc -> Security
- SecureBootModel
- 理由: T2 モデルのスプーフィングでネイティブ OS アップデートを許可するため
- ロジック: T2 のセキュア エンクレーブ識別子を設定します。
- モデル: Minimal以上でT2モデルをスプーフィングするすべてのモデル
NVRAM -> Add
-v keepsyms=1 debug=0x100
- 理由: macOSのカーネルおよびkextのデバッグ情報を表示し、パニック時の再起動を回避するため
- ロジック: NVRAM に引数を追加
- モデル: ユーザーがVerbose Bootを有効にした場合のみ設定
-liludbgall
- 理由: Lilu とプラグインのデバッグ ログを有効にするため
- ロジック: NVRAM に引数を追加
- モデル: ユーザーがKext DEBUGを有効にした場合のみ設定
msgbuf=1048576
- 理由: メッセージ バッファ サイズを 1MB に設定し、ブート ログが確実に保持されるようにするため
- ロジック: NVRAM に引数を追加
- モデル: ユーザーがKext DEBUGを有効にした場合のみ設定
agdpmod=pikera
- 理由: MacBookPro9,x の GPU 切り替えを修正するため
- ロジック: NVRAM に引数を追加
- モデル: MacBookPro9,x
shikigva=80 unfairgva=1
shikigva=128 unfairgva=1 -wegtree
- 理由: アップグレードされた AMD Metal GPU を搭載したモデルの DRM サポートを修正するため
- ロジック: NVRAM に引数を追加
- モデル: アップグレードされた AMD Metal GPU を搭載したモデル
-revasset
- 理由: VMM スプーフィングを使用するときにコンテンツ キャッシュを有効にするため
- ロジック: NVRAM に引数
- モデル: VMM スプーフィングを使用するすべてのモデル
amfi=0x80
- 理由: Apple Mobile File Integrity を無効にして、ルート パッチを許可にするため
- ロジック: NVRAM に引数
- モデル: 署名されていないルートパッチを必要とするすべてのモデル
UEFI -> ProtocolOverrides
- GopPassThrough
- 理由: UGA ファームウェアで GOP GPU を搭載したマシンで適切な出力を行うため
- ロジック: UGAプロトコルインスタンスの上にGOPプロトコルインスタンスを提供
- モデル: MacPro3,1、iMac7,1-8,1
結局「OpenCoreの設定」とは何なのか?
OpenCore Legacy Patcherでサポート対象外となったMacに最新のmacOS をインストールし、快適な操作を実現するためには主に3種類のパッチがあります。
この中の1つである「OpenCoreの設定」はどんな役割があるのでしょうか?
「OpenCoreの設定」は3つのうち1番初めにMacに影響を与えOSのサポートでは最も重要な役割を果たします。この「OpenCoreの設定」ではより起動に関する内容やハードウェアサポートの基礎に関する変更を加えるものでシステム全体のブートプロセスを制御し、基本的なハードウェア動作を調整する役割があります。
まとめ
お疲れさまでした!
ここまでOpenCore Legacy Patcherがサポート対象外のMacに当てるパッチの説明のうち、「OpenCoreの設定」部分について解説していきました。
「OpenCoreの設定」では、config.plistファイルに記載された設定に基づき、ACPIテーブルの修正をはじめとするハードウェアの動作やブートプロセスを制御します。これにより、システムの起動に関する内容や初期のハードウェアサポートに焦点を当てた重要な変更がメモリ上で行われます。
続ては「注入されるKext」編!
「注入されるKext」編ではESPに格納されたKextを使って特定のハードウェアや機能に対するサポートを追加や修正についての詳細を紹介しています。
最後までお読みいただきありがとうございました!
またお会いしましょう!
Anokabo v0.0.3 (7/11/2023, 6:08:50 PMをベースにしています。)
改定履歴
v0.0.3 2024.05.24 「ルートパッチ編」と「OCLP.net版」へのリンクを追加
v0.0.2 2024.05.18 「注入される Kext」へのリンクを追加
v0.0.1 2024.05.17 公開