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' で結果が得られるはずです。 == 自分で再コンパイルする == 再コンパイルするときは [http://www.acpi.info ACPI Spec ホームページ] や [https://01.org/linux-acpi Linux ACPI Project] にある資料が役に立ちます。簡単に説明すると、Intel の ASL コンパイラを使うことでシステムの DSDT テーブルをソースコードに変換できるので、エラーがないか調査・修正してから再コンパイルします。コードを修正するには {{Pkg|acpica}} を[[インストール]]する必要があります。また、インストールするには[[カーネル#コンパイル|カーネルのコンパイル]]が必要です。 システムの DSDT が Intel と Microsoft のコンパイラどちらを使ってコンパイルされたのか確認してください: {{hc|<nowiki>$ dmesg|grep DSDT</nowiki>| 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 テーブルを (root で) 展開: {{ic|# cat /sys/firmware/acpi/tables/DSDT > dsdt.dat}}。 * 逆コンパイル: {{ic|iasl -d dsdt.dat}}。 * 再コンパイル: {{ic|iasl -tc dsdt.dsl}}。 * エラーを確認して: dsdt.dsl 6727: Name (_PLD, Buffer (0x10) Error 4105 - Invalid object type for reserved name ^ (found BUFFER, requires Package) *修正: {{hc|$ nano +6727 dsdt.dsl|(_PLD, Package(1) {Buffer (0x10)...}} * OEM バージョンを増やしてカーネルが修正した ACPI テーブルを認識するようにする。修正前: {{bc|DefinitionBlock ("DSDT.aml", "DSDT", 2, "INTEL ", "TEMPLATE", 0x00000000)}} 修正後: {{bc|DefinitionBlock ("DSDT.aml", "DSDT", 2, "INTEL ", "TEMPLATE", 0x00000001)}} * 修正したコードをコンパイル: {{ic|iasl -tc dsdt.dsl}} (-ic オプションを使うことで C のインクルードファイルをカーネルのソースに挿入できます)。 エラーや警告が表示されなければ完了です。 == 修正済みのコードを使う == {{Warning|BIOS をアップデートしたら DSDT を再度修正する必要があります。}} カスタム DSDT を使う方法は3つあります: * ブートローダーによってロードされる CPIO アーカイブを作成する * カーネルに組み入れてコンパイルする * 起動時にロードする (サポートされていません) === 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}}) の絶対パスを指定してください。 === 起動時にロード === {{Warning|DSDT フックは削除されたため、mkinitcpio を使う方法はもはやサポートされていません。[https://bugs.archlinux.org/task/27906] を参照。}} Arch の標準カーネルはカスタム DSDT の使用をサポートしているため、まずは iasl でコンパイルした ''.aml'' ファイルを {{ic|/boot/dsdt.aml}} にコピーしてください。 ブートローダーで DSDT を置き換えるため、カスタム DSDT テーブルをブートローダーのイメージに組み込む必要があります。以下を {{ic|/etc/grub.d/01_acpi}} にコピー ({{ic|GRUB_CUSTOM_ACPI}} は使用する .aml ファイルのパスに置き換えてください): #!/bin/sh set -e # Uncomment to load custom ACPI table GRUB_CUSTOM_ACPI="/boot/dsdt.aml" # DON'T MODIFY ANYTHING BELOW THIS LINE! prefix=/usr exec_prefix=${prefix} libdir=${exec_prefix}/lib . /usr/share/grub/grub-mkconfig_lib #. ${libdir}/grub/grub-mkconfig_lib # Load custom ACPI table if [ x${GRUB_CUSTOM_ACPI} != x ] && [ -f ${GRUB_CUSTOM_ACPI} ] \ && is_path_readable_by_grub ${GRUB_CUSTOM_ACPI}; then echo "Found custom ACPI table: ${GRUB_CUSTOM_ACPI}" >&2 prepare_grub_to_access_device `${grub_probe} --target=device ${GRUB_CUSTOM_ACPI}` | sed -e "s/^/ /" cat << EOF acpi (\$root)`make_system_path_relative_to_its_root ${GRUB_CUSTOM_ACPI}` EOF fi ファイルに実行可能権限を付与してください、そうしないと ''grub-mkconfig'' によって無視されます: # chmod +x /etc/grub.d/01_acpi これで GRUB は DSDT を core.img に組み込みます。 次に新しいブートイメージが必要です。GRUB を使っている場合、以下を実行: # grub-mkconfig -o /boot/grub/grub.cfg 最後に、initrd を再作成してください: # mkinitcpio -p linux 再起動すれば変更が適用されます。 新しい DSDT が使われているかどうか確認するには {{ic|# cat /sys/firmware/acpi/tables/DSDT > dsdt.dat}} でテーブルを読み込んで {{ic|iasl -d dsdt.dat}} で逆コンパイルしてください。 === 上書きされたことを確認 === * {{ic|<nowiki>dmesg | grep DSDT</nowiki>}} を実行。 * 上書きされたことを示す文字列を探して下さい。例: [ 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]
このページで使用されているテンプレート:
テンプレート:Bc
(
ソースを閲覧
)
テンプレート:Hc
(
ソースを閲覧
)
テンプレート:Ic
(
ソースを閲覧
)
テンプレート:META Related articles start
(
ソースを閲覧
)
テンプレート:Note
(
ソースを閲覧
)
テンプレート:Pkg
(
ソースを閲覧
)
テンプレート:Related
(
ソースを閲覧
)
テンプレート:Related articles end
(
ソースを閲覧
)
テンプレート:Related articles start
(
ソースを閲覧
)
テンプレート:TranslationStatus
(
ソースを閲覧
)
テンプレート:Warning
(
ソースを閲覧
)
DSDT
に戻る。
検索
検索
DSDTのソースを表示
話題を追加