lspciコマンドの代わりにファイルを読み込んでPCIデバイスを一覧表示する

lspciコマンドの代わりにファイルを読み込んでPCIデバイスを一覧表示する

ファイルからPCIデバイス情報を読み取る必要があります。ただし、このようなコマンドを使用すると、使用できない出力が表示されます。

cat /proc/bus/pci/05/00.0

出力:

�h��

この問題をどのように解決できますか?

オペレーティングシステム:DebianファミリーLinux x64、Kenel 4.19

答え1

/proc/ 以下のすべてのファイルにテキストが含まれているわけではありません。

/proc/bus/pci/05/00.0(および同様のファイル)には、テキストではなくバイナリデータが含まれています。端末に表示するためではなく、バイナリデータ型を理解するプログラム(少なくともカーネル文書やソースコードのどこかに文書化されている)から読み取れるようになっています。

内部コンテンツを表示するにはhexdumpakaを使用できますhd

$ hd /proc/bus/pci/05/00.0
00000000  00 10 72 00 07 04 10 00  03 00 07 01 10 00 00 00  |..r.............|
00000010  01 c0 00 00 04 00 6c d2  00 00 00 00 04 00 28 d2  |......l.......(.|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 10 40 30  |..............@0|
00000030  00 00 40 fe 50 00 00 00  00 00 00 00 0a 01 00 00  |[email protected]...........|
00000040

05:00.0に他のPCI-eデバイスがあることはほぼ確実であるため、出力が異なる場合があります。

答え2

PCIベンダー/デバイス識別子を見つけるには、/sys/bus/pci/...ディレクトリツリーを使用できます。

for i in /sys/bus/pci/devices/*
do 
    printf "Device ${i##*/}: vendor %s, device %s\n" "$(< $i/vendor)" "$(< $i/device)"
done

私の考えでは、/sysディレクトリ階層は、/proc解析が難しい形式の任意のギター(プロセスに関連しない)システム情報で/sys乱雑になりました。 。分析が簡単です。

/sysしたがって、訪問する前に、必要な情報が「first」項目にあることを確認しておくとよいでしょう/proc

関連情報