Grubでacpi_osiパラメータを設定する方法

Grubでacpi_osiパラメータを設定する方法

修正できる問題についての質問ですが、なぜ修正できるのかわかりません。

キーボードでバックライトを調整できるようにしたいです。問題を解決した唯一の方法は、グルーブ内の1行を変更することでした。

GRUB_CMDLINE_LINUX_DEFAULT="acpi_osi="

これがバックライトの問題を解決する理由を知っている人はいますか?

私はDebian 8を使用しています。

ベストアンサー1

オペレーティングシステムの起動プロセス中に、オペレーティングシステムはBIOSからさまざまなACPIテーブルを取得し、説明する「テーブル」、ここでプログラムコードに似ているようです。。かなり人気のあるテーブルはDSDTしかし、それは一人ではありません。

ACPIテーブルはテキストソースコード(上記のリンク例を参照)で生成され、次のツールを使用してバイナリ形式にコンパイルされます。ヤスル(インテル提供)。これらのテーブルはBIOSに保存され、オペレーティングシステムでバイナリ形式(中間バイトコードなど)で処理されますが、必要に応じてソースコードに再び「分解」することができます。 Linuxパッチプログラムは時々それを使用してバグまたはACPI「バージョンの不一致」を修正します。元のテーブルは分解され、ソースコードで変更され、現在のバージョンのIASLに再コンパイルされ、カスタム代替エントリとしてLinuxカーネルに提供されます。 ..

ACPIテーブル(DSDTを含む)には条件付き分岐が含まれています。ブートオペレーティングシステムで解釈されるACPIテーブルは、_OSIというメソッドを使用してオペレーティングシステムのバージョンをテストできます。ホストオペレーティングシステムはこのテーブルを解釈し、「オペレーティングシステムのバージョン文字列」を_OSIメソッドに提供します。たとえば、何らかの理由で、_OSI "Windows 2009"文字列は "Windows 7"を表します。私たちの現実では。推定される内容なので参考にしてください元の目的ではありませんが、_OSIアプローチの場合は大丈夫です:-)

つまり、ACPIテーブルに含まれており、ホストオペレーティングシステムによって解釈される「プログラム」は、実行中のWindowsのバージョンをテストし、それに応じて動作を変更することができます。検出されたバージョンのWindowsに基づいて、ハードウェアとさまざまなBIOSサービスインターフェイス/構造を初期化できます。たとえば、MacOSと同様に、Linuxには一意の割り当てられた_OSI IDがあります。ただし、x86マザーボードのBIOSは通常最新のWindowsバージョンでテストされているため、ACPIテーブルが正しいことを確認しようとすると実際に幸運になる可能性があります。 Linuxではなく、一部の特定のWindowsバージョンで解釈されます。 (または明確に定義されていない分岐型ACPIコードで「基本ケース」が発生しないようにしてください。)これは、acpi_osi="some string"カーネルコマンドライン引数の利点です。これに関する詳細とその他の関連する主張は次のとおりです。Linux「カーネルパラメータ」ガイドにはいくつかのドキュメントがあります。

ディスプレイバックライトに加えて、acpi_osi文字列は、ブート中のBIOSとオペレーティングシステムの動作のさまざまな側面に影響を与える可能性があります。たとえば、現在私は古いAcer Extensa 5220ノートブック(C2D、i965GM Northbridge)を使用しており、デフォルト設定ではサスペンド(ACPI S3、RAMサスペンド)で再開することが頻繁に失敗します。再起動すると、黒い画面とバックライトが表示され、停止または2回再起動して最初から再起動します。私はBIOSを更新しましたがあまり役に立ちませんでしたが、今回のBIOSアップデート(1.35)がWindows 7でうまく機能するように設計されていると確信していました。だから、いくつか試してみたところ、ついにかなり良い結果を得ました。

acpi_osi=! acpi_osi="Windows 2009"

最初の部分である acpi_osi=! は、「この時点で知っているすべての acpi_osi 文字列を忘れてしまう」を意味します (実際には単純な文字列ではなく文字列のリストです。もちろん - そうです)。したがって、最初にインタプリタが元々使用していたものをすべて消去してから、必要な文字列を設定します。最新の Linux カーネルと連携するには、BIOS が名目上サポートする最新バージョンの Windows を指定するのが最善です。

文字列には空白文字(ASCII「スペース」)が含まれているため、「Windows 2009」の周囲に引用符が必要です。この cmdline 引数を、一部のディストリビューション設定ファイル (Debian や友達 (Ubuntu) の /etc/default/grub) のシェル変数に入力する必要がある場合に問題が発生する可能性があります。この場合はを使用してくださいacpi_osi=\"Windows 2009\"。つまり、カーネルコマンドラインに入る必要があるすべての引用を「エスケープ」するには、バックスラッシュを使用します。その後、update-grub(Debian / Ubuntuを再実行)を実行すると、バックスラッシュが削除され、引用符が文字通り/ boot / grub / grub.cfgに表示されます。興味深いことに、後で確認すると、最初の引用cat /proc/cmdlineがパラメータの最初に移動されたことがわかります。"acpi_osi=Windows 2009"これは少し奇妙に見えます。 :-)

私はacpi_os_nameまたはacpi_sleepを台無しにしてはいけないことを見つけました(そうでなければ有望に見えます)。 YMMV。

これは、一般的な以前のバージョンとの互換性問題の別の兆候です。時間的に離れて作られた2つの異なるソフトウェア間の互換性。一時停止と再開について言えば、Linuxは「電源状態の設定」と呼ばれる古いシンプルなAPM BIOS呼び出しのサポートを失いました。したがって、一時停止+再開に使用できる唯一のインターフェイスはACPIです。それ自体は非常に複雑で、いくつかのステップを経ています。メジャーリリースと非常に近代的なLinuxリリースは、もは​​や非常に古いハードウェア(およびそのBIOS)で徹底的にテストされていません。BIOSは新しい場合でもバグがないかもしれません。になります。 ACPIの最上位にあり、それ自体がより多くの機能を提供します…

おすすめ記事