自作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のビルドはやったことがなかったのですが、いつもコメントを書いていただいている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自作機を動かしていますが、今のところ問題はありません。

7件のコメント

  1. 参考: 「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年間の健康寿命が伸びる?)
     

  2. 後書き:
     上述のテスト内容に関して、後日 再確認したら Config.plistじょうでは「iMac18,3」のままで、正しくiMac20,1に書き換えていませんでした。
     そこで、後追いで このiMac20,1に書き換えたら、ログオン画面が表示された後はUSBマウス&キーボードがロックされて使用不可。

    注) 実機がSkyLake(i 7-6700K)なのに、浮かれてiMac18,3したら運よく許容範囲内(?)でしたが、さすがに4世代先のCometLakeではOut -of-Scopeでは門前払いされた次第です。

  3. 「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でもサポート対象ですし。

  4. レス、ありがとうございます。お手数を煩わせてしまったようで、申し訳ありません。
    「モデル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機種で初めて搭載された。

    1. 後書き:
      「iMac 18,3 –> iMac 20,1 だけの変更は内部システム上許されずシステム・フリーズ。」の原因が判明。USBinjectALL.kextをiMac 20,1 用のもの(0.7.6)に置き換えて、解決しました。

  5. 最近youtubeで見ますと、H12—-PN7C のシリアルナンバーを見かけますが、
    大陸製では無くHangaryあたりに変わったのでしょうか?

須磨の辰五郎 へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です