Corpnewtさんのhackintoshデスクトップのためのバニラガイドから、今回は「Haswellマシンのためのconfig.plistの作り方」のページをご紹介します。
ちなみにこのガイドでは、
のconfig.plistの作り方が解説してあります。他のCPUを使う場合はそれを見てください。また、Config.plistの基礎編もご覧ください。
世代の近いCPUではそれぞれかなりの部分が共通です。Haswellは実際のiMacで採用されていて、歴代CPUの中でも互換性が高いと評判です。なので特殊な設定はありません。
(ここから抄訳)
(訳注:元記事ではClover Configuratorのスクリーンショットも多数掲載されていますが、config.plistだけを紹介します。Configuratorの操作は元記事を見てください。)
Table of Contents
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では以下を指定しました。
- FixShutdown – いくつかのマザーボードでシャットダウンしようとしても再起動してしまう問題を解決します。これをtrueにすると、今度は逆にシャットダウンの問題を引き起こすこともあります。その場合はdsableにします。
- このほか、IRQの衝突を解消するなどの指定がしてあります。これらは全てのハードウェアに必要ではないかもしれませんが、適用しても大きな害はありません。
Patches:
Patchesセクションでは、DSDTのパーツをCloverにより動的に改名します。本物のMacを使っているわけではないうえ、macOSは特定のDSDTパーツ名を前提にしていません。そこでmacOSが稼働するように、名前を非破壊的に変更します。ここでは以下の改名をしています。
- EHC1 を EH01に変更 – これによりbuilt-in USB injectorsとの衝突を避けます
- EHC2 を EH02に変更 – これによりbuilt-in USB injectorsとの衝突を避けます
- SAT0 を SATAに変更 – 潜在的なSATA 互換性を改善します
Drop Tables:
PatchesセクションではDSDTに軽い変更を施します。SSDTはDSDTの一部分を置き換えるものです。Drop Tablesは、特定のSSDTテーブルを起動時に無視するよう指定します。先に述べたように、MacとATXマザーボードは異なるので、macOSが問題を起こすのです。ここでは以下の2個を追加しています。
- DMAR – これはVt-dに関する問題を防止します。Vt-dは仮想マシンのためのPCIパススルーで、Hackintoshではほぼ全く機能しません。
- MATS – High Sierra以降で、このテーブルが読み込まれると印刷不可能なキャラクタによりカーネルパニックする可能性があります。
FixHeadersとSSDT:
ここでは以下の指定をします。
- FixHeaders – MATSテーブルをドロップことに加えて念の為に設定します。 これをtrueにするとCloverは印刷不可能なキャラクタによるカーネルパニックを防止します。
- PluginType – X86PlatformPlugin をロードするためにいくつかのDSDTデータをインジェクトします。これにより、ネイティブなCPU電力制御を実現する手助けになります。この設定はHawell以降のCPUでのみ機能します。
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:
いくつかの起動オプションを追加しました。
- -v – verboseモードになり、Apple logoとプログレスバーの裏側に表示されるメッセージが見えるようになります。Hackintoshする人に貴重な情報です。
- dart=0 -Vt-d問題に対するもう一つの対策です。なくても良いです。
- debug=0x100 – カーネルパニック時の再起動を防止します。運が良ければカーネルパニックに至った原因を発見できるかもしれません。
- keepsyms=1 – これはdebug=0x100と一緒に設定し、macOSがカーネルパニック画面にシンボルも表示するよう設定します。これでカーネルパニックの原因追求の手助けになるかもしれません。
- shikigva=40 – これはiGPU専用の設定です。Shiki関係の設定を行います。これにより以下のことが可能になります。
- 8 – AddExecutableWhitelist – whitelistがパッチされる
- 32 – ReplaceBoardID – AppleGVAで使うboard-idが別の値に置き換えられる
DefaultBootVolume と Timeout:
- DefaultBootVolume – NVRAMが次に起動するドライブを覚えておくために使用します。
- Timeout – DefaultBootVolumeで起動するまでの待ち時間の秒数です。負の値にするとタイムアウトしません。0にするとGUI画面をスキップします。
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は以下です。実態に合わせていずれかを使用します。
- 0x0D220003 – これはiGPUがディスプレイを使用する場合に使われます。
- 16進数を入れ替えると0300220Dになります。
- 入れ替えたバージョンをBase 64で表すとAwAiDQ== になります。
- 0x04120004 – これはiGPUが計算タスクにだけ使用される場合(表示には使われない場合)に使われます。
- 16進数を入れ替えると04001204 になります。
- 入れ替えたバージョンをBase 64で表すとBAASBA== になります。
このほか、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が使えるようになります。
- 0x04120000 – これはmacOSでサポートされていないHD 4600デバイスIDです。
- 12040000 最初の2桁を入れ替えます。
- EgQAAA== そのbase 64です。
以上を基にした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:
起動時に表示したくないボリュームを書いておきます。今回は何も指定しませんでした。以下が現れて困るようでしたらついかしておきます。
- Preboot
- VM
名前以外に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を使う場合は、以下の項目にチェックを入れます。
- Apple RTC – これにより再起動でBIOSがリセットされてしまう現象を防止します。
- KernelPM – これにより、this setting prevents writing to MSR 0xe2に書き込みをしてしまうことを防ぎ、ブート時のカーネルパニックを防止します。
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を使いました。細かい機種割り当ては、次のようにすれば良いです。
- iGPUを使うHaswellマシンならiMac14,1を使う
- dGPUを使うHaswellマシンならiMac14,2を使う
- Haswell RefreshマシンならiMac15,1を使う
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)
- iMac15,1,の部分はSMBIOS -> Product Nameにコピーします。
- Serialの部分はSMBIOS -> Serial Numberにコピーします。
- Boardの部分はSMBIOS -> Board Serial Number と Rt Variables -> MLBにコピーします。
SmUUIDの値はターミナルのuuidgenコマンドで得られます。もしくは私のPlist-Toolスクリプトで自動生成できます。この結果を、SMBIOS -> SmUUIDにコピーします。
Rt Variables -> ROM を UseMacAddr0 に設定しました。これを設定するとオンボードのMACアドレスを流用してくれます。
BooterConfigは0x28に、CsrActiveConfigは0x3e7に設定しました。これで効果的にSIPを無効にしてくれます。このほか、よく使われる値は以下です。
- 0x0 – SIPを完全に有効にする
- 0x3 – 署名のないkextsの使用と保護されたディレクトリへの書き込みを許可する
- 0x3e7 – SIPを完全に無効にする
System Parameters
<key>SystemParameters</key> <dict> <key>InjectKexts</key> <string>Yes</string> <key>InjectSystemID</key> <true/> </dict>
Inject Kexts:
この設定には3種類が可能です。ここではYesを使用しました。
- Yes – CloverがEFIのkextを使用するよう指定する。
- No – CloverがEFIのkextを使用しないよう指定する。
- Detect – FakeSMC.kextがkextキャッシュに存在していない時だけkextを使用するよう、Cloverに指定する。
InjectSystemID:
この設定は、ブート時に、SmUUIDをsystem-idに設定するようCloveに指示します。これはiMessageなどに重要です。
まとめ
以上のconfig.plistを全部まとめたものをこちらで公開しておきます。
ノート(Dynabook R734,4700MQ)にインストールしてみましたが、毎回起動時にグラフィック設定にある「inject EDID」を有効にしないと内臓液晶ディスプレイで出力されません。
参考にするべき資料、又は設定などありますか?
ノートPCでのHackintoshの事はほとんど知らないので、お役に立てなくてすみません。inject EDIDで検索すると、二度目以降の起動でも有効にするにはどうすると良いかという記事がいくつか見つかるようです。