サイトアイコン Boot macOS

ig-platform-idの設定方法

CPU内蔵グラフィックス(iGPU)を使うために、機器によってはconfig.plistでig-platform-idを指定する必要があります。idを記述できる場所は2カ所あります。Cloverの機能を使う場合と、WhateveGreen.kextを使う場合で場所が違います。

ig-platform-idについて

ig-platform-idとは何で、どうして指定する必要があるのでしょうか?大変申し訳ありませんが、よく知りません。以下は推測です。勘違いしているようでしたら、コメントで教えてください。

hackintool.appを色々いじっていて、以下のように推測しました。iGPUはCPUダイの中に焼き込まれていますが、おそらくは様々なモードで稼働可能です。例えばノートPCでしたら液晶パネルが接続されますし、デスクトップでしたらDPやHDMIディスプレイが接続されます。フレームバッファの量も設定できるでしょう。他にも、実装されるハードウェアに対応していろいろな設定が可能なはずです。その設定デフォルトのセットをインテル(?)が提供していて、それがig-platform-idなのではと思います。同一のiGPUに対して複数のig-platform-idが存在していて、コンピュータメーカは製品の構成に合わせて、そのうち一つを使っているのでしょう。

Macも同様に、ハードウェア構成に合わせて適切なig-platform-idを使っています。例えばCoffee Lakeに搭載されているIntel UHD Graphics 630を使う場合、MacBookPro15,1ではig-platform-idとして0x3E9B0000を使用し、Macmini8,1では0x3E9B0007を使用します。なので、config.plistでシステムIDとしてMacmini18,1を指定すると、macOSはig-platform-idが0x3E9B0007だと解釈して動作すると考えられます。0x3E9B0000は液晶ディスプレイを接続する構成用のidで、0x3E9B0007はDPポートを接続する構成用のidです。hackintoolの画面を示します。LVDSというのはLCD用のインタフェースらしいです。

ig-platform-idは、使用しているiGPUの種類と、出力ピンの組み合わせに合うものから探していくことになります。一般的な指針は、こちらで詳しく書かれています。この中のrecommended framebuffersから選択すると良いです。LCDを内蔵しない自作デスクトップPCなどの場合はdesktop用のidを、市販のノートPCにmacOSをインストールする場合はlaptop用のidが適しているようです。

Various patches necessary for certain ATI/AMD/Intel/Nvidia GPUs - WhateverGreen/FAQ.IntelHD.en.md at master · acidanthera/WhateverGreen
WhateverGreen/FAQ.IntelHD.en.md at master · acidanthera/WhateverGreen - GitHub

hackintoshのマザーボードやノートPCの構成が、macOSの想定にたまたま合致していれば、問題なく起動するでしょう。でも、異なっているとiGPUが動かず、画面が出ません。Windowsの場合は、ハードウェアにidを問い合わせるなどして、現実に合わせてくれるのかもしれません。Macの場合はApple自身がハードウェアも作っているので、柔軟な対応する必要はない、という状態なのかもしれません。ig-platform-idが間違っている場合、

などの状態になります。このような場合は、起動しようとしているhackintoshに合ったig-platform-id(システムIDで指定したMacが使うidとは違うid)に指定し直す必要があります。動作するig-platform-idを探し出す作業に困難が伴う場合がありますが、idを差し替える作業自体は、CloverやWhateverGreen.kextが行ってくれます。

Cloverで設定する

Cloverで設定する場合は、config.plistのGraphicsのセクションを使います。例えば、iGPUしか使用ない場合で、ig-platform-idを0x01620005にする場合は、以下のようにします。つまり、Intelをインジェクトするよう設定し、ig-platform-idを16進数で指定します。

<key>Graphics</key>
<dict>
	<key>Inject</key>
	<dict>
		<key>ATI</key>
		<false/>
		<key>Intel</key>
		<true/>
		<key>NVidia</key>
		<false/>
	</dict>
	<key>ig-platform-id</key>
	<string>0x01620005</string>
</dict>

この方法はCloverが行ってくれるので、WhateverGreen.kext (WEG) は不要です。むしろWEGの動作に悪影響を与える可能性もあるらしいので、この設定を使うならWEGは使うべきではないでしょう。WEGはグラフィックスに関する様々なパッチを自動的に当ててくれます。なので、WEGを使わない場合は、iGPUで発生するいろいろなトラブルに対応したkextをいくつか使用する必要があります。ただ、Cloverを使うと、Cloverの起動画面のoptionメニューによりig-platform-idを変更できます。違うidを簡単に試すことができるので、動くidを探す作業では便利だと思いました。

WhateverGreen (WEG) で設定する

同じ設定をWEGで行うには以下のようにします。まずはCloverでの機能を無効にします。このためGraphicsセクションで以下のように書きます。

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

これでCloverはグラフィックス機能に対して何もしなくなります。あとは全てWEGに任せることになります。WEGにig-platform-idを伝える場合は、Devices –> Propertiesセクションに以下のように書きます。

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

PciRoot(0x0)/Pci(0x2,0x0)は、iGPUが接続されているPCIe番地です。AAPL,ig-platform-idにidをBase64で書きます。0x01620005のBse64値を求めるには、ターミナルで以下のようにタイプします。BQBiAQ==です。

echo -en "\x05\x00\x62\x01" | base64
BQBiAQ==

Devices, Propertiesで書く方法は、Graphicsセクションに書く方法に比べて、ややこしくてわかりにくいですが、WEGを使うならこちらを使うべきです。

まとめ

ig-platform-idは、Cloverでも、WEGでも設定できます。WEGの万能なパッチ機能はもやは手放せないので、config.plistでのig-platform-id設定も、WEGのための設定をすべきです。

今回例示したig-platform-idは、Intel NUC DC3217で使われているidです。最近、このNUCの表示が不安定になったので対処しました。その際に、config.plistを見たら、Cloverを使う古い方法だったので手直ししました。なのでClover方式、WEG方式の両方で動作することを確認してあります。NUCの表示不具合対応の顛末は次の記事で紹介します。

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