ACPI(4) | FreeBSD Kernel Interfaces Manual | ACPI(4) |
名称
acpi — 高度な設定と電源管理サポート書式
device acpi
options ACPI_DEBUG
options DDB
解説
acpi ドライバは、Intel/Microsoft/Compaq/Toshiba ACPI 規格のサポートを行います。このサポートは、電源管理 (APM に取って代わる) と他の機能と同様に、 (PnP と PCI BIOS に取って代わる) プラットフォームハードウェア発見を含んでいます ACPI コアサポートは、Intel の ACPI CA 参照実装によって提供されます。acpi ドライバは、 loader(8) によって自動的にロードされ、 ACPI が強制的であるプラットフォームでは、カーネル中に組み込まれるべきでないことに注意してください。
SYSCTL 変数
acpi ドライバは、ユーザの介入なしで電源管理を提供することを目的としています。デフォルト設定が最適でないなら、 acpi の振る舞いを変更するか、またはモニタするために、次の sysctl を使用することができます。- debug.acpi.enable_debug_objects
- options ACPI_DEBUG なしで Debug オブジェクトのダンプを有効にします。デフォルトは、0 で、Debug オブジェクトを無視します。
- hw.acpi.acline
- AC (交流) 配線状態 (1 は、オンラインを意味し、0 は、バッテリ電源を意味します)。
- hw.acpi.cpu.cx_usage
- それぞれのスリープ状態の総使用のパーセントをリストするデバッグ情報です。 hw.acpi.cpu.cx_lowest が変更されるとき、値は、リセットされます。
- hw.acpi.cpu.cx_lowest
-
CPU のアイドリングのために使用する最も低い Cx 状態です。スケジューリングアルゴリズムは、システムロード指示のように
C1
とこの設定の間の状態を選択します。 ACPI CPU アイドリング制御を有効にするためには、 machdep.idle_available でリストされるなら、 machdep.idle は、acpi
に設定されるべきです。 - hw.acpi.cpu.cx_supported
-
サポートされた CPU のアイドル状態とマイクロ秒単位の遷移レイテンシ (待ち時間) のリストです。各状態には、タイプ (例えば、
C2
) があります。C1
は、ia32HLT
命令と同等であり、C2
は、同じセマンティクスでより深いスリープを提供し、C3
は、最も深いスリープを提供しますが、さらに、無効にされるバスマスタを必要とします。C3
より大きい状態は、C3
状態と同じセマンティクスでさらなる省電力を提供します。より深いスリープは、割り込みが発生するとき、より多い省電力を提供しますが、遷移レイテンシが増加します。 - hw.acpi.disable_on_reboot
- リブートプロセスの間 ACPI を無効にします。ほとんどのシステムは、ACPI がまだ有効にされている状態で見事にリブートしますが、あるものは、最初にレガシ (古い) モードを出ることを必要とします。デフォルトは、0 で、ACPI を有効にした状態から抜けます。
- hw.acpi.handle_reboot
- システムをリブートする ACPI Reset Register 機能を使用します。いくつかの新しいシステムは、このレジスタの使用を必要としますが、あるものは、レガシリブートをサポートしている状態で動作しているだけです。
- hw.acpi.lid_switch_state
-
ふたのスイッチ (すなわち、ノートブックのスクリーン) が閉じられるときに入るために、状態 (
S1
–S5
) をサスペンドします。デフォルトは、“NONE
” (何もしない) です。 - hw.acpi.power_button_state
-
電源ボタンが押されるときに入るために、状態 (
S1
–S5
) をサスペンドします。デフォルトは、S5
(うまく電源オフ) です。 - hw.acpi.reset_video
- レジュームパスの間にリアルモードからビデオアダプタをリセットします。いくつかのシステムは、この助けを必要として、他のものは、それが有効にされるなら、ディスプレイの問題があります。デフォルトは、0 (無効) です。
- hw.acpi.s4bios
-
システムが
S4BIOS
をサポートするかどうかを示します。これは、BIOS がシステムをディスクにサスペンドするすべての機能を取り扱うことができることを意味します。そうでなければ、OS は、ディスク (S4OS
) へのサスペンドに対して責任があります。ほとんどの現在のシステムは、S4BIOS
をサポートしません。 - hw.acpi.sleep_button_state
-
スリープボタンが押されるときに入るために、状態 (
S1
–S5
) をサスペンドします。通常、これは、キーボード上の特有のファンクションボタンです。デフォルトは、S3
(RAM にサッスペンドする) です。 - hw.acpi.sleep_delay
- システムをサスペンドする準備と実際にサスペンド状態に入ることの間にこの数の秒数をウェート (待つ) します。デフォルトは、1 秒です。
- hw.acpi.supported_sleep_state
-
BIOS によってサポートされた状態 (
S1
–S5
) をサスペンドします。-
S1
- RAM にクィックサスペンドします。 CPU は、低電源状態に入りますが、ほとんどの周辺機器は、実行したままです。
-
S2
-
S1
よりも低電源状態ですが、同じ基本的な特性があります。多くのシステムで、サポートされていません。 -
S3
- RAM にサスペンドします。ほとんどのデバイスは、電源がオフされ、システムは、メモリリフレッシュを除いて、実行を停止します。
-
S4
-
ディスクにサスペンドします。すべてのデバイスは、電源オフされ、システムは、実行を停止します。再開するとき、システムは、まるでコールド (冷たい) 電源オンからのように開始します。
S4BIOS
が利用可能でないなら、 FreeBSD によってまだサポートされていません。 -
S5
- システムは、手際良くシャットダウンして、電源をオフします。
-
- hw.acpi.verbose
- 様々な ACPI サブシステムから冗長な印刷 (表示) を有効にします。
調整変数
調整変数は、カーネルをブートする前に loader(8) プロンプトで設定するか、または /boot/loader.conf に格納して設定することができます。また、これらの調整変数の多くには、ブートの後のアクセスのための適合する sysctl(8) エントリがあります。- acpi_dsdt_load
- カスタム ACPI DSDT のロードを有効にします。
- acpi_dsdt_name
- ローディングが有効であるなら、ロードする DSDT テーブルの名前です。
- debug.acpi.cpu_unordered
- ACPI プロセッサオブジェクトと CPU に一致する MADT を使用しません。これは、一貫性のあるプロセッサ ID を使用しないバグの多い BIOS があるわずかなシステムで必要です。デフォルトは、0 (無効) です。
- debug.acpi.disabled
- デバッグ目的の ACPI の一部を選択的に無効にします。
- debug.acpi.interpreter_slack
- 厳密さが少ない ACPI 実装を有効にします。デフォルトは、1 で、一般的な BIOS の誤りを無視します。
- debug.acpi.max_threads
- ブート時に開始されるタスクスレッドの数を指定します。これを 1 に制限することは、パラレル要求を扱うことができない様々な BIOS の周りの動作に役立つかもしれません。デフォルト値は、3 です。
- debug.acpi.quirks
- あらゆる自動的な特異行動を完全に上書きします。
- debug.acpi.resume_beep
- レジュームで PC スピーカを鳴らします。これは、サスペンド/レジュームの問題の診断を手助けできます。デフォルトは、0 (無効) です。
- hint.acpi.0.disabled
- ACPI のすべてを無効にするためには、これに 1 を設定します。使用している BIOS がブラックリストに登録されているために ACPI が利用者のシステムで無効にされたなら、テストのために ACPI を再有効にするように 0 に設定することができます。
- hw.acpi.ec.poll_timeout
-
EC の応答を待つ、ミリ秒単位のディレイです。エラー“
AE_NO_HARDWARE_RESPONSE
”を得るなら、この数を増加させてみてください。 - hw.acpi.host_mem_start
- PCI ホストブリッジへの仮定されたメモリ開始アドレスを上書きします。
- hw.acpi.install_interface, hw.acpi.remove_interface
-
‘
_OSI
’問い合わせメソッドの返り値を制御するために、(複数の) OS インタフェースをインストールするか、または削除します。 OS インタフェースが hw.acpi.install_interface で指定されるとき、_OSI
は、それが サポートされる インタフェースのリターンについて問い合わせます。逆に、OS インタフェースが hw.acpi.remove_interface で指定されるとき、_OSI
は、それが サポートされない リターンについて問い合わせます。コンマで区切られたリストで複数のインタフェースを指定することができ、任意の先導する空白類は、無視されます。例えば、“FreeBSD, Linux
”は、2 つのインタフェース“FreeBSD
”と“Linux
”の有効なリストです。 - hw.acpi.reset_video
- レジュームパスで VESA リセット BIOS ベクトルの呼び出しを有効にします。これは、レジュームの後の LCD ホワイトアウトのような問題を持っているいくつかのグラフィックカードの問題を解決することができます。デフォルトは、0 (無効) です。
- hw.acpi.serialize_methods
-
メソッドがパラレルで実行されてもそうでなくても上書きすることを許します。本当にパラレルメソッド実行を操作できない AML のための“
AE_ALREADY_EXISTS
”エラーを修正する、連続している振る舞いによってこれを有効にします。これがリカーシブメソッドを中断するので、それは、デフォルトでオフです、そして、いくつかの IBM がそのようなコードを使用します。 - hw.acpi.verbose
- ACPI が行っていることに関する冗長なデバッグ情報をオンにします。
- hw.pci.link.%s.%d.irq
- このリンクとインデックスに使用する割り込みを上書きします。デバイスが acpi が有効にされている状態で動作していない場合にだけ、この機能は、慎重に使用されるべきです。“%s”は、リンクの名前です (例えば、 LNKA)。“%d”は、リンクが複数の IRQ をサポートするとき、リソースインデックスです。ほとんどの PCI リンクには、1 つの IRQ リソースしかないので、次の形式が使用されるべきです。
- hw.pci.link.%s.irq
- 使用する割り込みを上書きします。デバイスが acpi が有効にされている状態で動作していない場合にだけ、この機能は、慎重に使用されるべきです。“%s”は、リンクの名前です (例えば、LNKA)。
ACPI を無効にする
ACPI は、大変違う異なったプラットフォームでサポートされるので、多くのデバッグと利用可能な調整オプションがあります。acpi が有効にされている状態で働かないのが知られているマシンの、 BIOS のブラックリストがあります。現在、ブラックリストは、 acpi を無効にすべきかどうかだけを制御するだけです。将来、機能を制御する多くの精度があるようになるでしょう (それのための基盤は、既にあります)。
ブラックリストにあるマシンで (デバッグ目的などのために) acpi を有効にするためには、カーネル環境変数 hint.acpi.0.disabled に 0 を設定します。これを試みる前に、BIOS を ACPI と互換性があるより最近のバージョンにアップデートすることを検討してください。
acpi ドライバを完全に無効にするためには、カーネル環境変数 hint.acpi.0.disabled に 1 を設定してください。
いくつかの i386 マシンは、全体的にいくつかの操作が失敗するか、すべての ACPI が無効となっています。他の i386 マシンは、ACPI が有効にされている状態で失敗します。非 i386 プラットフォーム (すなわち、ACPI サポートが強制的であるプラットフォーム) の ACPI のすべてか一部を無効にすると、システムが機能しなくなる結果となるかもしれません。
acpi ドライバは、問題の場合に選択的に無効にされるかもしれない、 1 組のドライバより成ります。サブドライバを無効にするには、カーネル環境変数 debug.acpi.disabled でそれをリストアップします。複数のエントリは、空白で区切られたリストにすることができます。
無効にすることができる ACPI サブデバイスと機能は、次の通りです:
-
all
- すべての ACPI の機能とデバイスを無効にします。
-
acad
- ( デバイス) AC アダプタをサポートします。
-
bus
- ( 機能) サブデバイスをプローブしてアタッチします。無効にすれば、全体の ACPI 名前空間をスキャンするのを避けます。
-
children
-
(
機能) 標準の ACPI サブドライバと ACPI 名前空間に列挙されたデバイスをアタッチします。これを無効にすることは、ACPI 名前空間がまだスキャンされることを除いて、“
bus
”を無効にする影響と同様です。 -
button
- ( デバイス) ACPI のボタンデバイス (通常電源とスリープボタン) をサポートします。
-
cmbat
- ( デバイス) バッテリデバイスの制御メソッドです。
-
cpu
- ( デバイス) CPU の省電力と速度設定機能をサポートします。
-
ec
- ( デバイス) 組み込みプラットフォームコントローラで通信するために使われる ACPI 組み込み制御インタフェースをサポートします。
-
isa
- ( デバイス) 通常、PCI バスの子供となる、ACPI 名前空間で定義された ISA バスブリッジをサポートします。
-
lid
- ( デバイス) 通常システムをスリープ状態とする、 ACPI ラップトップのふたのスイッチをサポートします。
-
quirks
- ( 機能) クワーク (特異な行動) に敬意をはらいません。クワークは、XSDT テーブルの OEM ベンダ名とリビジョン日付に基づいて ACPI 機能を自動的に無効にします。
-
pci
- ( デバイス) ホストから PCI ブリッジをサポートします。
-
pci_link
- ( 機能) PCI 割り込みルーティングを実行します。
-
sysresource
- ( デバイス) ACPI が要求するリソースを含む疑似デバイス。
-
thermal
- ( デバイス) システム冷却と熱管理をサポートします。
-
timer
- ( デバイス) ACPI 固定周波数タイマを使用するタイムカウンタを実装します。
-
video
- ( デバイス) agp(4) デバイスと衝突するかもしれない acpi_video(4) をサポートします。
また、カーネル環境変数 debug.acpi.avoid で避けられる領域のルートのフルパスをリストすることによって、問題を起こすかもしれない ACPI 名前空間の部分を避けることが可能です、子供のオブジェクトとすべては、名前空間のバス/子供スキャンの間に、無視されます。 ACPI CA コードは、避けられた領域に関してまだ知っています。
デバッグ出力
デバッグ出力を有効にするためには、 acpi は、 options ACPI_DEBUG でコンパイルされなければなりません。デバッグ出力は、レイヤとレベルを区別します。ここで、レイヤは、ACPI サブシステムの構成要素であり、レベルは、デバッグ出力の特定の種類です。レイヤとレベルの両方は、レイヤは、 debug.acpi.layer にレベルは、 debug.acpi.level でリストされる、空白類で切り離されたトークンのリストとして指定されます、
最初のレイヤのセットは、ACPI-CA コンポーネントのためのもので、2 番目は、 FreeBSD ドライバのためのものです。 ACPI-CA レイヤは、それらが参照するファイルの接頭辞を含んで記述されています。サポートされるレイヤは、次の通りです:
-
ACPI_UTILITIES
- ユーティリティ関数 ("ut")
-
ACPI_HARDWARE
- ハードウェアアクセス ("hw")
-
ACPI_EVENTS
- イベントと GPE ("ev")
-
ACPI_TABLES
- テーブルアクセス ("tb")
-
ACPI_NAMESPACE
- 名前空間評価 ("ns")
-
ACPI_PARSER
- AML パーサ (構文解析) ("ps")
-
ACPI_DISPATCHER
- インタプリタ状態の内部表現 ("ds")
-
ACPI_EXECUTER
- AML メソッドを実行する ("ex")
-
ACPI_RESOURCES
- リソース構文解析 ("rs")
-
ACPI_CA_DEBUGGER
- デバッガの実装 ("db", "dm")
-
ACPI_OS_SERVICES
- ユーザモードサポートルーチン ("os")
-
ACPI_CA_DISASSEMBLER
- 逆アセンブラの実装 (未使用)
-
ACPI_ALL_COMPONENTS
- すべての上記の ACPI-CA コンポーネント
-
ACPI_AC_ADAPTER
- AC アダプタドライバ
-
ACPI_BATTERY
- コントロールメソッドバッテリドライバ
-
ACPI_BUS
- ACPI, ISA と PCI バスドライバ
-
ACPI_BUTTON
- 電源とスリープボタンドライバ
-
ACPI_EC
- 組み込みコントローラドライバ
-
ACPI_FAN
- ファンドライバ
-
ACPI_OEM
- ホットキー、LED などのためのプラットフォーム特有のドライバ
-
ACPI_POWER
- 電源リソースドライバ
-
ACPI_PROCESSOR
- CPU ドライバ
-
ACPI_THERMAL
- 温度ゾーンドライバ
-
ACPI_TIMER
- タイマドライバ
-
ACPI_ALL_DRIVERS
- すべての上記の FreeBSD ACPI ドライバ
サポートされるレベルは、次の通りです:
-
ACPI_LV_INIT
- 初期化進行状況
-
ACPI_LV_DEBUG_OBJECT
- オブジェクトへの格納
-
ACPI_LV_INFO
- 一般的情報と進行状況
-
ACPI_LV_REPAIR
- あらかじめ定義された方法で共通の問題を修理します
-
ACPI_LV_ALL_EXCEPTIONS
- すべての前記のレベル
-
ACPI_LV_PARSE
-
ACPI_LV_DISPATCH
-
ACPI_LV_EXEC
-
ACPI_LV_NAMES
-
ACPI_LV_OPREGION
-
ACPI_LV_BFIELD
-
ACPI_LV_TABLES
-
ACPI_LV_VALUES
-
ACPI_LV_OBJECTS
-
ACPI_LV_RESOURCES
-
ACPI_LV_USER_REQUESTS
-
ACPI_LV_PACKAGE
-
ACPI_LV_VERBOSITY1
- すべての前記のレベル
-
ACPI_LV_ALLOCATIONS
-
ACPI_LV_FUNCTIONS
-
ACPI_LV_OPTIMIZATIONS
-
ACPI_LV_VERBOSITY2
- すべての前記のレベル
-
ACPI_LV_ALL
-
“
ACPI_LV_VERBOSITY2
”と同義語 -
ACPI_LV_MUTEX
-
ACPI_LV_THREADS
-
ACPI_LV_IO
-
ACPI_LV_INTERRUPTS
-
ACPI_LV_VERBOSITY3
- すべての前記のレベル
-
ACPI_LV_AML_DISASSEMBLE
-
ACPI_LV_VERBOSE_INFO
-
ACPI_LV_FULL_TABLES
-
ACPI_LV_EVENTS
-
ACPI_LV_VERBOSE
-
すべての“
ACPI_LV_VERBOSITY3
”後のレベル -
ACPI_LV_INIT_NAMES
-
ACPI_LV_LOAD
適切なレイヤとレベル値の選択は、大量のデバッグ出力を避けるために重要です。例えば、次の設定は、初期の情報を集める良い方法です。 ACPI-CA とエラー、警告と進捗状況に関する基本情報を印刷 (表示) する、 acpi ドライバの両方のためのデバッグ出力を有効にします。
debug.acpi.layer="ACPI_ALL_COMPONENTS ACPI_ALL_DRIVERS" debug.acpi.level="ACPI_LV_ALL_EXCEPTIONS"
ACPI CA サブシステムによるデバッグ出力は、小文字でモジュール名が前に付けられ、ソース行番号が続きます。 FreeBSD のローカルコードからの出力は、同じ形式で続きますが、モジュール名は、大文字にされます。
利用者の BIOS のバイトコードを上書きする
ACPI は、ブート時にメモリイメージとして BIOS ベンダによって提供された AML (ACPI Machine Language (マシン言語)) というバイトコードを解釈します。時々、AML コードは、マイクロソフト実装によって解析されるときに現れないバグを含んでいます。 FreeBSD は、そのような問題の回避方法、またはデバッグするために利用者自身の AML コードを上書きする方法を提供します。利用者の DSDT と任意の SSDT テーブルのすべての AML も上書きされることに注意してください。利用者 AML コードをロードするためには、 /boot/loader.conf を編集して、次の行を入れなければなりません。
acpi_dsdt_load="YES" acpi_dsdt_name="/boot/acpi_dsdt.aml" # この名前は変更できます。
利用者の AML コードを準備するためには、 acpidump(8) と iasl(8) ユーティリティ、および何らかの ACPI 知識を必要とします。
互換性
ACPI は、i386/ia32、ia64 と amd64 で見つけられ、サポートされます。関連項目
kenv(1), acpi_thermal(4), device.hints(5), loader.conf(5), acpiconf(8), acpidump(8), config(8), iasl(8) Compaq Computer Corporation, Intel Corporation, Microsoft Corporation, Phoenix Technologies Ltd., and Toshiba Corporation, Advanced Configuration and Power Interface Specification, http://acpi.info/spec.htm, August 25, 2003.作者
ACPI CA サブシステムは、Intel Architecture Labs によって開発されて保守されています。次の人々は、 FreeBSD の ACPI サブシステムに顕著な貢献を行いました: , <takawata@jp.FreeBSD.org>, <iwasaki@jp.FreeBSD.org>, , , ACPI-jp メーリングリスト<acpi-jp@jp.FreeBSD.org>と、多くの他の貢献者。
このマニュアルページは、
<msmith@FreeBSD.org>によって書かれました。バグ
多くの BIOS バージョンには、システムの不安定性、サスペンド/レジュームの中断、またはデバイスが IRQ 経路制御 (ルーティング) 問題のための適切に動作することから防ぐことを引き起こすかもしれない重大なバグがあります。 acpi の問題が決定的になる前に利用者の BIOS をベンダから利用可能な最新版にアップグレードしてください。 acpi の CPU のアイドル電源管理ドライブは、ローカル APIC (LAPIC) タイマと衝突します。 hint.apic.0.clock=0 でローカル APIC タイマを無効にするか、またはローカル APIC タイマが有効にされているなら、 C3
とより深い状態を使用しないでください。
August 16, 2012 | FreeBSD |