300チップセットマザーボードのRTC設定

Intel 300チップセットを搭載した現行のマザーボードからRTCの扱いが変わりつつあるようです。これが原因でmacOSの起動に失敗する事があります。DSDTへのパッチをconfig.plistに加える、もしくはBIOSで設定する事により回避できます。

BIOSをアップデートして失敗したというこちらの記事

で紹介した内容ですが、いまやHackintoshを作る上での一般的な注意事項になったと思います。なので、GUIDESカテゴリーに見合った内容に書き直して再掲します。

Real Time Clock (RTC)

コンピュータは、ファイルのタイムスタンプ管理やネットワーク同期など、いろいろな場面で正確な日付と現在時刻を必要とします。そこで、コンピュータの電源がoffになっても、日付と現在時刻を更新し続ける水晶時計機能が用意されました。これがRTC(Real Time Clock, 実時間時計)です。RTCは小さな部品としてマザーボードの片隅に載っていました。今ではチップセットに組み込まれています。RTCは、マザーボードの電源が切られた場合でも、マザーボード上のコインバッテリーで動き続けます。ちなみに太古のコンピュータにはRTCはありませんでした。なので、コンピュータ室を占拠する大型計算機も、AppleやNECの初期のパソコンも、電源を入れて最初に行う仕事の一つが、今日の日付と現在時刻の入力作業でした。

RTCは現時刻を知る時計として使われるだけでなく、プログラム実行のきっかけを提供する目覚まし時計としても使われます。RTCにはコンピュータ作業に割り込みをする機能があり、割り込みで起動するタスクやスレッドを設定可能です。なので、毎日決まった時間に行う仕事、一定時間で繰り返す仕事などを設定しておけます。さらには、仕事の時間切れ管理にも使われます。例えば、特定のハードウェアがコンピュータに装備されているかどうかを確認する作業を考えてみます。そのハードウェアに、あなたは存在しますか?と問いかけるのですが、返事をじっと待っていては時間の無駄です。装備されていないために、永遠に返事が来ない可能性も高いです。そこで確認呼びかけと同時に、RTCに例えば10秒後にアラームしてくれるようにお願いします。そうすれば、返事を待つ間に別の仕事を実行したり、待っている間は休眠して他のスレッドにCPU資源を譲ることもできます。このように、外部デバイスにアクセスしつつ、アラームを仕掛けて返事を確認する作業は、macOSの起動時にもいくつも行われているようです。このような過程で、もしRTCのアラーム機能が動かなければ、macOSの起動が止まってしまう可能性があります。

RTCの世代交代

300シリーズチップセットになってRTCの世代交代が進んでいるようです。BIOSメニューの表現を借りると、従来型のRTCからACPI (Advanced Configuration and Power Interface)のTime and Alarmデバイス(長いので以下、ACPI時計と書きます)に移行しているようです。そしてACPI時計を使う事がデフォルト設定になりつつあるようです。

ACPI時計ではOSが起動しない

ところが、ACPI時計を使うとmacOSの起動が止まってしまうようです。最初に紹介した過去の記事では、ASUSのZ390マザーボードのBIOSを1105に更新したところ、ACPI時計がデフォルトで使われるようになってしまって、macOSが起動しなくなったことを書きました。-vで起動すると起動途中で文字表示が止まってそのまま動かなくなります。apfs.efiなのかVirtualSMCのあたりのメッセージで止まります。そのあたりの処理(apfsなら起動ドライブへのアクセスかもしれません)でRTCの割り込みが効かなくなり、処理が止まってしまったような様子です。RTCがACPI時計に置き換わって、使えなくなったのが原因だと思います。Cloverの問題なのか、macOSそのものがRTCに依存しているのかわかりませんが、この問題に対策を施さないとmacOSが起動しません。

実はこの問題は、1年以上前からASRockのマザーボードで発生していました。ASRockはいち早くACPI時計をデフォルトにしたようです。これを回避するパッチが見つかるまで、ASRockのマザーボードではmacOSが起動しない状態がしばらく続きました。HackintoshするならASRockは避けた方が良いかなと思っていたところ、数ヶ月後のBIOSアップデートでASUSのマザーボードも同様にACPI時計がデフォルトになってしまいました。フォーラムの方で教えていただきましたが、MSIのマザーボードでもACPI時計がデフォルトになっているようです。GIGABYTEの様子は把握していませんが、おそらくここ1年くらいで、どのマザーボードもレガシーRTCからACPI時計に移行していると思われます。この対策として次の2つの方法があります。

対策1:パッチを当てる

幸いなことに、ASRockのために配布されたパッチは、他のマザーボードでも動くようです。例えばこちらで紹介されています。

パッチの元記事によると、「ASRockマザーボードのDSDTのバグで、そのうちASRockが治してくれると思うけど、とりあえずこのパッチが動く」という意見らしいです。でも、このパッチが他のマザーボードでも有効らしいので、ASRock限定のバグ対策では無い気がします。これはACPI時計への移行を無効にしているパッチ、もしくはACPI時計を利用する問題点を回避するパッチなのではと思われます。パッチの方法は、config.plistのACPI –> DSDT –> Patchesに以下の記述をすることです。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>ACPI</key>
	<dict>
		<key>DSDT</key>
		<dict>
			<key>Patches</key>
			<array>
				<dict>
					<key>Comment</key>
					<string>RTC fix</string>
					<key>Disabled</key>
					<false/>
					<key>Find</key>
					<data>
					oAqTU1RBUwE=
					</data>
					<key>Replace</key>
					<data>
					oAqRCv8L//8=
					</data>
				</dict>
			</array>
		</dict>
	</dict>
</dict>
</plist>

対策2 : BIOSでRTCを選択する

ACPI時計への移行をやめて、レガシーなRTCを使い続ける設定が一部のBIOSにあるようです。以下で紹介されています。

ASUSのマザーボードには、Advanced–>PCH Configurationの中に、System Time and Alarm Sourceの設定があります。これをデフォルトのACPI Time and Alarm DeviceからLegacy RTCに変更すれば良いようです。

ところが全てのマザーボードにこのメニューが出てくるわけではないようです。例えば、ROG MAXIMUS XI HEROのBIOS ver. 1105, 1302, 1401の画面にはこの選択肢が出てきません。もしかしたら将来のバージョンでRTCの選択肢が出てくるようになるのかもしれません。という事で、このメニューが出ないマザーボードでは、BIOSでLegacy RTCを指定する方法は使えません。

対策3 : 古いBIOSを使い続ける

レガシーなRTCがデフォルトになっている古いBIOSからアップデートしないという消極的な解決策もあります。いろいろなバグが修正されているはずなので、一般的には最新バージョンの方が気持ち良いです。でもBIOSに限っては、動いているなら更新するなと注意しているメーカーのページも時折見かけます。全ての環境を網羅して動作試験を行うことは困難なので、問題なければアップデートして欲しくないという事情もわからないではありません。なので、古いまま使い続けるのは良い選択肢かもしれません。

うっかりアップデートしてしまっても、古いBIOSがメーカーサイトで配布され続けていますので、それに戻せば良いです。ただ、新しいBIOSにすると、通常の手順では古いバージョンに戻せなくなる場合があります。そこでこちらの記事ではUSB BIOS Flashbackという機能を使って古いバージョンに戻しています。

まとめ

現行のマザーボードがレガシーRTCからACPI時計に移行した事でmacOSが起動しない問題が発生することがあります。この問題は、DSDTへのパッチをconfig.plistに加える、もしくはBIOSで設定する事により回避できます。

一般的にパッチは、本来の設定を無理やり変更する性質のものです。なので本来の機能に副作用が出る可能性があります。また将来のアップデートでパッチターゲットのパターンが変更になり、パッチが効かなくなる可能性もあります。なので、可能ならばBIOSメニューの設定を行う方法が望ましいと思います。とはいえ、いろいろなハードウェアでこのパッチは正しく機能している様です。安心して使って良いと思います。

返信を残す

メールアドレスが公開されることはありません。

「名前」「メールアドレス」「サイト」は空白でも投稿できますが、日本語が含まれない投稿は無視されます。(スパム対策)