【あのかぼ版】OpenCore Legacy Patcher のパッチの内容 ~最終章!ルートパッチ編~

Mac

【あのかぼ版】OpenCore Legacy Patcher のパッチの内容 ~最終章!ルートパッチ編~

これまで「あのかぼ」ではOpenCore Legacy Patcher (OCLP)を使用したインストールガイドや、OCLPを使用したMacのブートシーケンスについて解説するページを公開していきました。今回は「OpenCore Legacy Patcher のパッチの内容」シリーズの最終章、「ルートパッチ」で適用されるパッチについて紹介していきます。

この「OpenCore Legacy Patcher のパッチの内容」シリーズでは、Dortaniaの「Explaining the patches in OpenCore Legacy Patcher(英語)」で紹介されているパッチの解説を「OpenCoreの設定」と「注入される Kext」、「ルートパッチ」の3つに分けて時より注釈を入れながら分かりやすく解説しています。

※ 弊サイトの他のシリーズと比べると少々…マニアックな記事です。

原文のニュアンスを可能な限り保ったまま翻訳したものはOpenCore Legacy Patcherの専門サイト「OCLP.net」に掲載しました。(5月下旬公開予定です。)
OpenCore Legacy Patcher のパッチの内容 (OCLP.net)

目次

ルートパッチ (On-Disk Patches)

ここではルートパッチ (オンディスクパッチ)の詳細を紹介します。

用語の解説などは先日公開しました「【あのかぼ版】OpenCore Legacy Patcher で使われる用語集」をご覧ください。

オーディオパッチ (Audio Patches) (macOS 11.0以降)

拡張機能 (Extensions)

  • AppleHDA
    • 理由: El CapitanのAppleHDAを再追加してオーディオサポートを実現するため
    • モデル: iMac7,1 および iMac8,1

レガシー ワイヤレス パッチ (Legacy Wireless Patches) (macOS 12.0以降)

対象: BCM94328、BCM94322およびAtheros Wi-Fiカード

CoreServices

  • WiFiAgent.app

/usr/libexec

  • airportd

NVIDIA Kepler グラフィックス アクセラレーション パッチ (macOS 12.0以降)

拡張機能 (Extensions)

  • GeForce.kext
  • GeForceAIRPlugin.bundle
  • GeForceGLDriver.bundle
  • GeForceMTLDriver.bundle
  • GeForceVADriver.bundle
  • NVDAGF100Hal.kext
  • NVDAGK100Hal.kext
  • NVDAResman.kext
  • NVDAStartup.kext

Frameworks

  • OpenCL (libCLVMNVPTXPlugin.dylib、NVPTX.dylib)
    • 理由: Keplerハードウェアアクセラレーションサポートを再追加するため
  • Metal
    • 理由: macOS 13.3で壊れた3802ベースのGPUのため、MetalをmacOS 13.2.1にダウングレードする必要があるため

PrivateFrameworks

  • MTLCompiler (MTLコンパイラ)
    • 理由: macOS 13.3で壊れた3802ベースのGPUのため、MTLCompilerをmacOS 13.2.1にダウングレードする必要があるため
  • GPUCompiler (GPUコンパイラ)
    • 理由: macOS 13.3で壊れた3802ベースのGPUのため、GPUCompilerをmacOS 13.2.1にダウングレードする必要があるため

Intel Ivy Bridge グラフィックス アクセラレーション パッチ (macOS 12.0以降)

拡張機能 (Extensions)

  • AppleIntelIVBVA.bundle
  • AppleIntelFramebufferCapri.kext
  • AppleIntelGraphicsShared.bundle
  • AppleIntelHD4000Graphics.kext
  • AppleIntelHD4000GraphicsGLDriver.bundle
  • AppleIntelHD4000GraphicsMTLDriver.bundle
  • AppleIntelHD4000GraphicsVADriver.bundle

PrivateFrameworks

  • AppleGVA/AppleGVACore
    • 理由: DRMサポートを有効にするため
  • MTLCompiler (MTLコンパイラ)
    • 理由: macOS 13.3で壊れた3802ベースのGPUのため、MTLCompilerをmacOS 13.2.1にダウングレードする必要があるため
  • GPUCompiler (GPUコンパイラ)
    • 理由: macOS 13.3で壊れた3802ベースのGPUのため、GPUCompilerをmacOS13.2.1にダウングレードする必要があるため

拡張機能 (Extensions)

  • OpenCL (libCLVMIGILPlugin.dylib)
    • 理由: Ivy Bridge ハードウェア アクセラレーション サポートを再追加するため
  • WebKit (com.apple.WebProcess.sb)
    • 理由: Ivy Bridge Safariレンダリングサポートを再追加するため
  • Metal
    • 理由: macOS 13.3で壊れた3802ベースのGPUのため、MetalをmacOS 13.2.1にダウングレードする必要があるため

Intel Haswell グラフィックス アクセラレーション パッチ (macOS 13.0以降)

拡張機能 (Extensions)

  • AppleIntelFramebufferAzul.kext
  • AppleIntelHD5000Graphics.kext
  • AppleIntelHD5000GraphicsGLDriver.bundle
  • AppleIntelHD5000GraphicsMTLDriver.bundle
  • AppleIntelHD5000GraphicsVADriver.bundle
  • AppleIntelHSWVA.bundle
  • AppleIntelGraphicsShared.bundle

Frameworks

  • Metal
    • 理由: macOS 13.3で壊れた3802ベースのGPUのため、MetalをmacOS 13.2.1にダウングレードする必要があるため

PrivateFrameworks

  • MTLCompiler (MTLコンパイラ)
    • 理由: macOS 13.3で壊れた3802ベースのGPUのため、MTLCompilerをmacOS 13.2.1にダウングレードする必要があるため
  • GPUCompiler (GPUコンパイラ)
    • 理由: macOS 13.3で壊れた3802ベースのGPUのため、GPUCompilerをmacOS 13.2.1にダウングレードする必要があるため

Intel Broadwell グラフィックス アクセラレーション パッチ (macOS 13.0以降)

拡張機能 (Extensions)

  • AppleIntelBDWGraphics.kext
  • AppleIntelBDWGraphicsFramebuffer.kext
  • AppleIntelBDWGraphicsGLDriver.bundle
  • AppleIntelBDWGraphicsMTLDriver.bundle
  • AppleIntelBDWGraphicsVADriver.bundle
  • AppleIntelBDWGraphicsVAME.bundle
  • AppleIntelGraphicsShared.bundle

Intel Skylake グラフィックス アクセラレーション パッチ (macOS 13.0以降)

拡張機能 (Extensions)

  • AppleIntelSKLGraphics.kext
  • AppleIntelSKLGraphicsFramebuffer.kext
  • AppleIntelSKLGraphicsGLDriver.bundle
  • AppleIntelSKLGraphicsMTLDriver.bundle
  • AppleIntelSKLGraphicsVADriver.bundle
  • AppleIntelSKLGraphicsVAME.bundle
  • AppleIntelGraphicsShared.bundle

AMD Legacy Vega グラフィックス アクセラレーション パッチ (macOS 13.0以降)

拡張機能 (Extensions)

  • AMDRadeonX5000.kext
  • AMDRadeonVADriver2.bundle
  • AMDRadeonX5000GLDriver.bundle
  • AMDRadeonX5000MTLDriver.bundle
  • AMDRadeonX5000Shared.bundle
  • AMDShared.bundle

AMD Legacy Polaris グラフィックス アクセラレーション パッチ (macOS 13.0以降)

拡張機能 (Extensions)

  • AMDRadeonX4000.kext
  • AMDRadeonX4000HWServices.kext
  • AMDRadeonVADriver2.bundle
  • AMDRadeonX4000GLDriver.bundle
  • AMDMTLBronzeDriver.bundle
  • AMDShared.bundle

AMD Legacy GCN グラフィックス アクセラレーション パッチ

拡張機能 (Extensions)

  • AMD7000Controller.kext
  • AMD8000Controller.kext
  • AMD9000Controller.kext
  • AMD9500Controller.kext
  • AMD10000Controller.kext
  • AMDRadeonX4000.kext
  • AMDRadeonX4000HWServices.kext
  • AMDFramebuffer.kext
  • AMDSupport.kext
  • AMDRadeonVADriver.bundle
  • AMDRadeonVADriver2.bundle
  • AMDRadeonX4000GLDriver.bundle
  • AMDMTLBronzeDriver.bundle
  • AMDShared.bundle

非Metalグラフィックス アクセラレーション パッチ (macOS 11.0以降)

一般パッチ

  • IOSurface.kext
    • 理由: ログイン時の即時ログアウトを修正するため
    • ロジック: Catalina IOSurfaceにダウングレードする
    • 注: Metal APIサポートしていないAMDおよびIntelのGPUを搭載したシステムに対して、追加でaddMemoryRegionremoveMemoryRegionのパッチを適用。このパッチでは、最初の条件付きジャンプを無条件ジャンプに変更。
    • オフセット0xdb520xdbc6のバイトを0xebに置き換える

条件付きジャンプと無条件ジャンプの違い

  • 条件付きジャンプ (Conditional Jump): CPUが特定の条件を満たした場合にのみジャンプする命令。例えば、ある条件が真である場合にジャンプする。
  • 無条件ジャンプ (Unconditional Jump): 常にジャンプする命令です。条件をチェックせずにジャンプする。

IOSurface.kextへのパッチ適用について

主にMetal APIをサポートしていない古いAMD (ATI)やIntel GPUを搭載したMacにおいて、IOSurface.kextの特定のオフセット (0xdb520xdbc6)で条件付きジャンプ命令を無条件ジャンプ命令に変更することにより、特定のメモリ管理の問題を回避し、ログイン時の即時ログアウトの問題を修正するためのパッチを追加しています。

ドロップされたアクセラレーション バイナリ

  • NVIDIA バイナリ
    • GeForceGA.bundle
    • GeForceTesla.kext
      • IOFree パニックをスキップ – Mojave以降
        • オフセット0x5CF9Aで次のバイトを0xEBに置き換える
      • addMemoryRegion/removeMemoryRegion呼び出しを回避する
        • Offset0x5527とで0x77993、次のバイトを次のバイトに置き換えます。0x909090909090
        • オフセット0x5527および0x77993で次のバイトを0x909090909090に置き換える
    • GeForceTeslaGLDriver.bundle
    • GeForceTeslaVADriver.bundle
    • NVDANV50HalTesla.kext
    • NVDAResmanTesla.kext
      • 0x1ea59a – 0x1ea5b3: nop
      • VSLGestalt を IOLockLock または同じ長さの他の既知のシンボルに置き換える
  • NVIDIA Web ドライバー バイナリ
    • GeForceWeb.kext
    • NVDAGF100HalWeb.kext
    • NVDAGK100HalWeb.kext
    • NVDAGM100HalWeb.kext
    • NVDAGP100HalWeb.kext
    • NVDAResmanWeb.kext
    • NVDAStartupWeb.kext
    • GeForceTeslaWeb.kext
    • NVDANV50HalTeslaWeb.kext
    • NVDAResmanTeslaWeb.kext
      • 理由: NVIDIA Maxwell および Pascal GPU の非Metalアクセラレーションを可能にするため
  • AMD/ATI バイナリ
    • AMD2400Controller.kext
    • AMD2600Controller.kext
    • AMD3800Controller.kext
    • AMD4600Controller.kext
    • AMD4800Controller.kext
    • AMD5000Controller.kext
    • AMD6000Controller.kext
    • AMDFramebuffer.kext
    • AMDLegacyFramebuffer.kext
    • AMDLegacySupport.kext
    • AMDRadeonVADriver.bundle
    • AMDRadeonVADriver2.bundle
    • AMDRadeonX3000.kext
    • AMDRadeonX3000GLDriver.bundle
    • AMDShared.bundle
    • AMDSupport.kext
    • ATIRadeonX2000.kext
    • ATIRadeonX2000GA.plugin
    • ATIRadeonX2000GLDriver.bundle
    • ATIRadeonX2000VADriver.bundle
  • Intel 第 5 世代バイナリ
    • AppleIntelFramebufferAzul.kext
    • AppleIntelFramebufferCapri.kext
    • AppleIntelHDGraphics.kext
    • AppleIntelHDGraphicsFB.kext
    • AppleIntelHDGraphicsGA.plugin
    • AppleIntelHDGraphicsGLDriver.bundle
    • AppleIntelHDGraphicsVADriver.bundle
  • Intel 第 6 世代バイナリ
    • AppleIntelHD3000Graphics.kext
    • AppleIntelHD3000GraphicsGA.plugin
    • AppleIntelHD3000GraphicsGLDriver.bundle
    • AppleIntelHD3000GraphicsVADriver.bundle
    • AppleIntelSNBGraphicsFB.kext
      • ボードIDパッチ
        • 元のボード ID を更新されたモデルに置き換える
    • AppleIntelSNBVA.bundle

Frameworks (フレームワーク)

  • CoreDisplay.framework
    • ロジック: Mojave からコピーし、大幅に修正/シム
  • IOSurface.framework
  • OpenGL.framework
    • ロジック: Mojave からコピー

PrivateFrameworks (プライベートフレームワーク)

  • GPUSupport.framework
    • ロジック: Mojave からコピー
  • SkyLight.framework
    • ロジック: Mojave からコピーし、大幅に修正/シム

結局「ルートパッチ」とは何なのか?

OpenCoreの設定」や「注入される Kext」とは異なり、「ルートパッチ (On-Disk Patches)」はその名の通り、macOSがインストールされた「ルートディスク」に対して直接適用されるパッチです。

「OpenCoreの設定」や「注入される Kext」は、ブートプロセスや特定のハードウェアサポートを改善するためにメモリ上でパッチを適用しますが、これだけでは対応しきれないシステム修正が必要な場合に、「ルートパッチ (On-Disk Patches)」が必要になります。ルートパッチは、システムファイルやKext (カーネル拡張)などのディスク上のファイルを直接修正することで、macOSの互換性や機能を向上させます。

まとめ

最後までお読みいただきありがとうございました!
これにて「OpenCore Legacy Patcher のパッチの内容」シリーズは完結です。
いかがでしたでしょうか?
これまで疑問に思っていた部分がクリアになれば幸いです。

Apple は新しいmacOSの公開時に過去のハードウェアに対するサポートを次々に削除してしまうため、今まではルートパッチを適用しなくても良かったMacでも、macOSのアップグレードのタイミングでルートパッチの適用が必須になってしまうことがあります。その際にMacでは上記のような変更が加えられているのです。

長いシリーズになりましたが、読破された方お疲れさまでした!
弊ブログでは引き続きOpenCore Legacy Patcherの魅力や最新ニュースお届けしていきます!

最後までお読みいただきありがとうございました!

弊ブログ(あのかぼ)と姉妹メディア(おんかぼ)では引き続き、OpenCore Legacy Patcherの最新情報やmacOS Sonoma関連のニュースを紹介していきます。記事の更新については、かぼしーのTwitterアカウントで紹介しますので、ぜひフォローいただけると幸いです。

また、現在OpenCore Legacy Patcher専門サイト「OCLP.net」でも執筆中です。ぜひ合わせてご覧ください。

Anokabo v0.0.2 (7/11/2023, 6:08:50 PMをベースにしています。)

改定履歴

v0.0.2 2024.05.24 「OCLP.net版」へのリンクを追加
v0.0.1 2024.05.19 公開 (公開当初はv1.0として)