Mac信者のHackintosh修行

惑星で一番美しいOSが1台でも多くのマシンで動くことを目指します。

VirtualSMC: もう1つのFakeSMC

SMCとは何か?

SMC (System Management Controller) はIntelMacに搭載されたサブシステムです。小さなコンピュータチップですね。Intel版になる前にもこのようなサブシステムは存在していて、SMU (System Management Unit)とかPMU (Power Management Unit)などと呼ばれていたようです。SMCは、メインのIntel CPUとは独立して動いて、次のような仕事を担当しています。

  • 温度と電力のモニターと制御
  • バッテリー充電
  • ビデオモードの切り替え
  • スリープ、wake, ハイバネーション、LED表示

ちなみに最近のMacに搭載されているApple T2セキュリティチップは、SMCも内蔵しているらしいです。

f:id:siroanko:20181122224250p:plain

SMCのふりをするFakeSMC.kext

一般的なATXマザーボードにはSMCは搭載されていません。SMCは独立したサブシステムですが、OSからアクセスすることもあるので、SMCが無いとmacOSが起動しません。FakeSMX.kextは、名前の通り、SMCがあるかのように振舞ってくれるkextです。macOSを起動するために唯一必須のkextなのです。

また上述のように、SMCには温度をセンシングして冷却コントロールする機能もあります。FakeSMCはこれらの機能も提供するので、連携するアプリケーションを使用することで、コンピュータの温度やファン回転数を知ることもできます。

新登場のVirtualSMC

FakeSMCと同じ機能を実現するために、最近VirtualSMCというkextが登場しているようです。最初のリリースは今年(2018)の9月12日です。出たばかりです。

github.com

githubのページには、特徴として以下のことが書かれています。

  • macOS 10.8 以降をサポート(10.9 以降を推奨)
  • MMIOプロトコルと割り込み応答により最近のOSとの互換性を確保(MMIOってメモリマップドIOのことかなぁ?)
  • キー割り当てとR/W保護を正しく報告
  • 機種に合わせたチューニングとSMCバージョンを提供
  • センサとキーのためのプラグイン拡張可能
  • smcdebug=xxブートオプションをサポート
  • 本物のSMCが見つかったらそれを置き換える(本物のMacのSMCを置き換える目的でも使用できる)
  • 全機能を発揮するにはLilu.kextが必要

だそうです。

redditでも紹介されて、FakeSMCとVirtualSMCの比較が書かれていました。

www.reddit.com

redditの達人達の評価によると、

  • FakeSMCは歴史もあって安定していてちゃんと動く
  • FakeSMCはハードウェアモニタ機能が充実しているので、それを使いたい場合には引き続き使用すべき
  • VirtualSMCは新しい設計に基づいてより厳密なエミュレーションを目指している。性能やデバッグで有利なので、将来性がある。

ということです。安定性を求めるなら定評のあるFakeSMCを使い続けて、新しいものに興味があるならVirtualSMCを使ったら良いのではということでした。ChameleonがCloverに置き換わった時も、こんな感じの評判でしたので、将来はVirtualSMCに置き換わっていくと思われます。

VirtualSMCを使ってみた

そこで早速使ってみました。githubからダウンロードしてmakeするのは面倒なので、コンパイル済みを探します。そこで、最近お世話になっているKext Updater.appを使いました。

siroanko.hatenablog.com

ここで、Load Single Kextを選ぶと、VirtualSMCをダウンロードできます。

f:id:siroanko:20181122234604p:plain

こうして入手したVirtualSMC.kextをFakeSMC.kextと置き換えてみました。

f:id:siroanko:20181122235445p:plain

入れた場所は、ESPの中です。ドキドキしながら再起動したところ、無事、ブートできました。最初の起動には少し時間がかかった気がしましたが、2回目以降の起動はFakeSMCの時よりも早くなったような気がしました。ただし気のせいかもしれません。

ダウンロードしたファイルには、VirtualSMC.kext本体の他に、センサー関係のkextらしきものがいくつか入っています。

f:id:siroanko:20181123000059p:plain

今回は、一つもインストールしませんでしたが、そのうち調査したいと思います。