DSDTを編集する

f:id:siroanko:20171010141821p:plain

DSDT (Differentiated System Description Table) はマザーボードがOSに対して提供する るACPI規格に基づく情報です。これを通して、マザーボードの電源イベントに関する情報や、マザーボードが備えている機能、構成部品などの情報を提供します。このテーブルは、メーカーによってマザーボードのファームウェア上に用意されています。

Linux で ACPI の機能が使えないというのはよくある問題です。例えば、ファンが稼働しない、フタを閉じたときに画面がオフにならない、などの問題が発生します。これらの問題は DSDT が Windows しか考えずに作成されているのが原因で、インストール後にDSDTを書き直して(パッチを当てて)修正できます。

Hackintoshの場合、マザーボードがUEFIになってからは、MacintoshのEFIとの差が少なくなったのか、DSDTを改変しなくても動作するようになりました。ただ、ノートPCなどのパワーマネージメントが特殊なハードウェアの場合は、まだDSDT改変が必要です。また、DSDTを書き換えることで、macOSの動作を調整することも可能です。ということで、DSDTの改変のための基本的な手順を紹介します。有用な改変例は、折に触れて、紹介していければ良いかと思っています。

 DSDT情報の差し替え手順

DSDTはAML (ACPI Machine Language)というプログラムのようなデータ形式で記述されます。通常は、マザーボードがAMLをOSに提供します。マザーボードとOSの中間に割り込んだCloverは、マザーボードに代わって、本来あるものとは別のAMLをmacOSに渡すことができます。config.plistで

<key>DSDT</key>
  <dict>
      <key>Name</key>
      <string>DSDT.aml</string>
  </dict>

と設定してあれば、

EFI/CLOVER/ACPI/patched/DSDT.aml

の場所・名前のファイルに記述されたAMLがmacOSに渡されます。

f:id:siroanko:20171015000711p:plainf:id:siroanko:20171015001022p:plain

DSDTを改変する基本的な手順は、以下です。

  1. マザーボードが提供しているDSDTをDSDT.amlファイルとして入手する
  2. これを逆コンパイルしてDSDT.dslというテキストファイルを作る
  3. DSDT.dslに変更を加える
  4. DSDT.dslをコンパイルしてDSDT.amlを作る
  5. DSDT.amlをEFI/CLOVER/ACPI/pachedに置き再起動する

以下で、この手順の詳細を説明します。

バニラなDSDTを入手する

HackintoshでmacOSが動いている状態では、CloverやHackintosh用kextがすでにDSDTを改変している可能性があります。この状態のDSDTを元に改変を進めると、将来のバージョンのCloverやkextで問題が生じる可能性が高いです。トラブルがあった場合の原因の切り分けも困難になります。そこで、マザーボードが提供しているそのままの(バニラな)DSDTを元に、改変を加えるのが良いです。

Cloverやkextが動く前のDSDTを入手するためには、いくつかの方法があります。シンプルなLinux起動DVDや、MS-DOS起動USBメモリを使って起動して、DSDT.aml取得プログラムを動かして入手することもできます。でも、最近のCloverには、DSDT.aml取得機能がありますので、これを使うのが一番簡単です。Cloverの起動ドライブ選択画面で、F1を押すとヘルプが出ます。

f:id:siroanko:20171010142118p:plain

これにあるようにF4を押すと、EFI/CLOVER/ACPI/origin/にDSDTを取得してくれます。実際に実行すると、25種類のファイルがここに保存されます。この中の、DSDT.amlが必要とするファイルです。

MaciASL.appで逆コンパイルする

DSDT.amlは、インテルが提供しているASLコンパイラでコンパイルできます。このコンパイラの機能をGUIから操作して、逆コンパイル、編集、コンパイルなどの機能を全部やってくれる便利なツール(シンプルなIDE: 統合開発環境)がいくつか提供されています。定番は、MaciASL.appです。最新版はこちらで入手できます。

f:id:siroanko:20171010141821p:plain

MaciASLを起動すると、いきなり.dslの情報が表示されます。これは、現在macOSが動いている状態でのDSDTです。なのでCloverなどがすでに改変した後のDSDTです。そこで、前の節で入手したバニラなDSDT.amlを読み込ませます。すると、これを逆コンパイルして人が読める形になった.dsl形式のテキストが表示されます。

MaciASL.appでコンパイルする

改変する前に、逆コンパイルされた.dslのテキストが、正しくコンパイルできることを確認します。逆コンパイルしたものを、そのままコンパイルするのですが、大抵の場合は、エラーが出ます。逆コンパイルが完璧でないことが原因のようです。エラーの一覧が表示されるので、それをクリックするとエラーの箇所を示してくれます。

私の手元の環境では、こんな2個のエラーが出ました。最初のエラーをクリックすると、Zeroという変数の行でした。

f:id:siroanko:20171014235048p:plain

プログラムの流れと関係なく唐突に0という変数が出てきたので、エラーを出しているようです。おそらく、元のデータの余白に0が埋め込まれていて、それがそのまま逆コンパイルされたのではないかと思います。

この行だけをコメントアウトすると次の行で同じエラーが出ます。Zeroはかなりの数、続いています。そこでこれを全部コメントアウトします。

f:id:siroanko:20171014235428p:plain

2個目のエラーも、Arg0という変数が唐突に現れたことが原因のようです。これもなんかの事情で埋め込まれた意味のない0のようです。

f:id:siroanko:20171014235457p:plain

これも(こちらは1行だけでした)

//     Arg0

などとしてコメントアウトします。Returnの後の行なので、絶対に到達しない部分ですので、削除して構わないはずです。

f:id:siroanko:20171014235702p:plain

その結果エラーはゼロになりました。警告が多数出ていますが、これは無視して大丈夫です。めでたくコンパイルできました。コンパイルエラーは、マザーボードによって違うと思います。でもソースを見ていれば、なんとなく対処法がわかるかと思います。

ファイルメニューから、「Save As…」などを選び、現れるファイルダイアログで、ASLとAMLで保存できます。AMLファイルが、最終的に必要とするファイルですし、次回もこれから逆コンパイルして作業することができます。ただ、コメントなどは消えてしまうので、ASL形式でも保存しておくと良いです。

MaciASL.appで編集する

ASLが表示されているメイン領域で、自由に編集できます。結構使いやすいです。また、パッチするための手順だけが配布されていることがあるのですが、それを読み込む機能などがあります。

DSDT改変で、実際にどんなことができるのかは、今後の記事で、試しながら紹介していきたいと思います。

例えば以下ではUSBの項目を削除してみました。

9件のコメント

  1. Boot macOSさん、

    このMaciASLのツールはRehabManさんとこやSourceForge.netに置いてあるんですけど、最近アップデートなし状態で、古いやつだとSSDT-PMC.amlが開けないので、探したらacidantheraのGithubに新しめのがおいてあるのでそちらを使って解決しました。
    https://github.com/acidanthera/MaciASL/releases
    何気に見た目がダークモードに対応してたりしてました。。。

    1. 貴重な情報いただきありがとうございます。記事で紹介させていただきました。

  2. zoro以外のエラーについてはどうすればいいんだろ
    素人は手を出すなか・・・

    1. Zero以外のエラーとはArg0が現れるエラーでしょうか?コメントアウトの例を追記しておきました。

  3. 毎度勉強させて頂いております。有難う御座います。
    不明な事があるので質問させて頂きます。
    問題のノートパソコンは Panasonic Let’s Note NX-4です。
    DSDT.amlを保存し、MaciASL.appでコンパイルする際、arg0と言うもののエラーは何とか解決したのですが、次は、local0でエラーが出てしまい、そこのエラーなのですが、Returnの前に有りまして、そこの条件分岐を消し、コンパイルして動かそうとすると、Catalinaが立ち上がらない状態です。

    御力をお貸しして頂ければと思い、連絡致しました。

    問題のamlファイルはUP致しますね。
    宜しくお願いいたします。

    https://drive.google.com/open?id=1YqdxIhn8bQ4YdMIdb2rqCTeA3FQC7QE-

    1. 修正したDSDTを以下に置きました。
      https://www.dropbox.com/sh/2sxipw8b3ay7d5i/AAAqXP4Ocw0hwB0bRFIudrUya?dl=0

      DSDT.dslが修正後のソース、DSDT.amlがコンパイル後のバイナリです。
      ソースの修正箇所に@@@ fixとコメントを入れていますので、ご参考に。

      で、Catalinaが起動できないのは上記とは別の話かと思います。
      NX4は所有していませんがNX2、MX3ではEC0をECにリネームしないと
      起動できませんでしたので、同じ症状ではないかと。
      DSDT、SSDTを直接変更するか、CLOVERのリネーム機能で対処できますので
      Google等で検索なさってみてください。

      他、上記2機種でトラックパッドが、まともに動きませんでした。
      Synapticsの独自プロトコルを採用しており、VoodooPS2では未サポートでしたので
      Linuxのソースを元に改造して対処しました。
      NX4は不明ですが、同じ状態であれば改造kextを提供できますので、仰ってください。
      Let’sNote固有の話ですので別スレッドの方が良いかもしれません。

      1. 迅速なご対応誠に感謝致します。

        有難うございます。

        >>Linuxのソースを元に改造して対処しました。
        NX4は不明ですが、同じ状態であれば改造kextを提供できますので、仰ってください。
        Let’sNote固有の話ですので別スレッドの方が良いかもしれません。

        丁度その問題で困っており今までemlは他のパソコンからの流用で起動させてまして、今回も始めそうしておりまして、キーボードとトラックパッドが認識しなく、emlを自分で取得してやろうとした次第です。

        emlの問題でなければ、その改造kextが欲しいので、お願い出来ますか?

        ファイル、誠に感謝致します。有難うございました。

        お手数おかけいたしますがよろしくお願いします。

        1. キーボードが動作しない話とトラックパッドがまともに動作しない話は
          別物です(キーボードのPNP名がVoodooPS2が期待しているPNP名ではないため)。
          Let’sNote固有の話になりますので、フォーラム > User Buildsに
          スレッドを立てて頂ければ、そちらにコメントします。

          1. 御連絡誠に有難う御座います。
            ただいまスレッドを立てさせて頂きました。
            有難う御座いました。

            また、オーディオデバイスも認識しない状況も併せて投稿させて頂きました。

            オーディオは使えなくても困らないので、出来れば認識させたい程度で思っております次第です。
            御手数をお掛け致しまして申し訳ございません。

            宜しくお願いいたします。

返信を残す

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