web-dev-qa-db-ja.com

LinuxでCLIから特定のPCIデバイスレジスタを読み取る方法は?

バックライトを制御するには、次のことを行う必要があります。

Sudo setpci -s 00:02.1 F4.B=x

これは次のように読むことができます:

ID 00:02.1のPCIデバイスの場合、レジスタF4(バイトのみ)をxに設定します。

Xに必要な値を把握するために、現在の値を読み取りたいと思います(私が書いているスクリプトで)。どうすればよいですか?

初期の仕事

これはlspciのドメインのようです。私は試した

Sudo lspci -x -s 00:02.1

しかし、これでは十分な範囲が得られません(レジスタ/アドレスF4に到達しません)。ただし、-xxxコマンドラインで実行できます。これにより、F4のバイトを確認できるダンプが得られます。これは、setpciコマンドで操作できることを確認しました。ただし、マニュアルには次のように書かれています。

  -xxx   Show hexadecimal dump of the whole PCI configuration space. It is  available  only  to  root  as  several  PCI
         devices  crash when you try to read some parts of the config space (this behavior probably doesn't violate the
         PCI standard, but it's at least very stupid). However, such devices are rare, so you needn't worry much.

したがって、rootとして自動的に実行されるプログラムには入れたくありません。レジスタF4の値を読み取る方法はありますか? getpciプログラム? setpciフラグ?私が逃したいくつかの特別なlspciフラグ?

(環境は、SamsungN140ネットブック上のUbuntuNetbook Remix 9.04(karmic)(32ビット)です)

4
Paul Biggar

プログラムsetpciが必要です。このフォーマットはあなたが望むことをするように見えます:

setpci -s 00:02.1 F4.B

見る - man setpci :バージョンとの唯一の違いは、レジスタを設定しようとしていることです。そのため、レジスタに名前を付けて値を割り当てます( "F4.B=x ")。ここでは、名前を付けるだけです。値を割り当てないでください。

マンページから:

オペレーション

構成レジスタの値を照会するには、名前を付けるだけです(名前を入力するか、レジスタの幅をバイト、ワード、またはロングワードとして指定するオプションの.B、.W、または.Lサフィックスを付けてレジスタアドレスを入力します)。

レジスターを設定するには、reg = valuesを書き込みます。ここで、regはレジスターの照会に使用するものと同じであり、valuesは、指定されたアドレスから開始して書き込む値のコンマ区切りリストです。書き込まれる各値は、16進数、またはマスク内の2進数に対応するビットをビット内の対応するビットの値に変更するビット:マスクペアとして指定できます。

9
quack quixote

ディスプレイが新しいintel_backlightインターフェースを使用している場合、これは機能しないことを考慮に入れてください(この日付までは、gnome電源マネージャーのみが管理できます)。

これを読んでください: https://askubuntu.com/questions/57236/unable-to-change-brightness-in-a-lenovo-laptop/81389#81389 そしてリストされているリンク特に私の投稿(アルバロという名前で)

1
Álvaro