Comet Lake-S搭載自作PCの機種IDを、iMac 2020に合わせてiMac20,1に設定しました。iMac 2020が発売されたばかりなので、現バージョンのOpenCoreとmacserialがiMac20,1に未対応です。そこでGitHubから最新版を入手して、MLB情報を追加して、ビルドしました。
Table of Contents
OpenCoreをビルドする
先の記事で紹介したように、第10世代Comet Lake-S搭載のマシンは、iMac 2020に合わせてiMac20,1に設定するのが良いと思います。最新のmacOS 10.15.6 (19G2021)は、iMac20,1に対応しています。でも現在のOpenCore 0.6.0は、iMac 2020が発売される前のバージョンなのでiMac20,1に対応していません。
OpenCoreは現在0.6.1の開発が進んでいて、GitHubでソースコード一式を入手できます。後で詳しく説明しますが、0.6.1ではiMac20,1, 20,2の機種IDに対応しつつあります。なのでこれをビルドすれば、対応したOpenCoreを入手できます。
OpenCoreのビルドはやったことがなかったのですが、いつもコメントを書いていただいているMifjpnさんのサイトの記事を見て、試してみました。最初はいくつかのツールをダウンロードすることになりましらが、基本的には自動で簡単にビルドできました。
ビルドした結果は、こちらに置いておきました。後で説明するiMac20,1対応のmacserialも含まれています。
https://bootmacos.com/download/OpenCore-0.6.1-RELEASE.zip
これでiMac20,1に対応したmacserialとOpenCoreが得られます。そこで、macserialでiMac20,1のシリアル番号を生成して、これをconfig.plistに書き込み、OpenCore 0.6.1を使えば、iMac 2020に相当するマシンになります。
ここから先は、ソースコードの細かい話ですので、興味の無い方は、「IDを生成する」の節まで飛ばしてください。
macserialとOpenCore
Hackintoshのconfig.plistに書くべきシステムシリアル番号、ボードシリアル番号 (MLB) などを自動生成してくれるツールにmacserialがあります。以前の記事でも紹介しました。macserialのソースコードは、今は同じacidantheraさんが管理するOpenCoreのソースに組み込まれています。以前のmacserialの部分は、OpenCoreのUtilitiesディレクトリに収められています。
macserialは、機種ID、シリアル番号の規則、MLBの規則などの様々なMacの機種情報を把握した上で、シリアル番号などを自動生成しています。Macの機種情報は、従来はmacserialのヘッダファイルに手作業で書き込まれていました。しかし今は、OpenCoreのAppleModelsというディレクトリの中で、MacBook, iMacなどの種類ごとにテキストファイルで書き込まれています。機種情報は、macserialだけでなくOpenCoreパッケージの他のプログラムでも利用されています。なので、config.plistに個体特有の機種情報を書くだけで、それ以外の機種共通の情報、例えばBoard IDやファームウェアバージョンなどは、自動的に用意されるのです。
iMacの情報は、AppeModela/DataBase/iMacの中にあります。最初、OpenCore 0.6.1のGitHubを見ていたときには、iMac20,1, iMac20,2の情報はDataBaseの中にありませんでした。しかし、最近になって有志の方が書き込んでくれたようで、IM201.yaml, IM202.yamlという2個のファイルが作られています。そこで、現時点でOpenCore 0.6.1をビルドすると、iMac 2020に対応したOpenCoreが得られます。またターミナルでmacserialのディレクトリに移動してmakeコマンドを打ち込めば、macserialもビルドできます。
macserialを使ってみる
この記事を書いている時点で配布されているmacserialを使ってみると、生成されるiMac20,1, 20,2のMLBが不完全でした。例えば、iMac20,1のシリアルとMLBを生成すると、以下のようになります。
% ./macserial --model iMac20,1 C02C68ZDPN5T | C02005101QX00008C C02D90GAPN5T | C02035401J900008C C02CRFZPPN5T | C020213034N0000AD C02C9MZFPN5T | C02008108QX00001H C02DK0K5PN5T | C02042501GU0000UE C02CK0A6PN5T | C02015130CD0000CB C02CK6Y6PN5T | C02015902J90000JC C02D1MYSPN5T | C02027501QX00001M C02D2CYVPN5T | C02028101GU00001F C02C5VZKPN5T | C020041304N0000JC
シリアル番号は正しく生成されているようですが、MLBの方は下6桁から下3桁の4文字が0になっています。シリアル番号を紹介する記事で説明したように、本来ならばここにはiMac20,1特有のボードコード(AppleBoardCode)が書かれるべき場所です。AppleBoardCodeが0なのは、前述のIMAC201.yamlに記載が無く、仮の値として0000が書き込まれているからです。
MLBを見つけてくる
シリアル番号とMLBを生成するためには、実機のiMacの番号を見つけて、それから機種固有のコードを知る必要があります。上の例で、シリアルに共通しているのはPN5Tという下4桁の部分で、これが機種固有のAppleModelCodeです。シリアル番号は、以前の記事でも紹介したように、ネットを探すとわりと簡単に見つかります。「このMacについて」にシリアル番号が表示されるからです。これに対してMLBは簡単には表示されません。なのでGitHubに機種情報を書いてくださった方も、ネットからわかる範囲でDataBaseを用意してくれたので、生成されるMLBの一部が0000になってしまっています。
ということで酷暑の中、iMac 2020が展示されているお店を巡ってMLBを調べてきました。大都会のアップルストアに行ければ良かったのですが、近場の量販店に置いてあったのはどこも10500搭載モデルが1台だけでした。つまりiMac20,1だけでした。そのMLBを調べた結果、いずれの展示品iMacのMLBも、AppleBoardCodeの部分はPHCDでした。ちなみに、シリアルのAppleModelCodeはどれもPN5Tでした。貴重な情報を得られたので、お礼に買い物もしてきました。
macserialをビルドする
このAppleBoardCodeを
OpenCore/AppleModels/DataBase/iMac/IM201.yaml
に書き込みます。以下のようになります。
# Note, first model code is used by macserial AppleModelCode: - "PN5T" - "PN5Y" - "PN5X" - "PN5W" - "PN5V" - "PN78" - "PN7D" - "PN77" - "PN7C" # Note, first board code is used by macserial AppleBoardCode: - "PHCD"
ちなみに現時点でAppleModelCodeは9個登録されています。9個あっても、コメントにあるように、シリアル番号生成には最初の1個だけが使用されます。なので、特定のAppleModelCodeを使いたかったら、それを最上位に移動しておくと良いです。この後、
OpenCore/AppleModels/update_generated.py
を実行します。このコマンドでmacserialの機種情報ヘッダファイル、modelinfo_autogen.hが更新されます。README.mdにあるように、yamlを解釈するPythonライブラリであるpyyamlを事前にインストールしておく必要があります。
この後、OpenCore全体をビルドすればmacserialもビルドされてiMac20,1対応になります。macserialだけをビルドするのであれば、ターミナルで
OpenCore/Utilities/macserial
に移動し、
make
とタイプすると、macserialをビルドできます。makeするための条件を満たすために、
touch macserial.c
としてソースファイルの日付を更新しておく必要があるかもしれないです。
IDを生成する
こうしてビルドした新macserialを使えば、以下のようにAppleBoardCodeがPHCDのMLBを生成してくれます。これをconfig.plistに書き込めば良いです。
% ./macserial --model iMac20,1 --week 30 C02D4SZ5PN5T | C02030100GUPHCDAD C02D409PPN5T | C02030500J9PHCD1F C02D4LZGPN5T | C02030130J9PHCDCB C02D4GYUPN5T | C02030100CDPHCD8C C02D4BZ8PN5T | C02030404GUPHCD8C C02D4DYJPN5T | C02030403CDPHCDJA C02D47YYPN5T | C02030600GUPHCDA8 C02D4EY9PN5T | C02030303GUPHCDA8 C02D40JYPN5T | C02030100GUPHCDAD C02D40QHPN5T | C020304054NPHCDAD
ちなみに、上記ではmacserialのweekオプションを使って製造週を30週に指定しています。これを指定しないと、例えば2020年1月製造とか、2020年10月製造のシリアルが生成されてしまいます。iMac 2020が未発売時点の製造日や、未来の製造日は避けたいです。30週は、2020年7月22日から28日なので、この記事の時点で妥当な値です。
OpenCore 0.6.1に反映されました
この記事を書いている間に、今回紹介したAppleBoardCode情報がOpenCore 0.6.1に反映されました。GitHubに出してあったpull requestをvit9696さんが受理してくれました。たったの4文字だけですがOpenCoreに貢献できて嬉しいです。
まとめ
iMac20,1のMLBを街で探して、OpenCoreのソースに反映しました。これでiMac20,1のシリアル番号と完全なMLBが作れるようになります。これらをconfig.plistに書き込み、OpenCore 0.6.1とmacOS 10.15.6 (19G2021) でComet Lake-S自作機を動かしていますが、今のところ問題はありません。
参考: 「IDを生成する」で提示されているSerial#及びMLB情報を活用してTry
現有の我がHacintosh環境は、i7-6700Kプロセッサーを搭載したASRock Z170Mマザーボードにて稼働(Big Sur Public Beta #6) 。
これまで iMac 18,3での識別コードを指定。でも、当該投稿記事の内容に発奮しダメ元で、OC 0.6.1 C onfig.plist内容を改め、iMac20,1に修正してみました。
- 再ブートは正常完了
- 「このMacについて」の表示画面上には、正しく iMac(Retina 5K, 27-inch, 2020) と表示
追)
しばらく様子見ですが、問題がなければこのまま利用したいと思います。(2年間の健康寿命が伸びる?)
後書き:
上述のテスト内容に関して、後日 再確認したら Config.plistじょうでは「iMac18,3」のままで、正しくiMac20,1に書き換えていませんでした。
そこで、後追いで このiMac20,1に書き換えたら、ログオン画面が表示された後はUSBマウス&キーボードがロックされて使用不可。
注) 実機がSkyLake(i 7-6700K)なのに、浮かれてiMac18,3したら運よく許容範囲内(?)でしたが、さすがに4世代先のCometLakeではOut -of-Scopeでは門前払いされた次第です。
「Config.plist内容を改め、iMac20,1に修正」して「『このMacについて』の表示画面上には、正しく iMac(Retina 5K, 27-inch, 2020) と表示」のにもかかわらず「Config.plistじょうでは『iMac18,3』のままで、正しくiMac20,1に書き換えていませんでした。」のは謎ですね。
モデルIDによってmacOSの設定が変わりCPU, iGPU, チップセットに最適化されているので、実際に搭載しているCPUに合ったモデルIDが良いのかなとは思います。SkylakeはBig Surでもサポート対象ですし。
レス、ありがとうございます。お手数を煩わせてしまったようで、申し訳ありません。
「モデルIDによってmacOSの設定が変わりCPU, iGPU, チップセットに最適化されているので、実際に搭載しているCPUに合ったモデルIDが良いのかな」.. 、おしゃる通りです。
追記:おバカな実験ではありましたが、今回の実験で判明したことがあります。
ええ加減なConfig.plistの定義がますます許されなくなっているようです。
1)『このMacについて』の表示画面上には、正しく iMac(Retina 5K, 27-inch, 2020) と表示」のにもかかわらず、 当該config.plist 内容において、iMac 18,3 –> iMac 19,1 だけの変更であれば 問題なく起動・稼働可能。
注:iMac 19,1の機種には、T2セキュリティーチップが搭載されていない。
2) 『このMacについて』の表示画面上には、正しく iMac(Retina 5K, 27-inch, 2020) と表示」のにもかかわらず、 当該config.plist 内容において、iMac 18,3 –> iMac 20,1 だけの変更は内部システム上許されずシステム・フリーズ。
注:iMac 20,1の機種には、T2セキュリティーチップがiMac機種で初めて搭載された。
後書き:
「iMac 18,3 –> iMac 20,1 だけの変更は内部システム上許されずシステム・フリーズ。」の原因が判明。USBinjectALL.kextをiMac 20,1 用のもの(0.7.6)に置き換えて、解決しました。
最近youtubeで見ますと、H12—-PN7C のシリアルナンバーを見かけますが、
大陸製では無くHangaryあたりに変わったのでしょうか?
H12はmacserialのソースに入っていなくて不明の製造地ですね。
https://github.com/acidanthera/OpenCorePkg/blob/master/Utilities/macserial/modelinfo.h