サイトアイコン Boot macOS

corpnewtさんのバニラガイド~Haswell用config.plist

Corpnewtさんのhackintoshデスクトップのためのバニラガイドから、今回は「Haswellマシンのためのconfig.plistの作り方」のページをご紹介します。

ちなみにこのガイドでは、

のconfig.plistの作り方が解説してあります。他のCPUを使う場合はそれを見てください。また、Config.plistの基礎編もご覧ください。
世代の近いCPUではそれぞれかなりの部分が共通です。Haswellは実際のiMacで採用されていて、歴代CPUの中でも互換性が高いと評判です。なので特殊な設定はありません。

(ここから抄訳)


(訳注:元記事ではClover Configuratorのスクリーンショットも多数掲載されていますが、config.plistだけを紹介します。Configuratorの操作は元記事を見てください。)

ACPI

CloverのACPIデフォルト設定は、多すぎで、やりすぎなところがあります。そのために問題を引き起こす可能性があります。そこで、できるだけ単純に書き直します。

    <key>ACPI</key>
    <dict>
        <key>DSDT</key>
        <dict>
            <key>Fixes</key>
            <dict>
                <key>FixHPET</key>
                <true/>
                <key>FixIPIC</key>
                <true/>
                <key>FixRTC</key>
                <true/>
                <key>FixShutdown</key>
                <true/>
                <key>FixTMR</key>
                <true/>
            </dict>
            <key>Patches</key>
            <array>
                <dict>
                    <key>Comment</key>
                    <string>change EHC1 to EH01</string>
                    <key>Disabled</key>
                    <false/>
                    <key>Find</key>
                    <data>
                    RUhDMQ==
                    </data>
                    <key>Replace</key>
                    <data>
                    RUgwMQ==
                    </data>
                </dict>
                <dict>
                    <key>Comment</key>
                    <string>change EHC2 to EH02</string>
                    <key>Disabled</key>
                    <false/>
                    <key>Find</key>
                    <data>
                    RUhDMg==
                    </data>
                    <key>Replace</key>
                    <data>
                    RUgwMg==
                    </data>
                </dict>
                <dict>
                    <key>Comment</key>
                    <string>change SAT0 to SATA</string>
                    <key>Disabled</key>
                    <false/>
                    <key>Find</key>
                    <data>
                    U0FUMA==
                    </data>
                    <key>Replace</key>
                    <data>
                    U0FUQQ==
                    </data>
                </dict>
            </array>
        </dict>
        <key>DropTables</key>
        <array>
            <dict>
                <key>Signature</key>
                <string>DMAR</string>
            </dict>
            <dict>
                <key>Signature</key>
                <string>MATS</string>
            </dict>
        </array>
        <key>FixHeaders</key>
        <true/>
        <key>SSDT</key>
        <dict>
            <key>Generate</key>
            <dict>
                <key>PluginType</key>
                <true/>
            </dict>
        </dict>
    </dict>

Fixes:

Fixesでは以下を指定しました。

Patches:

Patchesセクションでは、DSDTのパーツをCloverにより動的に改名します。本物のMacを使っているわけではないうえ、macOSは特定のDSDTパーツ名を前提にしていません。そこでmacOSが稼働するように、名前を非破壊的に変更します。ここでは以下の改名をしています。

Drop Tables:

PatchesセクションではDSDTに軽い変更を施します。SSDTはDSDTの一部分を置き換えるものです。Drop Tablesは、特定のSSDTテーブルを起動時に無視するよう指定します。先に述べたように、MacとATXマザーボードは異なるので、macOSが問題を起こすのです。ここでは以下の2個を追加しています。

FixHeadersとSSDT:

ここでは以下の指定をします。

Boot

ここではあまり重要な項目はありません。

    <key>Boot</key>
    <dict>
        <key>Arguments</key>
        <string>keepsyms=1 dart=0 debug=0x100 shikigva=40 -v</string>
        <key>DefaultVolume</key>
        <string>LastBootedVolume</string>
        <key>Timeout</key>
        <integer>5</integer>
    </dict>

Arguments:

いくつかの起動オプションを追加しました。

DefaultBootVolume と Timeout:

Boot Graphics

特に設定することはありません。

Cpu

ここも特に設定することはありません。

Devices

WhateverGreenのための設定と音声の基本的な設定をします。

    <key>Devices</key>
    <dict>
        <key>Audio</key>
        <dict>
            <key>Inject</key>
            <integer>1</integer>
            <key>ResetHDA</key>
            <true/>
        </dict>
        <key>Properties</key>
        <dict>
            <key>PciRoot(0x0)/Pci(0x2,0x0)</key>
            <dict>
                <key>AAPL,ig-platform-id</key>
                <data>
                AwAiDQ==
                </data>
            </dict>
        </dict>
        <key>USB</key>
        <dict>
            <key>FixOwnership</key>
            <true/>
        </dict>
    </dict>

Fake ID(上のconfig.plistからは削除済み):

このセクションは空白で良いです。昔は、HD4400のようなほぼサポートされているiGPUをサポートされたiGPUに見せかけるためにこの機能を使っていました。でも、今は、そのような目的には、よりクリーンなPropertiesセクションを使います。

Audio:

ここではaudioにinject Layout 1を指定します。これは皆さんが使っているマザーボードのコーデックで動く値ではないかもしれません。その場合は、AppleALCのSupported Codec Pageで番号を調べてください。

ここではさらにResetHDAを有効にしています。これはmacOSを再起動した後に、コーデックをニュートラルに戻してくれます。別のOSを起動してmacOSに戻ってきたときに発生する問題を解決します。

USB:

このセクションでは、FixOwnershipを指定します。 これで、-vオプションで表示されるEnabling Legacy Matchingメッセージの真ん中あたりで止まってしまう問題を解決します。この問題は、HCI Hand OffをBIOSでセットしても解決します。

Properties:

このセクションの設定にはHeadkazeさんの Intel Framebuffer Patching Guideを参考にしました。そして、 ig-platform-idというプロパティを一つだけ記述しました。ここでは16進数の値の順番を入れ替えています。つまりig-plat が 0xAABBCCDDの場合、この記述でこれを0xDDCCBBAAにします。

ここで使う二つのig-platform-idは以下です。実態に合わせていずれかを使用します。

このほか、2つのプロパティを追加しました。framebuffer-patch-enable と framebuffer-stolenmemです。前者はWhateverGreen.kext経由でのパッチ当てを有効にし、後者は最小流用メモリを19MBにします。

(訳注:framebuffer-patch-enable と framebuffer-stolenmemは、本サイトのconfig.plistにも書かれていないので、古い情報が残っている可能性があります。特に指定しなくても良いようです。一方、ig-platform-idは有用です。これを指定したら画面の乱れがなくなりました。)

HD 4400への対応

HD 4400をiGPUに搭載しているHaswellでは、以下のdevice-idの差し替えが必要です。HD 4400はmacOSではサポートされていないからです。

このdevice-idの差し替えには、上のig-platform-idの16進数入れ替えに類似した手順で行います。でも今回は最初の4桁だけの違いです。device-idは8桁の16進数なのですが、最初の4桁がデバイスIDで後半の4桁が製造社IDです。後半はどちらもインテル社なので同じだからです。そこで、デバイスIDが0xAABB0000であるものを 0xBBAA0000のように入れ替えれば良いのです。後半の4桁は変更する必要がありません。

(訳注:最後の4桁の8086の部分は製造社IDで、インテルを示します。歴史的に有名な16bit CPUの8086を表しています。その前の4桁がデバイスIDです。1番違いの異なるデバイスであることを示しています。)

device-idを偽装するための値は次のようになります。この値をdevice-idの項目に書いておけば、HD 4600が使えるようになります。

以上を基にしたPropertiesの設定です。先に説明したように、 ig-platform-id は個別の用法に合わせてください。

        <key>Properties</key>
        <dict>
            <key>PciRoot(0x0)/Pci(0x2,0x0)</key>
            <dict>
                <key>device-id</key>
                <data>
                EgQAAA==
                </data>
                <key>AAPL,ig-platform-id</key>
                <data>
                AwAiDQ==
                </data>
            </dict>
        </dict>

Disable Drivers

ここでは特に設定することはありません。

Gui

    <key>GUI</key>
    <dict>
        <key>Scan</key>
        <dict>
            <key>Entries</key>
            <true/>
            <key>Tool</key>
            <true/>
        </dict>
    </dict>

Scan:

Scan settingsを変更します。この設定でブート出来ないエントリーを除外します。

Hide Volumes:

起動時に表示したくないボリュームを書いておきます。今回は何も指定しませんでした。以下が現れて困るようでしたらついかしておきます。

名前以外にUUIDもつかえます。これを知るには、以下のようにします。diskXsYのXとYは実際のボリューム番号にします。

diskutil info diskXsY | grep -i "Partition UUID" | rev | cut -d' ' -f 1 | rev

Theme:

新しいテーマをテストしたかったら (lover-next-blackがおすすめ)、 /Volumes/EFI/EFI/CLOVER/themes ディレクトリに置いて、Themeフィールドに名前を書いておけば良いです。

Graphics

昔は、iGPUをここで設定していましたが、DeviceセクションのPropertiesですでに設定しましたので、ここでは何もする必要はありません。Cloverが、インテルのiGPUを検出すると、config.plistにGraphicsセクションが無くても、自動的にIntel Injectionを有効にします。もしインテルiGPUを無効にしたい場合は、下のように明示的に書くことで無効にできます。

    <key>Graphics</key>
    <dict>
        <key>Inject</key>
        <false/>
    </dict>

Kernel And Kext Patches

    <key>KernelAndKextPatches</key>
    <dict>
        <key>KernelPm</key>
        <true/>
        <key>KextsToPatch</key>
        <array>
            <dict>
                <key>Comment</key>
                <string>Port limit increase</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>
                g710////EA==
                </data>
                <key>InfoPlistPatch</key>
                <false/>
                <key>MatchOS</key>
                <string>10.12.x</string>
                <key>Name</key>
                <string>com.apple.driver.usb.AppleUSBXHCI</string>
                <key>Replace</key>
                <data>
                g710////Gw==
                </data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>Port limit increase (RehabMan)</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>
                g32IDw+DpwQAAA==
                </data>
                <key>InfoPlistPatch</key>
                <false/>
                <key>MatchOS</key>
                <string>10.13.x</string>
                <key>Name</key>
                <string>com.apple.driver.usb.AppleUSBXHCI</string>
                <key>Replace</key>
                <data>
                g32ID5CQkJCQkA==
                </data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>Port limit increase (PMHeart)</string>
                <key>Disabled</key>
                <true/>
                <key>Find</key>
                <data>
                g/sPD4MDBQAA
                </data>
                <key>InfoPlistPatch</key>
                <false/>
                <key>MatchOS</key>
                <string>10.14.0</string>
                <key>Name</key>
                <string>com.apple.driver.usb.AppleUSBXHCI</string>
                <key>Replace</key>
                <data>
                g/sPkJCQkJCQ
                </data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>Port limit increase (Ricky)</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>
                g/sPD4OPBAAA
                </data>
                <key>InfoPlistPatch</key>
                <false/>
                <key>MatchOS</key>
                <string>10.14.x</string>
                <key>Name</key>
                <string>com.apple.driver.usb.AppleUSBXHCI</string>
                <key>Replace</key>
                <data>
                g/sPkJCQkJCQ
                </data>
            </dict>
            <dict>
                <key>Comment</key>
                <string>External Icons Patch</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>
                RXh0ZXJuYWw=
                </data>
                <key>InfoPlistPatch</key>
                <false/>
                <key>Name</key>
                <string>AppleAHCIPort</string>
                <key>Replace</key>
                <data>
                SW50ZXJuYWw=
                </data>
            </dict>
        </array>
    </dict>

このセクションでは、いくつかの設定とkextパッチを行なっています。Clover Configuratorを使う場合は、以下の項目にチェックを入れます。

KextsToPatch:

ここでは4個の異なるkextパッチを設定しています。そのうち3個はUSBポート数制限に関するものです。1個はオレンジアイコン問題への対処です。これは内部ドライブがホットプラグ可能と判断されてオレンジ色のアイコンの外部ドライブとして現れてしまう問題です。

USBポート数制限のパッチにはMatchOS値が設定されています。実際に使用するOSバージョンのものだけを残しておいて、それ以外は削除して良いです。

RtVariables と SMBIOS

    <key>RtVariables</key>
    <dict>
        <key>BooterConfig</key>
        <string>0x28</string>
        <key>CsrActiveConfig</key>
        <string>0x3E7</string>
        <key>MLB</key>
        <string>C02532300QXG2Y7AD</string>
        <key>ROM</key>
        <string>UseMacAddr0</string>
    </dict>
    <key>SMBIOS</key>
    <dict>
        <key>BoardSerialNumber</key>
        <string>C02532300QXG2Y7AD</string>
        <key>ProductName</key>
        <string>iMac15,1</string>
        <key>SerialNumber</key>
        <string>C02Q6FYUFY10</string>
        <key>SmUUID</key>
        <string>C495EE18-C8EA-4100-8CAD-3099AC27772F</string>
    </dict>

SMBIOS情報の設定に関して私は、acidantheraの macserial アプリケーションを使っています。私は、同様なpythonスクリプトを書きました。これはconfig.plistに自動保存します。多くの項目は空白であってもCloverが自動的に埋めてくれます。これは、書き込むべき値にアップデートが必要になった時に自動的に書き換えてくれるということを意味します。

このHaswellの例では、互換性のためにiMac15,1 のSMBIOSを使いました。細かい機種割り当ては、次のようにすれば良いです。

macserialアプリケーションででSMBIOS情報を取得するために、これを-aオプションで起動します。これによりシリアル番号とボードシリアル番号を生成します。またgrepコマンドで検索するSMBIOSタイプを制約できます。 iMac15,1の例では、次のようにmacserialアプリケーションを起動します。

macserial -a | grep -i iMac15,1

これにより以下の結果を得られます。

      iMac15,1 | C02NFZZYFY10 | C02438207QXG2Y7FB
      iMac15,1 | C02P32YJFY10 | C02502303GUG2Y78C
      iMac15,1 | C02P2VZ7FY10 | C02501306QXG2Y7AD
      iMac15,1 | C02NM0EDFY10 | C02444701CDG2Y71H
      iMac15,1 | C02NVHZCFY10 | C02451303CDG2Y7JA
      iMac15,1 | C02QLRZ4FY10 | C02543300GUG2Y7JC
      iMac15,1 | C02QJ0UPFY10 | C02541902GUG2Y7JA
      iMac15,1 | C02QG0NGFY10 | C02539700J9G2Y71M
      iMac15,1 | C02N3XYEFY10 | C02429104J9G2Y7UE
      iMac15,1 | C02QW0M3FY10 | C02552700GUG2Y7JA

順番は、以下です。

Product | Serial | Board Serial (MLB)

SmUUIDの値はターミナルのuuidgenコマンドで得られます。もしくは私のPlist-Toolスクリプトで自動生成できます。この結果を、SMBIOS -> SmUUIDにコピーします。

Rt Variables -> ROM を UseMacAddr0 に設定しました。これを設定するとオンボードのMACアドレスを流用してくれます。

BooterConfigは0x28に、CsrActiveConfigは0x3e7に設定しました。これで効果的にSIPを無効にしてくれます。このほか、よく使われる値は以下です。

System Parameters

    <key>SystemParameters</key>
    <dict>
        <key>InjectKexts</key>
        <string>Yes</string>
        <key>InjectSystemID</key>
        <true/>
    </dict>

Inject Kexts:

この設定には3種類が可能です。ここではYesを使用しました。

InjectSystemID:

この設定は、ブート時に、SmUUIDをsystem-idに設定するようCloveに指示します。これはiMessageなどに重要です。

まとめ

以上のconfig.plistを全部まとめたものをこちらで公開しておきます。

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