Sandy Bridge搭載Thinkpad X220でMojave

Sandy Bridge CPUとIntel HD Graphics 3000を搭載したThinkpad X220でmacOS Mojave Public Betaが動きました。機種チェックをさせないようにブートオプション設定して、グラフィックスドライバーを入れれば動きます。

前回のあらすじ

Thinkpad X220にHigh Sierraをインストールする記事を書きました。

Thinkpad X220は、IBMが打ちやすさにこだわって設計したキーボードを備えた最後のモデルです。Sandy Bridge世代の製品で、MacintoshではMacBookPro8,1や、Macmini5,1に相当します。今回のMojaveでこれらは全てサポート外になりました。Thinkpadらしさを留めたX220が、現行macOSで動かなくなるのは残念なことでした。

Mojaveで動かない理由

Mojaveが非対応モデルで動かない理由は次の2点です。一つは、Mojaveの起動時にマシンのBoard-IDをチェックしていることです。チェックの結果、Mojave非対応モデルでは起動を中断します。この結果、画面に禁止マークが出て止まってしまいます。

もう一つは、グラフィックスドライバーが提供されていない事です。Intel HD Graphics 3000のドライバーが、Mojave から削除されてしまったのです。

(1) 機種チェックをさせないようにする

Cloverを-vオプション付けて起動すると、禁止マークの裏で表示されているエラーメッセージがわかります。

この番号はconfig.plistのSMBIOSセクションに書き込んだ Board-IDでした。MacBookPro8,1 (Early/Late 2011) が内蔵しているボードのIDです。これをチェックして、Mojave対応モデルかどうかを調べているようです。

機種チェックを行わないようにするには、Cloverのブートオプションに

-no_compat_check

を追加します。5chで教えてもらいました。例えばconfig.plistに以下のように設定します。

<key>Boot</key>
  <dict>
    <key>Arguments</key>
    <string>-v -no_compat_check</string>

これでMojaveが一応起動するようになります。

(2) グラフィックスドライバを入れる

機種チェックを回避すれば一応は起動します。しかし解像度は1024×768画素と低解像度で、解像度を上げることはできません。画面はチラつき、画面描画も遅いです。とても実用にはならない状態です。これはMojaveからIntel HD Graphics 3000のドライバが削除されてしまったからです。なんてことをするんだと思いますが、このモデルがOSの動作対象外になったので仕方ないところです。

でも嬉しいことに、以前のバージョンからドライバを持って来れば動くという情報がtonymacx86にありました。

www.tonymacx86.com

どういうわけか一世代前のSierraのドライバが良いようです。tonymacx86でこの方法を紹介してくれた人の話では、最初は直近世代のHigh Sierraのドライバを試したところ、ブラックスクリーンが出て動作しなかったそうです。そこで、もう一世代前のSierraを試したら成功したとのことでした。ということで、Sierra から、

  • AppleIntelHD3000Graphics.kext
  • AppleIntelHD3000GraphicsGA.kext
  • AppleIntelHD3000GraphicsGLDriver.bundle
  • AppleIntelHD3000GraphicsVADriver.bundle
  • AppleIntelSNBGraphicsFB.kext
  • AppleIntelSNBVA.bundle

の6個のkext/bundleをMojaveに持ってきます。これを/System/Library/Extensions/に入れます。EFI/CLOVER/kextsの中に入れてもある程度動きますが、Maps.appなどの表示に問題が発生します。/S/L/E/に入れるとvanillaなシステムにならないのですが、仕方ないところです。/S/L/E/にkextを入れてパーミッションやキャッシュを設定するのは手作業でも可能ですが、今回はこのツールを使いました。

また、追加したkextを有効にするSIP設定をします。config.plistを以下のように設定します。通常、野良kextを/S/L/Eで使うには0x03にするのですが、今回はApple純正のkextなので0x02でも良いようです。0x01は信頼できないkextを許可する、0x02はファイルシステムへの制限を無効にする設定のようです。できるだけSIPの機能を生かすためには、最小限の0x02が良いと思います。

<key>RtVariables</key>
        <dict>
        <key>CsrActiveConfig</key>
             <string>0x02</string>
        </dict>

Mojaveが動いた

この結果、フル解像度でMojaveが動くようになりました。グラフィックスがちゃんと動いているかどうかを確認するには、Maps.appで地図が正しく表示されるかどうか、SafariでYoutube動画を再生できるかどうか、などを確認すると良いそうです。

「このMacについて」を見ると、機種はEarly 2011のMacBook Proになっています。またグラフィックスもIntel HD Graphics 3000になっています。古いドライバが仕事をしていることがわかります。Mojaveでは本来起動もしない仕様なマシンであることが面白いと思います。

Metalをサポートした機種のみがMojave対応になりましたが、Mojaveを動かすためにMetalは必ずしも必要ではないようです。今回Mojaveが非対応になった実機のMacでも、同じような手法でMojaveを動かすことが可能だと思われます。

Mojaveを動かすもう一つの方法

Mojaveのサポートから外された古いMacでMojaveを動かすためのパッチが公開されています。実機を対象としたパッチですが、Hackintosh でも有効と思われます。

macOS Mojave Patcher

このパッケージの中を見てみると、Intel HD Graphics 3000のドライバーなどが含まれています。おそらく、上で紹介した手法と同様に、古いmacOSから持ってきたドライバーを利用しているのでしょう。また、macOSにパッチを当てることで機種チェックを回避していると思われます。

11件のコメント

  1. おはようございます!
    ThinkPad X260 に HighSierra を入れて使用しています。
    Mojave を試すつもりでインストールしょうと思ってます。
    起動USBが起動しリンゴ画面の最後ところでハングしてしまいます。
    Config.plist を変更したり Clover のパラメータ等を変えたり、tonymacx86.comの事例の Config.plist を試したりしていますが現象が全く
    よくなりません。大変申し訳ありませんがBoot USB のEFI を参照させて頂くことが可能でしょうか ?
    よろしくお願いします。
    日本語でHackintoshをこれだけ詳しく書いてるWEBはたぶんここが日本一だと思います。ファンになりました。

  2. ありがとうございます。今使っているESPの中身は、ほぼ、以下で配布されているそのままです。これのkextやCloverを最新にして、SMBIOSのシリアル番号などを変更した程度です。また、config.plistの起動パラメータに-no_compat_checkを追加して機種チェックをさせないようにしていますが、これはX260なら不要なので関係ないと思います。
    http://www.mcdonnelltech.com/X220_macOS_10.13_Utility_and_Kext_pack_07.09.2018.zip
    ただ、X260はX220とはCPUもグラフィックスも違うので、あまり参考にはならないと思います。DSDT.amlも違うはずですので。
    今のX260のHigh Sierraはバニラな方法(Hackintoshに必要なkext類を全部ESPに置く)でインストールされていますでしょうか?もしそうならば、今のX260のCloverで起動して、そのUSBを起動させられるはずと思うのですが、その結果はいかがでしょうか。

  3. 早速のお返事ありがとうございます。
    HighSierra と同じ方法で起動USBを作ってHighSierra とMojave のImage 展開が違うだけで、EFIは全く同じものを使ってもリンゴ画面の最後ところで止まったままでした。ご指摘のように ACPI 部分は X220 と X260は違うと思います。 -no_compat_check で試します。有難うございます。

  4. 起動の最後の方で止まることから、グラフィックスドライバ関係な気がしますね。

  5. Hi, could you share kexts files that you used?.. It would be nice if you share your efi folder too. Thanks a lot

  6. この記事のSierraドライバはバージョンのいくつから持ってきたのでしょうか?

    実は12.4にアップデートするとSleepが動かなくなるという現象が発生していて
    第五世代のHD Graphics 5500は12.3と12.4以降とは仕様が変わっている可能性があります
    (kextのファイル容量も100キロバイトも増えてる)
    もしかすると12.3までのドライバはMojaveで動かないのではないかと考えています
    ですので参考までにどのバージョンのを移植したのかわかると幸いです

    1. 10.12.6から持ってきました。でもドライバファイルのタイムスタンプはどれも2016年10月20日になっています。10.12.1のリリースが10/24なのでその頃ですね。

      1. なるほど・・・
        ちなみに10.12.3を直接インストールしたThinkPad E550(broadwell)ですが
        AppleIntelHD3000Graphics.kextの
        タイムスタンプは作成・変更日が2017年1月5日 15:55
        サイズは618,518バイト
        バージョンは10.2.12
        になっています。(10.12.3のリリースが1月25日)

        もしかすると何らかの原因で10.12.1のドライバが残っていてそれを使っている状態かもしれませんね
        となると、うちのThinkPad君にも可能性が見えてきました
        一度、mojaveにして移植してみたいと思います。また報告します

        1. 10.12.3 -> 10.12.6へ試しました
          残念ながら効果はありませんでした
          マイナーアップデートではドライバはアップデートされず作成日が同じままだったのです
          Brodwellにおけるスリープ後に画面が真っ黒状態はドライバのせいではなかったようです。
          もっと根本的な何かが問題なのだと判明しました。

返信を残す

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

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