web-dev-qa-db-ja.com

PCIeバス上のSMBus / I2C

免責事項、私はCentOS/Linuxの専門家から遠く離れており、Googlefuを使用してこれを自分で見つけるのに苦労しています。 CentOSを実行しているPCのPCIeスロットに入る製品に取り組んでいます。 PCIe相互接続のサイドチャネルには、Vital Product Data(VPD)テーブルを収集するために使用されるSMBus(つまり、I2C)があります。私はこのインターフェースをテストする方法を見つけようとしていますが、これまでのところ惨めに失敗しています。 VPDおよびI2Cデバイスを試して読み取るためのツールがいくつかあることを私は知っています。

LM-Tools(I2C)、Sudo yum install i2c-tools dmidecodeを使用してインストール、Sudo yum install dmidecodeを使用してインストール

Dmidecodeのツールには何も返さない「vpddecode」があり、メモリ内で何かを探していると思われますが、実際にはわかりません。 LM-Toolsにはi2cdetectがありますが、「Sudo i2cdetect -y 0」を実行しようとしても機能せず、次のように報告されます。

エラー:ファイル/ dev/i2c-2または/ dev/i2c/2を開くことができませんでした:そのようなファイルまたはディレクトリはありません

/devの下を見ると、i2cが含まれているアイテムはありません。だから、私はモジュールか何かをロードする必要があると思っていますか?

だから、私の質問は次のとおりです。

  1. これらのツールは、PCIe SMBus上にあるデバイスと通信できますか?
  2. これらのユーティリティがPCIeSMBus上のデバイスで機能する場合、それらが機能するためにどのようなアクションを実行する必要がありますか?
  3. これらのユーティリティがPCIeSMBus上のデバイスで機能しない場合、どのユーティリティが機能しますか?

どんな助けでも大歓迎です。私はグーグルを持っていますが、私のグーグルフーは、たとえそれらをフィルターで除外しようとしても、ほとんどの場合、LMモジュールが温度やそのようなアイテムを読み取るための情報を表示します。

ありがとう、マーク

3
lordhog

私の知る限り、SMBusコントローラーはLinuxではI²Cデバイスとして表されます。 (SMBusはI²Cのサブセットであるため、これらのデバイスはすべてのI²Cコマンドをサポートするわけではなく、SMBusに関連するコマンドのみをサポートします。)したがって、ユーザースペースプログラムが通信するには、メインボードのSMBusコントローラーを/dev/i2c-Xデバイスとして表示する必要があります。 PCIeSMBusデバイスを使用します。

/dev/i2c-Xデバイスを使用するには、i2c-devモジュールをロードする必要があります。これを手動で行うには、シェルでmodprobe i2c-devを実行するか、モジュール名のみを含む行を/etc/modulesファイルに追加します。後者は、システムが起動するたびにモジュールを自動的にロードします。

さらに、メインボードに特定のSMBusコントローラーのドライバーをロードする必要があります(自動的にロードされない場合)。お持ちのメインボード(チップセット)がわかりません。ほとんどのIntelチップセットのSMBusコントローラーは、i2c-i801Linuxカーネルモジュールでサポートされています。

両方のモジュールをロードした場合は、システムで1つ以上のI²Cバスを使用できるはずです。バスごとに、/dev/i2c-Xデバイスと、/sys/bus/i2c/devices/の下に同じ名前のエントリがあります。

PCIeデバイスに属するバスを絞り込むには、次のことを試してください。

$ grep . /sys/bus/i2c/devices/i2c-*/name

これにより、すべてのバスのリストが表示され、各バスのドライバー名が出力されます。 i2c-toolsがインストールされているので、i2cdetect -lを使用して同様のリストを取得することもできます。

編集:ACPI関連のようです 一部のメインボードのi2c-i801およびIntelC220チップセットの問題 レンダリングSMBusモジュールは使用できません。

2
dasup

コマンドラインでacpi_enforce_resources = laxを渡すと、ACPIリソースの競合が解決されます。

i2c/devエントリドライバー
ACPI警告:SystemIO範囲0x0000000000003000-0x000000000000301FがOpRegion 0x0000000000003000-0x000000000000300F(_SB_.PCI0.SBUS.SMBI)(20150930/utaddress-254)と競合しています
ACPI:この競合により、ランダムな問題やシステムの不安定性が発生する可能性があります
ACPI:このデバイスでACPIドライバーを使用できる場合は、ネイティブドライバーの代わりに使用する必要がありますi801_smbus 0000:00:1f.3:PCI割り込みを使用するSMBus

ネイティブドライバーとACPIOperationRegions(SystemIOおよびシステムメモリのみ)間のリソース干渉を確認します。 IO ACPIで宣言されたポートとメモリは、ACPIサブシステムによって任意のAMLコードで使用される可能性があり、レガシードライバーに干渉する可能性があります。acpi_enforce_resources=は次のように設定できます。

  • strict(デフォルト)(2)->リソースにアクセスしようとするそれ以上のドライバーはロードされません
  • lax(1)->リソースにアクセスしようとしているドライバーがさらにロードされますが、問題が発生する可能性があるというシステムメッセージが表示されます...

  • いいえ(0)-> ACPI操作領域リソースは登録されません

0
Fengbo Wu