通过读取文件列出 PCI 设备(而不是 lspci 命令)

通过读取文件列出 PCI 设备(而不是 lspci 命令)

我需要从文件中读取 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

相关内容