サイトアイコン Boot macOS

自作PCにiMac20,1のシリアル番号を設定する

Comet Lake-S搭載自作PCの機種IDを、iMac 2020に合わせてiMac20,1に設定しました。iMac 2020が発売されたばかりなので、現バージョンのOpenCoreとmacserialがiMac20,1に未対応です。そこでGitHubから最新版を入手して、MLB情報を追加して、ビルドしました。

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 bootloader. Contribute to acidanthera/OpenCorePkg development by creating an account on GitHub.
GitHub - acidanthera/OpenCorePkg: OpenCore bootloader - GitHub

OpenCoreのビルドはやったことがなかったのですが、いつもコメントを書いていただいているMifjpnさんのサイトの記事を見て、試してみました。最初はいくつかのツールをダウンロードすることになりましらが、基本的には自動で簡単にビルドできました。

 Clover,OpenCoreのデイリービルドの日々が続いています。 とりあえずBig Surが落ち着くまで(Cloverが対応して)続きそうです。 かんたんにデイリービルドの方法をまとめておきます。(まずは要Xcodeです。)1.Clo
デイリービルドの日々・・・Big Sur Betaが終わるまで - Hackintosh夢日記

ビルドした結果は、こちらに置いておきました。後で説明する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自作機を動かしていますが、今のところ問題はありません。

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