Hackintoshのためのkext入門

改定:2018/9/15

f:id:siroanko:20170915223211p:plain

kextとは

kextとはKernel EXTension(カーネル拡張)の略で、カーネルと呼ばれるOSの本体を拡張する一連のファイルです。OSに必要とされる機能が増加し、いちいちカーネルに組み込んでいると管理が大変になったので、別ファイルにして必要に応じて組み込むことになりました。macOSに限らず、多くのOSで一般的な方式です。ネットワーク、グラフィックス、サウンドなどのハードウェアを動かすデバイスドライバの機能も、kextとして提供されています。

Hackintoshのためには、Hackintoshを実現するためにmacOSの機能に手を加えるkextや、実機でサポートされていないハードウェアを動かすためのkextなどが開発されて、配布されています。必要なものを集めてHackintoshにインストールします。

kextの置き場所〜macOSの場合

macOSでは、kextを/System/Library/Extensions/ (/S/L/Eと略されます)もしくは、/Library/Extensions/に置きます。/S/L/Eに置くkextは、SIPで署名チェックされます。なので、当然ながら署名のないHackintosh用のkextを加える場合、SIPをdisableにする必要があります。

kextは、実はファイルではなくてディレクトリです。macOSのファインダーからファイルのように見えているだけで、中には、多数のファイルが含まれています*1。これらのファイルの全てがカーネルから実行できるように、パーミッションが正しく設定されている必要があります。また、kextを起動のたびにkextファイルから読むと時間がかかってしまいます。そこで、キャッシュして高速化を図っています。なので、新しいkextを加えるためには、単にディレクトリにコピーするだけでなく、中身のすべてのファイルのパーミッションを正しく設定して、キャッシュを作り直さないといけません。この作業をGUIで実行するツールも配布されています。

kextの置き場所〜Cloverの場合

kextの追加をCloverにお任せすれば、前節のややこしそうなkextインストールの手間は無関係です。EFI/CLOVER/kextsの中にkextを入れておくとCloverが追加してくれます。SIPはenableのままで大丈夫です。またパーミッション設定もキャッシュ作り直しも不要です。ディレクトリに入れるだけです。以前は、kextによっては(例えばLANのkext)/S/L/Eに入れないと機能しないこともありましたが、最近では、ほとんどのkextがCloverのディレクトリに置いても問題なく機能します。それでも依然として、/S/L/Eに置かないと機能しないkextも稀にありますので、その場合は試行錯誤して確認してください。

EFI/CLOVER/kextsは、macOSのルート、もしくはボリュームのESPのどちらかにあります。デフォルトはmacOSのルートですが、その場合、macOSをまっさらに入れ替えると消えてしまいます。ESPにおいてあれば、アップデートで変更されないので管理が容易です。ESPにCloverをインストールする方法は、バニラインストールとも言われます。以下で説明してあります。

EFI/CLOVER/kextsの中には、macOSのバージョン番号のディレクトリと、Otherという名前のディレクトリがあります。Cloverは、

  1. まず、Otherに入っているkext
  2. 次に、該当するバージョン番号のディレクトリに入っているkext

の順番で、kextをインストールします。この後はmacOSに引き継がれて、/L/E、/S/L/Eの順にkextがインストールされます。同じ名前のkextがあったとしたら、後からインストールされた方が優先します。

f:id:siroanko:20170916105029p:plain

kextは、該当するバージョン番号のディレクトリに入れておいても良いです。もしくは、バージョン番号のディレクトリは使わない(空にしておく、もしくはそもそもディレクトリを作らない)でOtherに全部入れておいても良いです。両方に入れても良いですが、混乱しやすいかもしれません。皆さんのやりやすい方法で管理すれば良いです。

FakeSMC.kext

kextはたくさんありますが、FakeSMC.kextは、Hackintoshするために唯一で必須のkextです。SMCはSystem Management Controller(システム管理コントローラ)の略です。昔は、PMU (Power Management Unit)と呼ばれていました。Macintoshの電力をコントロールしたり、ハードウェアをコントロールするサブシステムです。メインのCPUとは別に、SMCと呼ばれるマイクロコンピュータが内蔵されていて、それがハードウェアの管理を仕切っています。Macintosh独自のもので、ATXマザーボードには(もちろん近いものは搭載されていますが、同一のものは)搭載されていません。でもmacOSはSMCがあるものと思って働きかけてきます。そこで、SMCのふりをするフェイクのSMCを実現するのがFakeSMC.kextです。

NullPowerManagement.kext

現代のCPUは、負荷によって動作周波数を変更したり、スリープをしたりして、消費電力を制御しています。この結果、省電力を実現し、発熱量を減らしています。搭載しているCPUがどのように電力制御を行うかの情報は、マザーボードからACPIテーブルを介してOSに伝えられます。ただ一般のマザーボード使用を想定していないmacOSには、この情報が正しく伝わらないことがあります。そもそも実機で採用されていないCPUの場合には、macOSで対応することができないこともあります。CPUの電力制御が正しく行えない場合、macOSがカーネルパニックを引き起こして起動しないこともあります。

macOSでCPUの電力制御を担当しているkextは、AppleIntelCPUPowerManagement.kextです。NullPowerManagement.kextはこのkextを無効にします。そこ結果、電力制御関連の設定が正しく行われていなくても、とりあえずはHackintoshが起動するようになります。なので、tonymacx86で配布されているインストール用USBメモリ (UniBeast)などのインストーラではこのkextが使われます。

起動してくれるのはありがたいのですが、電力制御が行われないので、CPUは最大出力で稼働し続けます。そこで、DSDT, SSDT, config.plistなどを正しく設定してこのkextがなくても起動するように調整することが、Hackintosh作りの一つの目標になります。

このほかのkext

このほかの主なkextには、

  • Ethernetを動かすためのkext
  • サウンド関係のkext
  • USB関係のkext
  • グラフィックス関係のkext

などがあります。これらは、該当するハードウェアを機能させるためのkextです。そのハードウェアが原因のトラブルを解消する機能を持ったkextもあります。FakeSMC.kext以外のkextは、絶対に必要というものではなくて、必要に応じてインストールすれば良いものです。それぞれのハードウェアの話題のところで説明していこうと思います。

kextの探し方

Hackintoshに必要なkextは、その名前で検索すると開発サイトや配布サイトが見つかります。また、KextUpdater.appを使うと、現在使用しているkextの最新版をチェックしてダウンロードしてくれます。また主要なkextを個別にダウンロードすることも可能です。

*1:macOSのアプリケーション、.appも同様にファイルではなくてディレクトリです。

返信を残す

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