Home
Packages
Forums
Wiki
GitLab
Security
AUR
Download
コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
目次
コミュニティに貢献
最近の出来事
おまかせ表示
特別ページ
交流
ヘルプ
貢献
最近の更新
最近の議論
新しいページ
統計
リクエスト
ArchWiki
検索
検索
表示
アカウント作成
ログイン
個人用ツール
アカウント作成
ログイン
DSDTのソースを表示
ページ
議論
日本語
閲覧
ソースを閲覧
履歴を表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
ソースを閲覧
履歴を表示
全般
リンク元
関連ページの更新状況
ページ情報
表示
サイドバーに移動
非表示
←
DSDT
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
[[Category:ブートプロセス]] [[Category:カーネル]] [[Category:電源管理]] [[en:DSDT]] {{Related articles start}} {{Related|ACPI モジュール}} {{Related|acpid}} {{Related articles end}} DSDT (Differentiated System Description Table) は [[Wikipedia:ja:Advanced Configuration and Power Interface|ACPI]] 規格の一部です。特定のシステムに対応して電源イベントに関する情報を提供します。ACPI テーブルはメーカーによってファームウェア上に用意されています。Linux で ACPI の機能が使えないというのはよくある問題です。例えば: ファンが稼働しない、フタを閉じたときに画面がオフにならない、など。これらの問題は DSDT が Windows しか考えずに作成されているのが原因で、インストール後にパッチをあてることができます。この記事では問題のある DSDT を解析・再構築して、デフォルトの DSDT をカーネルから置き換える方法を説明します。 基本的に DSDT テーブルは ACPI (電源管理) のイベントがあると実行されるコードです。 {{Note|[https://01.org/linux-acpi Linux ACPI] プロジェクトの目標はファームウェアに修正を加えなくても Linux が動作できるようにすることです。新しいカーネルでも DSDT の修正が必要なときは[[バグ報告ガイドライン|バグレポートを送信]]してください。}} ==はじめに== * ACPI 関連の問題はハードウェアメーカーによってリリースされたファームウェアのアップデートで修正される場合があります。無駄な努力をしなくてもいいように、まずはアップデートされたファームウェアをインストールすることが推奨されます。 * あなたの環境の基幹的なコードを操作することになります。変更を加えるときは万全を期すべきです。また、あらかじめ[[ディスクのクローン|ディスクを複製]]したほうが良いでしょう。 * DSDT に修正をかける前に、以下のショートカットを試すことができます: ===カーネルから Windows のバージョンを報告する=== カーネルパラメータの '''acpi_os_name''' 変数を使ってください。例: acpi_os_name="Microsoft Windows NT" もしくは: acpi_osi="!Windows2012" 上記の設定を GRUB の kernel 行に追加してください。 他にテストできる文字列: * "Microsoft Windows XP" * "Microsoft Windows 2000" * "Microsoft Windows 2000.1" * "Microsoft Windows ME: Millennium Edition" * "Windows 2001" * "Windows 2006" * "Windows 2009" * "Windows 2012" * 上記の全てで駄目なら、"Linux" も試してください。 下の手順で DSDT を展開して .dsl ファイルを検索して、"Windows" を grep して何が表示されるか確認することもできます。 ===修正済みの DSDT を検索する=== DSDT ファイルは本来 ACPI Source Language で書かれています (.asl/.dsl ファイル)。コンパイラを使うことで 'ACPI Machine Language' ファイル (.aml) やヘックステーブル (.hex) が生成できます。ファイルを Arch に組み入れるには、コンパイル済みの .aml ファイルを手に入れる必要があります。自分でコンパイルするか、あるいはインターネット上の誰かを自己責任で信頼するかです。インターネットからファイルをダウンロードした場合、大抵は圧縮済みの .asl ファイルになっています。ファイルを unzip してコンパイルしてください。インターネットからダウンロードすることの利点はコードの修正について自分で調べなくてもよいということです。 Arch ユーザーで同じノートパソコンを使っているというのは少数派のうちの少数派になります。同じ機種について情報がないか他のディストリや Linux のフォーラムも検索してみてください。技術に精通した人が大勢居るところなら同じ問題が見つかって、誰かが作った DSDT が発見できる、あるいはコンパイル済みのバージョンがあるかもしれません (自己責任で使ってください)。検索エンジンが最良のツールです。検索キーワードは短くしましょう: '機種名' + 'dsdt' で結果が得られるはずです。 == 自分で再コンパイルする == この取り組みにおける最良のリソースは、[https://uefi.org/acpi/specs ACPI Spec ホームページ] および [https://01.org/linux-acpi Linux ACPI プロジェクト] になります。これは、''acpi.sourceforge.net'' で発生したアクティビティに優先します。 簡単に言うと、Intel の ASL コンパイラーを使用して、システムの DSDT テーブルをソースコードに変換し、エラーを特定して修正し、再コンパイルすることです。 コードを変更するには、{{Pkg|acpica}} をインストールする必要があります。 システムの DSDT が Intel と Microsoft のコンパイラ'''どちらを使ってコンパイルされたのか確認してください''': {{hc|# dmesg {{!}} grep DSDT| ACPI: DSDT 00000000bf7e5000 0A35F (v02 Intel CALPELLA 06040000 INTL 20060912) ACPI: EC: Look up EC in DSDT }} Microsoft のコンパイラが使われている場合、INTL という省略形が MSFT になります。DSDT を逆コンパイル・再コンパイルするときにエラーが発生したら、Google で検索したり ACPI の仕様にあたって修正してください。使用しているコンパイラのバージョンが違うためにエラーが起こる場合、起動時に ACPICA が対処することがあります。カーネルの ACPICA コンポーネントは DSDT をコンパイルするときに発生する些細なエラーに大抵は対処してくれます。システムがちゃんと動作しているのであれば、コンパイルエラーにあまり悩む必要はありません。 バイナリ ACPI テーブルを抽出します: {{bc|# cat /sys/firmware/acpi/tables/DSDT > dsdt.dat}} ACPI テーブルを ''.dsl'' ファイルに逆アセンブルします: {{bc|$ iasl -d dsdt.dat}} ''.dsl'' ファイルから 16 進 AML テーブル (C 言語) を作成してみます: {{bc|$ iasl -tc dsdt.dsl}} 16 進 AML テーブルの作成時に出力されたエラーを調べて修正します。例えば: {{bc| dsdt.dsl 6727: Name (_PLD, Buffer (0x10) Error 4105 - Invalid object type for reserved name ^ (found BUFFER, requires Package) }} エラーが発生したファイルの行 6727 を修正します: {{bc| (_PLD, '''Package(1) {'''Buffer (0x10) { ... }'''}''') }} OEM バージョンを上げます。そうしないと、カーネルは変更された ACPI テーブルを適用しません。たとえば、OEM バージョンを増やす前に、次のようにします: {{bc|DefinitionBlock ("DSDT.aml", "DSDT", 2, "INTEL ", "TEMPLATE", 0x00000000)}} OEM バージョンを上げた後: {{bc|DefinitionBlock ("DSDT.aml", "DSDT", 2, "INTEL ", "TEMPLATE", 0x0000000'''1''')}} すべてのエラーを修正し、OEM バージョンを上げた後、16 進 AML テーブルを再度作成します: {{bc|$ iasl -tc dsdt.dsl}} C インクルードファイルをカーネルソースに挿入するためのオプション {{ic|-ic}} を試してみるとよいでしょう。エラーや警告が発生しなければ、問題なく実行できます。 == 修正済みのコードを使う == {{Warning|BIOS をアップデートしたら DSDT を再度修正する必要があります。}} カスタム DSDT を使う方法は2つあります: * ブートローダーによってロードされる CPIO アーカイブを作成する * カーネルに組み入れてコンパイルする === mkinitcpio の acpi_override フックを使用する === [[mkinitcpio]] は {{ic|acpi_override}} フックを提供しており、これは {{ic|/usr/initcpio/acpi_override/}} および {{ic|/etc/initcpio/acpi_override/}} にあるすべての ''.aml'' ファイルを取得し、それらを早期に解凍された CPIO アーカイブとして {{ic|/kernel/firmware/acpi/}} 内に配置します。これにより、別途 CPIO アーカイブを手動で作成したり、ブートローダーの設定を変更したりする必要がなくなります。''mkinitcpio'' が非圧縮 CPIO アーカイブをメインの initramfs イメージと一緒に1つのファイルにパッキングするからです。 まず、{{ic|/etc/initcpio/acpi_override}} ディレクトリを作成し、必要な ''.aml'' ファイルをすべてそこにコピーします。例: # mkdir /etc/initcpio/acpi_override # cp dsdt.aml /etc/initcpio/acpi_override/ 次に、{{ic|/etc/mkinitcpio.conf}} の {{ic|HOOKS}} 配列に {{ic|acpi_override}} を追加します: {{hc|/etc/mkinitcpio.conf|2= HOOKS=(... '''acpi_override''') }} 最後に、[[Initramfs を再生成]] し、再起動します。 === CPIO アーカイブを使う === この方法ではカーネルを再コンパイルする必要がなく、カーネルをアップデートしても再度修正を行う必要がありません。 以下のカーネルコンフィグを有効にしてください (標準の {{pkg|linux}} パッケージではデフォルトで有効です): * {{ic|1=ACPI_TABLE_UPGRADE=y}} (Linux カーネル 4.6 以上) * {{ic|1=CONFIG_ACPI_INITRD_TABLE_OVERRIDE=y}} (Linux カーネル 4.5 以下) 詳しくは [https://www.kernel.org/doc/Documentation/acpi/initrd_table_override.txt] を見てください。 まず、以下のフォルダを作成: $ mkdir -p kernel/firmware/acpi 修正した ACPI テーブルを作成した {{ic|kernel/firmware/acpi}} フォルダにコピー。例: $ cp dsdt.aml ssdt1.aml kernel/firmware/acpi 新しく作成した {{ic|kernel/}} フォルダの中で、以下のコマンドを実行: $ find kernel | cpio -H newc --create > acpi_override 上記のコマンドで修正済みの ACPI テーブルを含む CPIO アーカイブが作成されます。アーカイブを {{ic|boot}} ディレクトリにコピーしてください: # cp acpi_override /boot 最後に、[[ブートローダー]]を設定して CPIO アーカイブをロードします。例えば [[Systemd-boot]] を使用している場合、{{ic|/boot/loader/entries/arch.conf}} は以下のようになります: title Arch Linux linux /vmlinuz-linux initrd /acpi_override initrd /initramfs-linux.img options root=PARTUUID=ec9d5998-a9db-4bd8-8ea0-35a45df04701 resume=PARTUUID=58d0aa86-d39b-4fe1-81cf-45e7add275a0 ... 設定後は再起動を行ってから[[#上書きされたことを確認|結果を確認]]してください。 === カーネルにコンパイル === [[カーネル|カスタムカーネルをコンパイル]]する方法をよく読んでください。一番簡単なのは"伝統的な"方法です。DSDT をコンパイルした後、iasl は2つのファイルを生成します: {{ic|dsdt.hex}} と {{ic|dsdt.aml}}。 '''{{ic|menuconfig}} を使う:''' * "Device Drivers -> Generic Driver Options" の "Select only drivers that don't need compile-time external firmware" を無効化してください。 * "Power management and ACPI options -> ACPI (Advanced Configuration and Power Interface) Support" にある "Include Custom DSDT" を有効化して、修正済みの DSDT ファイル ({{ic|dsdt.aml}} ではなく {{ic|dsdt.hex}}) の絶対パスを指定してください。 === GRUB での AML の使用 === [[GRUB]] を使用すると、さらに簡単な方法を使用できます。上記で作成した ''.aml'' ファイルをブート パーティションにコピーします: # cp dsdt_patch.aml /boot 次に、GRUB 設定に次の行を追加します: acpi /dsdt_patch.aml たとえば、これを {{ic|1=/etc/grub.d/40_custom}} に追加します。後で GRUB 設定を生成することを忘れないでください。 === dracut で AML を使用する === [[Dracut]] を使用している場合、上記で作成した ''.aml'' ファイルを定義された場所にコピーするだけで済みます。対応する設定ファイル {{ic|/etc/dracut.conf.d/acpi-fix.conf}} を作成する必要があります: acpi_override="yes" acpi_table_dir="/usr/local/lib/firmware/acpi" == オーバーライドが成功したか確認する == オーバーライドが成功したことを確認するメッセージを探します。例えば次のようなものです: {{hc|# dmesg {{!}} grep ACPI| [ 0.000000] ACPI: Override [DSDT- A M I], this is unsafe: tainting kernel [ 0.000000] ACPI: DSDT 00000000be9b1190 Logical table override, new table: ffffffff81865af0 [ 0.000000] ACPI: DSDT ffffffff81865af0 0BBA3 (v02 ALASKA A M I 000000F3 INTL 20130517) }} == 参照 == * [https://www.kernel.org/doc/Documentation/acpi/initrd_table_override.txt Upgrading ACPI tables via initrd] * [https://docs.microsoft.com/en-us/windows-hardware/drivers/acpi/winacpi-osi How to Identify the Windows Version in ACPI by Using _OSI] * [https://man.archlinux.org/man/dracut.conf.5 How to override ACPI tables with dracut] {{TranslationStatus|DSDT|2024-09-07|815413}}
このページで使用されているテンプレート:
テンプレート:Bc
(
ソースを閲覧
)
テンプレート:Hc
(
ソースを閲覧
)
テンプレート:Ic
(
ソースを閲覧
)
テンプレート:META Related articles start
(
ソースを閲覧
)
テンプレート:Note
(
ソースを閲覧
)
テンプレート:Pkg
(
ソースを閲覧
)
テンプレート:Related
(
ソースを閲覧
)
テンプレート:Related articles end
(
ソースを閲覧
)
テンプレート:Related articles start
(
ソースを閲覧
)
テンプレート:TranslationStatus
(
ソースを閲覧
)
テンプレート:Warning
(
ソースを閲覧
)
DSDT
に戻る。
検索
検索
DSDTのソースを表示
話題を追加