サイトアイコン Boot macOS

config.plistの実例紹介

長ったらしくてわかりにくいconfig.plistの書き方を、簡単に説明してみます。config.plistはCloverの設定をxml形式で書いたテキストファイルです。そのマニュアルは、Clover Wikiで公開されています。

https://clover-wiki.zetam.org/Configuration#Config.plist-structure

ただ、ここで十分に説明し尽くされていない項目も多く、分かりにくいです。Cloverは、長い間、様々な世代のCPU、チップセット、GPU、周辺機器をサポートしてきて、それに対応した機能を提供してきました。それらを全てconfig.plistで設定しているので、わかりにくくなるのも仕方ありません。古いシステムに関連している設定項目などは、もはやそれが実装された経緯を知らない人も多いはずです。

ということで、実際に動いているconfig.plistを例に、最新のハードウェアに関した項目だけに絞って説明してみます。下に示したconfig.plistの例はMSI Z97Aマザーボードで動いている設定です。デフォルトの設定、最新ハードウェアには無関係な部分などを削除しているので、割と短くてわかりやすいかと思います。9シリーズチップセットのマザーボードの例ですが、UEFIのマザーボードならこのconfig.plistでだいたい動くと思います。

https://pastebin.com/FkCTZEvq

以下でセクションごとに説明していきます。

ACPI

config.plistの冒頭に書かれているのはACPIセクションです。ACPIはAdvanced Configuration and Power Interfaceの略で、マザーボードの電源機能と構成要素を列挙し管理する統一された枠組です。DSDT (Differentiated System Description Table) は、マザーボードごとに固有の電源管理と構成を記述したデータです。SSDT (SSDT : Secondary System Description Table)は、DSDTの補足データで、DSDTの一部を記述したデータです。SSDTには、DSDTの一部の記述をして、DSDTの内容を上書きします。

DSDTは全てのマザーボードが持っています。Hackintoshのコミュニティによって、DSDTに足りない記述を書き足したり、書き換えたりして、macOSを動かす努力が長年されてきました。昔のBIOSベースのマザーボードの時代には、それぞれのマザーボードBIOSバージョンごとに、改変されたSSDTが作られて、それを使ってmacOSをインストールしていました。config.plistのACPIセクションのDSDTとSSDTは、マザーボードが持っているACPI情報をどのように改変すべきかを書いた場所です。動的にパッチを当てるCloverの重要機能を指定しています。

MSI Z97Aマザーボードで動かすconfig.plistのACPIセクションを下に示します。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>ACPI</key>
    <dict>
        <key>DSDT</key>
        <dict>
            <key>Name</key>
            <string>DSDT.aml</string>
        </dict>
        <key>SSDT</key>
        <dict>
            <key>Generate</key>
            <dict>
                <key>CStates</key>
                <true/>
                <key>PStates</key>
                <true/>
            </dict>
        </dict>
    </dict>

重要機能の割には、シンプルです。というのも、UEFIマザーボードの時代になって以来、DSDTを変更しなくても、ほとんどそのままで動くようになったからです。なのでDSDTへのパッチ当ての指示は全て削除することができます。Nameでは、将来、手作業でDSDTにパッチ当てをしたいときに備えて、パッチを当てたDSDTファイルの名前を入れてあるだけです。なので、この記述も実は不要です。ちなみに、パッチを当てたDSDTファイルは、CloverのACPI/pachedディレクトリに入れます。

Generateでは、CPUの電源制御のCステートとPステートを用意するよう指定しました。これが必要なのかどうかよくわかっていませんが、多くのconfig.plistでこの指定がしてあるので、ここでも使いました。

またDSDT項目名を変更するパッチも必要に応じて書きます。こちらで説明しておきました。

config.plistに「XHCIをXHCに変更」とか「SAT0をSATAに変更」などのパッチを書いている方も多いと思います。これは一体何なのか考えてみました。DSDTのPatchesUSBを設定するスクリプトであるUSBMapを試していたところ(そのうち紹介できれば良いと思い試行錯誤しています)、次のようなメッセージが出ました。「あなたのマシンにはEC0ってのがあるけどこれはECに変えた方が良いと思う。だからESPにあるconfig.plistを書き換えてあげましょうか?」よくわからないのでとりあえず辞退させていただきました。これは、config.plistのDSDTの...
config.plistでDSDT項目名を変更するパッチ - Boot macOS

Boot

Bootの設定です。

 <key>Boot</key>
    <dict>
        <key>Arguments</key>
        <string></string>
        <key>DefaultVolume</key>
        <string>Macintosh HD</string>
        <key>Timeout</key>
        <integer>1</integer>
        <key>XMPDetection</key>
        <string>NO</string>
    </dict>

Argumentsは、Cloverがブートするときのオプションです。-vとか-xとか色々あります。また、kextが引き取ってくれるオプションもここに書きます。普通の起動にはオプション不要なので、この項目も不要です。でも、将来何か指定したいときのために、空のstringを書いておきました。

DefaultVolumeは、起動ボリューム名です。Timeoutは、Cloverのメニューが出てからユーザ入力を待つ時間です。この指定では、1秒後に自動的に起動します。XMPDetection<は、よくわかりません。eXtreme Memory Profileという機能を使うかどうかの設定です。使わないことにしています。

Devices

 <key>Devices</key>
    <dict>
        <key>Audio</key>
        <dict>
            <key>Inject</key>
            <string>1</string>
        </dict>
        <key>UseIntelHDMI</key>
        <false/>
    </dict>

Audioでは、オーディオチップのレイアウトの1番を使うよう指定しました。AppleALC.kextがこの値を使います。詳しくはこちらをご覧下さい。

HDMIは使っていないのでUseIntelHDMIは、無しでも良いのですが、将来のためにfalseを入れておきました。

GUI

Cloverの起動画面の設定です。

 <key>GUI</key>
    <dict>
        <key>Language</key>
        <string>en:0</string>
        <key>Scan</key>
        <dict>
            <key>Entries</key>
            <true/>
            <key>Tool</key>
            <true/>
        </dict>
        <key>ScreenResolution</key>
        <string>1920x1200</string>
        <key>Theme</key>
        <string>Minimalism</string>
    </dict>

Scanは、ボリュームやUEFIツールのスキャンをするかどうか。Themeは、画面表示の色やアイコンなどの見た目の選択です。Cloverのthemesフォルダの中から、使用したいテーマのディレクトリ名を指定します。

Graphics

AMD, Intel, NVIDIAのGraphicsに関する指定です。

 <key>Graphics</key>
    <dict>
        <key>Inject</key>
        <dict>
            <key>ATI</key>
            <false/>
            <key>Intel</key>
            <true/>
            <key>NVidia</key>
            <false/>
        </dict>
    </dict>

AMDは使っていないのでfalseに、またNVIDIAの最近のモデルはfalseで良いとのことでそうしました。
デフォルトでは3社ともtrueだそうですが、必要に応じて自動設定されるそうなので、ここでは何も書かなくても良かったのかもしれません。

KernelAndKextPatches

Kernelとkextへのパッチ指定です。起動時に動的にパッチを当ててくれます。これもCloverの重要機能です。

 <key>KernelAndKextPatches</key>
    <dict>
        <key>AppleRTC</key>
        <true/>
        <key>KernelPm</key>
        <true/>
        <key>KextsToPatch</key>
        <array>
 
(省略)
 
        </array>
    </dict>

AppleRTCを当てないと、スリープでUEFI設定が消えてしまいます。KernelPmはHaswellの電力制御のパッチです。不要かもしれないけど、Z97チップセットマザーボードなので、念のために入れておきました。以上は定番のパッチです。

パッチ作業を具体的に指定したパッチを記述することもできます。それがKextsToPatchのセクションです。そういうものが必要ならば(省略)と書いた部分に書きます。以下に光ドライブのスリープ対応のパッチを紹介しました。参考にしてください。

現行のMacintoshからはすっかり駆逐されてしまった光学ドライブですが、Hackintoshなら5.25イ…
光学ドライブを使う - Boot macOS

RtVariables

Runtime 変数というセクションです。Cloverの機能を指定するパラメータを書くところのようです。あまり使い道がありません。

 <key>RtVariables</key>
    <dict>
        <key>CsrActiveConfig</key>
        <string>0x0</string>
    </dict>

ここではSIPを有効にするよう指定しています。多分デフォルトで有効だと思いますので、この記述は不要だと思います。でも、将来、無効にしたいときのために書いておきました。SIPとCsrActiveConfigの値については、こちらをご覧下さい。

siroanko.hatenablog.com

SMBIOS

機種固有情報を書くセクションです。40行以上あるので省略しました。シリアル番号、ファームウェアのバージョン番号などを書きます。

 <key>SMBIOS</key>
    <dict>
(省略)
    </dict>

Clover configuratorを使うと、機種に合わせた値を生成してくれます。それのSMBIOSセクションをここにコピーペーストすれば良いです。詳しくは、こちらをご覧下さい。

Hackintoshは本物のMacintoshではありませんが、macOSは本物の機種上で動いていると思い込ん…
正しく機種設定する (SMBIOSの設定) - Boot macOS

SystemParameters

最近追加されたセクションです。

 <key>SystemParameters</key>
    <dict>
        <key>InjectKexts</key>
        <string>YES</string>
        <key>NvidiaWeb</key>
        <true/>
    </dict>
</dict>
</plist>

InjectKextsは、/EFI/CLOVER/kexts/に置いたkextを使うかどうかの指定です。自動的に検出するDetectという指定も可能ですが、明示的に指定した方が安心です。

NvidiaWebは、NVIDIAが配布しているドライバを使用するかどうかの指定です。昔は、ブートオプションで指定していましたが、Sierraからここで指定することになりました。

モバイルバージョンを終了