DSDT (Differentiated System Description Table) はマザーボードがOSに対して提供する るACPI規格に基づく情報です。これを通して、マザーボードの電源イベントに関する情報や、マザーボードが備えている機能、構成部品などの情報を提供します。このテーブルは、メーカーによってマザーボードのファームウェア上に用意されています。
Linux で ACPI の機能が使えないというのはよくある問題です。例えば、ファンが稼働しない、フタを閉じたときに画面がオフにならない、などの問題が発生します。これらの問題は DSDT が Windows しか考えずに作成されているのが原因で、インストール後にDSDTを書き直して(パッチを当てて)修正できます。
Hackintoshの場合、マザーボードがUEFIになってからは、MacintoshのEFIとの差が少なくなったのか、DSDTを改変しなくても動作するようになりました。ただ、ノートPCなどのパワーマネージメントが特殊なハードウェアの場合は、まだDSDT改変が必要です。また、DSDTを書き換えることで、macOSの動作を調整することも可能です。ということで、DSDTの改変のための基本的な手順を紹介します。有用な改変例は、折に触れて、紹介していければ良いかと思っています。
Table of Contents
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に渡されます。
DSDTを改変する基本的な手順は、以下です。
- マザーボードが提供しているDSDTをDSDT.amlファイルとして入手する
- これを逆コンパイルしてDSDT.dslというテキストファイルを作る
- DSDT.dslに変更を加える
- DSDT.dslをコンパイルしてDSDT.amlを作る
- 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を押すとヘルプが出ます。
これにあるようにF4を押すと、EFI/CLOVER/ACPI/origin/にDSDTを取得してくれます。実際に実行すると、25種類のファイルがここに保存されます。この中の、DSDT.amlが必要とするファイルです。
MaciASL.appで逆コンパイルする
DSDT.amlは、インテルが提供しているASLコンパイラでコンパイルできます。このコンパイラの機能をGUIから操作して、逆コンパイル、編集、コンパイルなどの機能を全部やってくれる便利なツール(シンプルなIDE: 統合開発環境)がいくつか提供されています。定番は、MaciASL.appです。最新版はこちらで入手できます。
MaciASLを起動すると、いきなり.dslの情報が表示されます。これは、現在macOSが動いている状態でのDSDTです。なのでCloverなどがすでに改変した後のDSDTです。そこで、前の節で入手したバニラなDSDT.amlを読み込ませます。すると、これを逆コンパイルして人が読める形になった.dsl形式のテキストが表示されます。
MaciASL.appでコンパイルする
改変する前に、逆コンパイルされた.dslのテキストが、正しくコンパイルできることを確認します。逆コンパイルしたものを、そのままコンパイルするのですが、大抵の場合は、エラーが出ます。逆コンパイルが完璧でないことが原因のようです。エラーの一覧が表示されるので、それをクリックするとエラーの箇所を示してくれます。
私の手元の環境では、こんな2個のエラーが出ました。最初のエラーをクリックすると、Zeroという変数の行でした。
プログラムの流れと関係なく唐突に0という変数が出てきたので、エラーを出しているようです。おそらく、元のデータの余白に0が埋め込まれていて、それがそのまま逆コンパイルされたのではないかと思います。
この行だけをコメントアウトすると次の行で同じエラーが出ます。Zeroはかなりの数、続いています。そこでこれを全部コメントアウトします。
2個目のエラーも、Arg0という変数が唐突に現れたことが原因のようです。これもなんかの事情で埋め込まれた意味のない0のようです。
これも(こちらは1行だけでした)
// Arg0
などとしてコメントアウトします。Returnの後の行なので、絶対に到達しない部分ですので、削除して構わないはずです。
その結果エラーはゼロになりました。警告が多数出ていますが、これは無視して大丈夫です。めでたくコンパイルできました。コンパイルエラーは、マザーボードによって違うと思います。でもソースを見ていれば、なんとなく対処法がわかるかと思います。
ファイルメニューから、「Save As…」などを選び、現れるファイルダイアログで、ASLとAMLで保存できます。AMLファイルが、最終的に必要とするファイルですし、次回もこれから逆コンパイルして作業することができます。ただ、コメントなどは消えてしまうので、ASL形式でも保存しておくと良いです。
MaciASL.appで編集する
ASLが表示されているメイン領域で、自由に編集できます。結構使いやすいです。また、パッチするための手順だけが配布されていることがあるのですが、それを読み込む機能などがあります。
DSDT改変で、実際にどんなことができるのかは、今後の記事で、試しながら紹介していきたいと思います。
例えば以下ではUSBの項目を削除してみました。
Boot macOSさん、
このMaciASLのツールはRehabManさんとこやSourceForge.netに置いてあるんですけど、最近アップデートなし状態で、古いやつだとSSDT-PMC.amlが開けないので、探したらacidantheraのGithubに新しめのがおいてあるのでそちらを使って解決しました。
https://github.com/acidanthera/MaciASL/releases
何気に見た目がダークモードに対応してたりしてました。。。
貴重な情報いただきありがとうございます。記事で紹介させていただきました。
zoro以外のエラーについてはどうすればいいんだろ
素人は手を出すなか・・・
Zero以外のエラーとはArg0が現れるエラーでしょうか?コメントアウトの例を追記しておきました。
毎度勉強させて頂いております。有難う御座います。
不明な事があるので質問させて頂きます。
問題のノートパソコンは Panasonic Let’s Note NX-4です。
DSDT.amlを保存し、MaciASL.appでコンパイルする際、arg0と言うもののエラーは何とか解決したのですが、次は、local0でエラーが出てしまい、そこのエラーなのですが、Returnの前に有りまして、そこの条件分岐を消し、コンパイルして動かそうとすると、Catalinaが立ち上がらない状態です。
御力をお貸しして頂ければと思い、連絡致しました。
問題のamlファイルはUP致しますね。
宜しくお願いいたします。
https://drive.google.com/open?id=1YqdxIhn8bQ4YdMIdb2rqCTeA3FQC7QE-
修正した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固有の話ですので別スレッドの方が良いかもしれません。
迅速なご対応誠に感謝致します。
有難うございます。
>>Linuxのソースを元に改造して対処しました。
NX4は不明ですが、同じ状態であれば改造kextを提供できますので、仰ってください。
Let’sNote固有の話ですので別スレッドの方が良いかもしれません。
丁度その問題で困っており今までemlは他のパソコンからの流用で起動させてまして、今回も始めそうしておりまして、キーボードとトラックパッドが認識しなく、emlを自分で取得してやろうとした次第です。
emlの問題でなければ、その改造kextが欲しいので、お願い出来ますか?
ファイル、誠に感謝致します。有難うございました。
お手数おかけいたしますがよろしくお願いします。
キーボードが動作しない話とトラックパッドがまともに動作しない話は
別物です(キーボードのPNP名がVoodooPS2が期待しているPNP名ではないため)。
Let’sNote固有の話になりますので、フォーラム > User Buildsに
スレッドを立てて頂ければ、そちらにコメントします。
御連絡誠に有難う御座います。
ただいまスレッドを立てさせて頂きました。
有難う御座いました。
また、オーディオデバイスも認識しない状況も併せて投稿させて頂きました。
オーディオは使えなくても困らないので、出来れば認識させたい程度で思っております次第です。
御手数をお掛け致しまして申し訳ございません。
宜しくお願いいたします。