■ DSDTとは
ACPIはOSによる高度なパワーマネージメントをサポートする為に、ハードウエアの構成要素を列挙したテーブルの集合体である。DSDTはACPIの中でもデバイスの構成情報を列挙したもので、ACPIの中核にあたるものである。
したがって、本定義が間違っていると、OS起動時にデバイスをきちんと判別できなかったり、場合によってはカーネルパニックが発生する。
また、OS起動時はきちんと認識し、一見問題なく動作しているようにみえても、スリープなどパワーステートの変更が発生した場合、OSは本情報を元にデバイスの再ロードをする為、定義がきちんとされていない場合、スリープからの復帰時にデバイスを見失ったりする。
■ 実例1 Phoenix BIOS
-
NEC Express5800/S70 タイプRB
M/BはMSI MS-9666で、BIOSはPhoenix BIOSを採用している。
S70 タイプRBのBIOSは公開されていないが、同じM/Bを採用したExpress5800/54xgのBIOSは
こちらで公開されている。
また、兄弟機として、マザーボードにGIGABYTEのGA-6FASV、BIOSにPhoenix BIOSを採用したExpress5800/GT110bがあるが、こちらのBIOSも
NECとOEM元の
GIGABYTEで公開されている。
ネット上を探したところ、実機のS70/RBから吸い出したといわれるBIOSイメージがアップロードされていたので、S70/RBのBIOSと、5800/54xgのBIOSからACPIテーブルを取り出し、双方の内容を比較した。
内容的にほぼ差異はなかったが、DSDTの定義としてみた場合、下記の不具合(手抜き)がわかる。
- USBの定義で、Universal Host Controllerの定義がない。しかも、デバイスのアドレスが間違っている
- SATAの定義で、各ポートの定義やレジスタの定義がない
- オンボードの音源の定義がない
実際、S70/RBは既知の不具合として、USBキーボードを認識しない、スリープ後にSATA機器(ハードディスク、DVDドライブ等)を見失うなどの症状が報告されており
- マウス・キーボードはPS/2接続
- SATAはAHCIモードではなく、IDEモードで使用する
とすれば、安定動作すると知られている。
更に、GT110bのACPIと比較すると、S70/RBと似通った内容であることがわかるが、GT110bにはAHCI用のSATA定義があり、S70/RBには定義が欠けていることがわかる。実際、GT110bはGA-6FASVのBIOSで更新することで、AHCIを有効にできることも知られている。
これらの制限は本来サーバ機種の為、セキュリティ目的でデータの持ち出しができないようUSBの運用を無効にしたり、高いディスクパフォーマンスを出すためには、別途SASカードの増設を勧めるためなど、サーバ機種という製品としての仕様に由来するものであると考えられる。また、連続稼働が求められるサーバでは、そもそもスリープでの運用も重要視されていないことも挙げられる。
そこで、デスクトップPCとしてスリープ動作も踏まえ、正しい動作をするように各USBの定義や、SATAのポート定義、音源定義の追加などを行った。
-
アップデートファイル
・
Express5800 S70/RB用修正ACPIテーブル、及びDSDT定義
(説明)
- ACPI00_FIX.AMLはWindowsでの挙動を修正するものでBIOSに組み込み直すもの(要BIOSアップデート)
- DSDT.amlはOSx86の動作を可能にするもの(BIOSアップデート不要、ただし、OSx86専用)
追記 2011/01/31)
USBデバイス定義修正、Shutdown Fix追加
ACPI00.AMLがS70/RBのBIOSから抽出したオリジナルモジュールで、ACPI00_FIX.AMLが本修正を加えたもの。ACPI00.dsl、ACPI00_FIX.dslはそれぞれ、AMLファイルを作成する為のソースファイルである(上記に記載した内容を含む個々の修正内容について知りたい場合は、添付したソースを比較し確認すること)。
ACPI00_FIX.AMLをACPI00.AMLとリネームし、元のACPI00.AMLと入れ替えてBIOSを再作成することでACPI定義を修正したBIOSが作成できる。
(注意)
BIOSはメーカーの著作物であり、個体を識別する為のS/Nも埋め込まれているため、本サイトでは修正したACPI00.AMLを追加したBIOSの実物は公開しない。また、BIOSアップデートに伴う危険についても責任を負いかねるので、具体的なアップデート方法についても記載はしない。
DSDT.amlはACPI00_FIX.amlを元に、PCでMac OS Xを動作できるように更に修正を加えたものである。OSx86で用いられているブートローダーのChameleonには、カーネルロード前に、ACPIのDSDTに動的にパッチを適用する仕組みを持っているため、BIOSを修正せずに、本AMLファイルを適用することができる。
■ 実例2 Award BIOS
しかしながら、EFIへ移行しても、ACPIがWindowsでの使用を想定して実装される限り、OSx86での動作には問題があるため、DSDTの修正は避けられない(EFI化とACPIの内容は直接関係ない為)。
Award BIOSを採用しているGIGABYTEのM/Bは従来の手法が使える為、手始めにBIOS(
F7A)からACPIテーブルを抽出し、DSDTを修正した。なお、実機がないため、デバイスをインジェクトする際のdevice-idについては、下記の通りINF アップデート・ユーティリティーの情報を参考にしている。
INFアップデート・ユーティリティーから抜粋
;CougarPoint AHCI
PCI\VEN_8086&DEV_1C02.DeviceDesc="Intel(R) 6 Series/C200 Series Chipset Family 6 Port SATA AHCI Controller - 1C02"
PCI\VEN_8086&DEV_1C03.DeviceDesc="Intel(R) 6 Series/C200 Series Chipset Family 6 Port SATA AHCI Controller - 1C03"
;CougarPoint SMBus
PCI\VEN_8086&DEV_1C22.DeviceDesc="Intel(R) 6 Series/C200 Series Chipset Family SMBus Controller - 1C22"
;CougarPoint USB
PCI\VEN_8086&DEV_1C26.DeviceDesc="Intel(R) 6 Series/C200 Series Chipset Family USB Enhanced Host Controller - 1C26"
PCI\VEN_8086&DEV_1C2D.DeviceDesc="Intel(R) 6 Series/C200 Series Chipset Family USB Enhanced Host Controller - 1C2D"
;CougarPoint LPC Controller
PCI\VEN_8086&DEV_1C46.DeviceDesc="Intel(R) P67 Express Chipset Family LPC Interface Controller - 1C46"
■ 実例3 AMI BIOS
-
EVGA Classified Super Record 2 (EVGA 270-WS-W555)
Phoenix、Awardと来たので、最後にAMI BIOSの例を紹介する。普通に取り上げても面白みがないので、ここでは、ある意味Mac Proも超えたスペックをもつモンスター級M/Bの
EVGA Classified Super Record 2を取り上げる。
最新のBIOS(
A50)から、同じくACPIテーブルを抽出し、DSDTを修正した。6コアのCPUを2個使えば、12コア、24スレッドが実現できるが、8コアCPUに備えて、16コア、32スレッドまで対応していることが、DSDTの中身からもわかる。
なお、現在発売されているSandyBrideは4コアまでのメインストリーム向けで、6コア以上のSandyBride-EPは、2011年3Q以降の登場なのでそれまではX58/5520プラットホームが最上位を担うことになる。
-
FOXCONN H67S
H67SはAMI製のUEFIを採用している。そこで
BIOSイメージから、ACPIテーブルの一部を取り出した所、0x734から0x7AD0にDSDTが含まれていることが確認できた。
DSDTの構成を確認すると、構成自体は従来のAMI BIOSに含まれる一般的なDSDTと変わりはなかったが、プロセッサ定義のScope(_PR)に、Proccesor定義が含まれず、SSDTの定義そのものが埋め込まれていた。このままではOSX起動時にプロセッサを判別できず、カーネルパニックになると思われる為、起動できるようにProcessor定義を追加した。その他は、一般的なDSDT定義の修正をした。
-
アップデートファイル
・
FOXCONN H67S用DSDT定義
(説明)
- ACPI.BINはBIOSイメージから分解・抽出したACPIテーブルの一部で、0x734から0x7AD0にDSDT定義を含む
- DSDT.amlはOSXで動作するように修正を加えたもの。DSDT_nossdt.amlは、DSDT.amlからSSDT定義をのぞいたもの
-
MSI P67A-GD55
P67A-GD55もAMI製のUEFIを採用している。H67Sと同様に、
BIOS(Version 1.7)イメージから、ACPIテーブルの一部を取り出した所、0x734から0x7FC8にDSDTが含まれていることが確認できた。
DSDTの構成を確認すると、やはりScope(_PR)にProccesor定義が含まれず、SSDTの定義そのものが埋め込まれていた。このままではOSX起動時にプロセッサを判別できず、カーネルパニックになると思われる為、起動できるようにProcessor定義を追加した。その他は、一般的なDSDT定義の修正をした。
-
アップデートファイル
・
MSI P67A-GD55用DSDT定義
(説明)
- ACPI.BINはBIOSイメージから分解・抽出したACPIテーブルの一部で、0x734から0x7FC8にDSDT定義を含む
- DSDT.amlはOSXで動作するように修正を加えたもの。DSDT_nossdt.amlは、DSDT.amlからSSDT定義をのぞいたもの
最終更新:2011年02月01日 16:14