Mac信者のHackintosh修行

惑星で一番美しいOSが1台でも多くのマシンで動くことを目指します。

config.plistの実例紹介

f:id:siroanko: 20170921215402p:plain

長ったらしくてわかりにくい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でこの指定がしてあるので、ここでも使いました。

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がこの値を使います。詳しくはこちらをご覧下さい。

siroanko.hatenablog.com

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のセクションです。 そういうものが必要ならば(省略)と書いた部分に書きます。 以下に光ドライブのスリープ対応のパッチを紹介しました。参考にしてください。

siroanko.hatenablog.com

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セクションをここにコピーペーストすれば良いです。 詳しくは、こちらをご覧下さい。

siroanko.hatenablog.com

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からここで指定することになりました。