OpenCoreはCloverから分岐し、OZMOSISの流れを取り込んだ新しいオープンソースのブートローダーです。Z390マザーボードで動かしたところとりあえずはmacOSが起動しました。
追記:最近のOpenCore関連の記事もご覧ください。
ASUS Z390 + Coffee LakeのブートローダをOpenCoreにする
OpenCoreとは
OpenCoreは、完璧にオープンソースであることが特徴の新しいブートローダーです。Cloverから分岐し、OZMOSISの流れを取り込んでいます。OZMOSISを開発していたドイツのHackintosh-Forum.deの人たちが開発を進めているようです。OZMOSISってどんなものだったかと言うと、ファームウェア形式のブートローダーで、マザーボードのBIOSを置き換えて動作します。OZMOSISをマザーボードのBIOS更新機能を使ってインストールすれば、普通のマザーボードがmacOSを直接起動できるマザーボードに変身します。macOSもmacOSインストーラも実機と同様にそのまま起動できるという理想を追ったブートローダーだったのですが、調整やアップデートのたびにBIOS更新作業をするのは大変でした。ChameleonやCloverみたいにドライブの一部に書き込む方式の方が色々楽です。ということでOZMOSISはあまり流行りませんでした。開発チームもそれを認識して、今度はClover方式のブートローダーを作ることにしたのだと思われます。
使用したハードウェア
OpenCoreを試したハードウェアは、以下で紹介したZ390マシンです。モデルIDはiMac19,1で、macOS Mojave 10.14.5です。
ASUS ROG MAXIMUS XI HERO (Z390), 9900K
ここで使っているkextは
- AppleALC.kext
- IntelMausiEthernet.kext
- Lilu.kext
- USBInjectAll.kext
- VirtualSMC.kext
- WhateverGreen.kext
です。efiファイルは大半がClover 5018で配布されているものです。
- ApfsDriverLoader.efi
- AptioMemoryFix.efi (これはKext Updater.appで入手)
- FSInject.efi
- VirtualSmc.efi (VirtualSMC.kextに同梱されているもの)
- VBoxHfs.efi
- EmuVariableUefi.efi
またUSBInjectAll.kextで使うためのSSDTファイルも使っています。こちらで作成したものです。これがSSDT-UIAC.amlという名前です。
OpenCoreを入手する方法
いろいろな方法がありますが、一番お手軽なのは最近のKext Updater.appを使う方法です。Kext UpdaterもOpenCoreを作っている人たちが活躍しているHackintosh-Forum.deで作られていますので、その関係でOpenCoreダウンロード機能が実装されているのだと思います。Load Bootloaderのラジオボタンを選択して、右のポップアップメニューからOpenCoreを選択します。

ダウンロードすると、Kext-Updatesフォルダの中にOpenCoreというフォルダができて、この中にデバッグ版とリリース版

- OpenCore-0.0.4-DEBUG
- OpenCore-0.0.4-RELEASE
のフォルダが出来ています。今回はRELEASE版を使ってみましたが、DEBUG版の方がより多くのエラーメッセージを出してくれるらしいです。
ESPディレクトリ構築
Docsフォルダの中には、とても詳しい取扱説明書が入っています。Cloverにはあまりなくて、ネット上のマニュアルも古かったりします。説明書を一緒に配布してくれているのは助かります。まだちゃんと読んでませんが、必要な情報は全部書いてあるのではないかと思います。マニュアルによると、構築すべきディレクトリ構造は以下の通りのようです。

グレーの項目は任意の項目です。なので、EFIの下に、BOOTとOCを作って、OCの中のDriversにefiファイルを、Kextsにkextファイルを入れれば良いようです。またOCの中にconfig.plistを置きます。名前がOCになっただけで、CloverのESP配置とだいたい同じです。この図に従ってESPの中にディレクトリを用意し、DriversフォルダとKextsフォルダに上記のefiファイルとkextファイルを入れました。またACPIフォルダにSSDT-UIAC.amlを入れました。
config.plist編集
Docsフォルダの中に、マニュアルと一緒にconfig.plistのサンプルファイルも入っています。名前が、Sample.plistとなっています。今回はこのファイルをもとに動かしてみました。まずはSample.plistをconfig.plistに名称変更します。そして以下の手順で書き変えました。
SMBIOS設定
まずは機種設定からです。どうやら
<key>MLB</key>
<string>C02921130GULNV9JA</string>
<key>SystemProductName</key>
<string>iMac19,1</string>
<key>SystemSerialNumber</key>
<string>C02YR2YHJV3Q</string>
<key>SystemUUID</key>
<string>E45005B4-95C7-4B0C-9739-30947DDEB37C</string>
FileVault設定
この状態で起動させようとしたところ、FileVaultの用意ができていないというような内容のメッセージが出て起動が中断しました。config.plistを見ると、
<key>Security</key>
<dict>
<key>ExposeSensitiveData</key>
<integer>2</integer>
<key>HaltLevel</key>
<integer>2147483648</integer>
<key>RequireSignature</key>
<false/>
<key>RequireVault</key>
<false/>
<key>ScanPolicy</key>
<integer>983299</integer>
</dict>
efi設定
次に、HFSPlus.efiが見つからないというメッセージで起動が中断されました。最近はAPFSになって、HFS+での起動は使わないので、上記のリストのようにCloverデフォルトのVBoxHfs.efiを使っていました。なんでこのメッセージが出るのかと思ったらconfig.plistの
<key>UEFI</key>
<dict>
<key>Drivers</key>
<array>
<string>VBoxHfs.efi</string>
<string>ApfsDriverLoader.efi</string>
<string>EmuVariableUefi.efi</string>
<string>FSInject.efi</string>
<string>AptioMemoryFix.efi</string>
<string>VirtualSmc.efi</string>
</array>
kext設定
ほかも見てみると、
IntelMausiEthernet.kextの名前が違っている(IntelMausi.kextになっている)のとEnabledされていないようなので、修正しました。
<dict>
<key>BundlePath</key>
<string>IntelMausiEthernet.kext</string>
<key>Comment</key>
<string></string>
<key>Enabled</key>
<true/>
<key>ExecutablePath</key>
<string>Contents/MacOS/IntelMausiEthernet</string>
<key>MatchKernel</key>
<string></string>
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
また、USBInjectAll.kextの記述も追加しました。順番が大事のようです。arrayの最初の方に入れたら動きません。arrayの最後に追加しました。
<dict>
<key>BundlePath</key>
<string>USBInjectAll.kext</string>
<key>Comment</key>
<string></string>
<key>Enabled</key>
<true/>
<key>ExecutablePath</key>
<string>Contents/MacOS/USBInjectAll</string>
<key>MatchKernel</key>
<string></string>
<key>PlistPath</key>
<string>Contents/Info.plist</string>
</dict>
SSDT設定
使用するSSDTもconfig.plistで指定する必要があるようです。今回は、SSDT-UIAC.amlを使います。そこで、
<dict>
<key>Comment</key>
<string>USB list for USBInjectAll</string>
<key>Enabled</key>
<true/>
<key>Path</key>
<string>SSDT-UIAC.aml</string>
</dict>
を追加しました。
動作確認
BIOSでOpenCoreをインストールしたドライブを選択すると、Cloverと同様に起動ボリュームの選択画面が出ます。テキストだけのシンプルな画面です。ここで10.14.5の入ったMacintosh HDを選択しました(この例ではキーボードの5を押す)。この後、設定に不備があると上記のようなエラーメッセージが出ることもありますし、起動が停止することもあります。

でも、ここまでの設定で、なんと起動しました。config.plistで手付かずの項目がいっぱいあるのに、とりあえず起動したのは意外でした。よかったです。

使用したconfig.plistを以下においておきます。
OpenCore config.plist for Z390 - Pastebin.com
動くこと
画面が出て動作します。Radeon RX 580が正しく動きます。IntelMausiEthernet.kextも動きます。なのでLAN接続ができます。またBroadcomの純正WiFiも動きます。
USBInjectAll.kextと自作のSSDTの組み合わせで、USBの取捨選択ができています。15個制限問題を解決できています。
動かないこと
シャットダウンすると画面は消え、シャットダウンプロセスが実行されるのですが、電源が切れるところまで行き着きません。電源スイッチを長押しして強制的にoffにする必要があります。その影響で次の起動の時にBIOS表示で警告が出ます。ACPI関係の設定が足りないのだと思います。
OpenCoreに行くべきか?
ということで、OpenCoreでの起動を確認できました。今後は、USBの指定方法や、今回見た以外のconfig.plistの設定など、マニュアルや検索して調べて見たいと思います。
ではCloverをやめてOpenCoreに移行すべきでしょうか。OpenCoreの人たちは、以下のようなメリットを訴えています。
- 完全にオープンソースなので安心
- 設計が新しい
確かにCloverは開発過程がそれほどオープンになっていないので、わかりにくいところがあるかと思います。ロシアで開発されているCloverとドイツで開発されているOpenCoreでは、偏見かもしれませんが、なんとなくOpenCoreに安心感を感じます。開発がオープンなのでHackintoshの主流がOpenCoreに移行していく可能性は高いです。でも今現在では、Cloverに関するノウハウが大量にネットにありますし、しばらくはCloverが使われると思います。
主流ブートローダーは、数年前にChameleonからCloverに交代しました。ただ、この交代では、レガシーなMBR (マスターブートレコード)からESPに対応すること、起動時に動的にパッチを当ててくれる機能、macOSとの相性が良くなることなど、いくつもメリットがありました。CloverからOpenCoreに変えても、目に見えるメリットはないので、移行は緩やかかもしれません。CloverからOpenCoreに移行したらグラフィックスカードの動作が安定したと言う情報も見かけました。今後どうなるにしても、選択肢が複数あることは良いことです。
