Slide 1

Slide 1 text

初心者のためのACPI

Slide 2

Slide 2 text

自己紹介 Twitter ID: @akachochin (F.Yoshida) • お仕事ではNetBSD/Linuxカーネルのソースコード読んでる時間が 6割程度の組み込みソフト屋さん。 • 趣味はお名前の通り、居酒屋めぐり。場末の飲み屋でHoppyとか ビールとか飲むのが至福です。勉強会の後の飲み会で見かけます。

Slide 3

Slide 3 text

ACPIについて話すきっかけ 書いてみようと思ったきっかけは@uchan_nosの以下の発言。 ごめんね、同人誌じゃなくて(笑)。 • slack見ていると、サンプルコード載せている人もいるので、この 界隈では人気なんだろうけど、とっかかりとなる情報が少ないよ うに感じます。 • なので、さわりだけでも喋ろうかなと。あまり凄いことは話し(せ) ません。私自身、ACPIの知識があやふやな個所もありますので、 やさしいマサカリ(!)も期待するところ。

Slide 4

Slide 4 text

今日お話すること 1. ACPIとは何か 2. ACPIの全体概要 3. ACPIテーブル/ACPI名前空間 4. ACPIのテーブルをたどってみよう ※この文書に現れる「ACPI規格書」という言葉は「Advanced Configuration and Power Interface Specification Version6.1」を指します。)

Slide 5

Slide 5 text

1.ACPIとは何か

Slide 6

Slide 6 text

ACPIとは何か ● ACPIとは「Advanced Configuration and Power Interface」の略 ● ACPI規格書によると、「マザーボード上のデバイスの設 定もしくはデバイス、システム全体の電力制御を、OSが 直接確実に可能にするための業界共通のI/Fを策定する」 ための規格です。

Slide 7

Slide 7 text

ACPIとは何か ACPIの役割は以下2点です。 1. 電力制御 (Power Management) 2. デバイスの設定 (Configuration) ※ただし、ACPI規格書 「1.1 Principal Goals」を見ると、ほとんどPower Management について語られており、Configurationはおまけ程度の扱い。

Slide 8

Slide 8 text

ACPIで制御の対象とするもの 「3. ACPI Overview」を参照。最初のページで列挙され ています。例えば、以下のようなものがあります。 • System power management • Processor power management • Configuration/Plug and Play • Battery management などなど…

Slide 9

Slide 9 text

2.ACPIの全体概要

Slide 10

Slide 10 text

ACPIの全体概要 (ACPI規格書 Figure 1-1 OSPM/ACPI Global Systemより抜粋) ACPIが想定するシステムの概要 は右図の通りです。 ACPIはボード独自のH/Wや BIOSを隠蔽するインタフェース であることがわかります。

Slide 11

Slide 11 text

登場人物 先に紹介したACPI全体概要図には、以下3つの単語が出てきます。 単語 概要 ACPI Registers ACPIはハードウェアレジスタインタフェースを定義している。この レジスタインタフェースは、4章に書かれた電力制御機能の主となる 制御を行うために、ACPI互換のOSが使うものである。 ACPI BIOS ACPI規格準拠のBIOS ACPI Tables OSのメモリ空間に用意された、データやメソッドを含むテーブル。 後述。 なお、今回は、ACPI Tablesを中心に説明をします。 ※ACPI Tablesの概要はACPI規格書の第5章に書かれています。

Slide 12

Slide 12 text

3.ACPIテーブル/ACPI名前空間

Slide 13

Slide 13 text

プログラミングモデル(ACPI規格書第5章) ACPI規格書によると、この章でカバーされるトピックは以下2つです。 1. The ACPI system description table architecture is defined, and the role of OEM-provided definition blocks in that architecture is discussed. 2. The concept of the ACPI Namespace is discussed. 「ACPI system description table」と「ACPI Namespace」の2つ がトピックであると述べられています。そして、この2つの要素が ACPIを使ったプログラミングに必須の要素となります。 ※以後、この文書では、ACPI system description tableを「ACPIテーブル」と記載します。また、ACPI Namespaceを「ACPI名前空間」と記載します。

Slide 14

Slide 14 text

ACPIテーブル (ACPI system description table) ACPI規格書105ページには、ACPIテーブルの簡単な説明が 書かれています。要約するとおおよそ以下2点です。 1. ACPIテーブルは、ハードの機能を制御するためのシステ ム情報、機能、メソッド、ケーパビリティを提供する。 2. ACPIテーブルは、ボード上のデバイス情報を含む。これ らデバイスには以下のものも含まれる。 ➢規格上、デバイスの存在を検知する仕組みを備えないデバイス ➢他のハードウェア規格に依存するデバイス

Slide 15

Slide 15 text

ACPIテーブルのメモリ上の構造 右図は「ACPI規格書」P105から 抜粋した図で、ACPIテーブルの とっかかりとなる部分です。 この図は、以下4点を表しています。 1. Root System Description Pointer(RSDP)から始まっている。 2. RSDPはXSDTというテーブルを指している 3. XSDTはEntryを持ち、それらは何かのテーブルを指している。 4. テーブルにはヘッダ(緑部分)があり、すべてのテーブルで同じ型です。

Slide 16

Slide 16 text

XSDT(RSDT) XSDTは、他のテーブルを指す物理アド レス(エントリ)が格納されているテー ブルです。 一方、似たようなテーブルに、RSDTが あります。 XSDT RSDT 役割 エントリは何らかのACPIテーブルを 指す物理アドレス。 エントリは何らかのACPIテーブルを指す 物理アドレス。 エントリのサイズ 8byte(64bit) 4byte(32bit) 備考 存在する場合、必ずこちらを使う。 (ACPI規格書 119ページ) 互換のために残されているテーブル

Slide 17

Slide 17 text

ACPIヘッダ(DESCRIPTION_HEADER) ACPIテーブルの先頭は必ずACPIヘッダで始まっています。特記するこ とは以下の3点です。 1. 先頭には4文字のシグネチャがあります。これを使いACPIテーブル の種別を判定します。 2. ACPI規格にないシグネチャを持つACPIテーブルは無視されます。 3. lengthはバイト単位で、ヘッダも含めたACPIテーブルのサイズを 格納します。 ※詳細は、ACPI規格書のP114~118を参照のこと。

Slide 18

Slide 18 text

主要なテーブル 右図は「ACPI規格書」P106から 抜粋したものです。 押さえたい個所は以下4点。 1. XSDTの最初のエントリは、必 ずFADPテーブル。 2. Blocksは、ACPIレジスタ空間。 3. DSDTは、特殊ブロックを持つ。 4. このブロック内のメソッドを評 価することで、デバイス固有の 制御を依頼したり、情報を取得 できる。 ※図ではシグネチャが「FACP」になっているが、これは typoでない。

Slide 19

Slide 19 text

FADT(Fixed ACPI Description Table) このテーブルはACPI規格で必ず存在する必須(vital)な情報を格納す るためのテーブル。 例えば、以下の情報を含みます。 • ACPI関連レジスタがマップされている空間のport address • DSDTを指す物理アドレス ※メンバ一覧は、ACPI規格書のP120~P128に記載されています。メンバが多いため、こ こでは上記の説明にとどめます。

Slide 20

Slide 20 text

DSDT(Differentiated System Description Table) ACPI規格書では、なぜかFADTの説明と一緒に記載されています。 システムブート時の初期化では、DSDTのアドレスをFADTから取得 し、DSDTをロードします。 DSDTのロード後、これを使ってACPI名前空間を生成します。 The FADT also has a pointer to the DSDT that contains the Differentiated Definition Block, which in turn provides variable information to an ACPI-compatible OS concerning the base system design

Slide 21

Slide 21 text

言葉の定義・・・「ロード」 「ロード」について、ACPI規格書のP140では以下のように述べられ ています。 OSPM “loads” or “unloads” an entire definition block as a logical unit. OSPM will load a definition block either as a result of executing the AML Load() or LoadTable() operator or encountering a table definition during initialization. つまり、「ある種のメソッドを実行する」か、「初期化時にテーブ ルを見つけること」と言っています。 ※具体的な実装がどちらなのかは、今回未確認です。

Slide 22

Slide 22 text

Differentiated Definition Block AMLフォーマットのデータで構成されているバイナリデー タです。FADTと異なり、「システムごとの差分の定義」 をします。 • ハードウェアの実装の詳細に関する情報を含んでいます。 • 後述するACPI名前空間の材料となります。 ※AMLとは、ASL (ACPI Source Language)で書いたコードをビルドしたバイト コード。メーカー、ファームウェアベンダーは、ASLを使ってdefinition blockを 書きます。definition blockには、ACPIメソッドやオブジェクトを記述します。 雰囲気的には、glue codeチックなものかなあ。 ACPI規格書 P140もしくは、P223~のSection 5.4 「Definition Block Encoding」 参照。

Slide 23

Slide 23 text

ACPI名前空間 ACPI名前空間とは、 OSが管理するメモリ内で全 Definition Blockを下図のような階層構造で表現したデー タ構造です。

Slide 24

Slide 24 text

ACPI名前空間 ACPI名前空間で押さえておきたいのは、以下4点です。 1. 全Definition Blockは同一の名前空間にロードされる。各オブ ジェクトの名前は一意。名前の衝突は絶対ダメ。 2. 個々の要素は「ACPIオブジェクト」といいます。 3. ACPIオブジェクトの内容はそれぞれで大きく異なりますが、ほと んどのオブジェクトは、データかメソッドのいずれかを指します。 4. ACPIオブジェクトがメソッドである場合、「評価する(evaluate)」 ことにより、メソッドを「呼び出」せます。

Slide 25

Slide 25 text

4.実装とかのトピック

Slide 26

Slide 26 text

初期化 ACPIを使うには、メモリを舐めてテーブルを見つける (BIOSから起動した場合)か、ファームウェアが渡すポイン タを用いる(UEFIから起動した場合)。このテーブルをパー スすることで、必要な情報を得ることができる。 P26 「4.5 ACPI」より抜粋

Slide 27

Slide 27 text

ACPICA(ACPI Component Architecture) とはいえ、先に書いたようなことをいちい ち書くのもかったるい。 よくあるACPIの操作について、Intelがリ リースしているライブラリ的なコード群が あります。 このオープンソース実装を「ACPICA」と 言います。

Slide 28

Slide 28 text

すまぬ • 本当はACPIテーブルをパースするコードを書いたのでデモをした かったのですが、ちょっと不幸な出来事があり、デモができなく なりました…。 • LinuxとかNetBSDのコードはあるので、一緒に読んでみません か?もくもく会なので…。

Slide 29

Slide 29 text

今回はここまで