Loading

lspci的输出简单分析

CentOS系统的输出:

image

可以看到输出分成两部分,编号加设备描述。编号通过冒号 ":" 又分成了三部分,第一个部分是PCIe的 domain ID,第二个部分是 bus ID,第三个部分是 device id.function id。PCI设备的组织形式是一个树形,这表示一个domain可以包含多个bus,一个bus又包含了多个device,一个device又包含多个function。

看到这里我们可能会奇怪,lspci是怎么通过这么一个编号就知道这个设备是一个intel产的以太网设备呢?答案是这一切都写到了一个数据库里。路径是 /usr/share/hwdata/pci.ids 和 /usr/share/hwdata/pci.ids.gz ,用来更新的网址是(https://pci-ids.ucw.cz/)

如果使用 lspci 的 -nn 选项,看下命令的输出:

image

重点关注下红色标注的地方,0200是一个用来区分不同设备的编号,网络设备、存储设备、多媒体设备都有自己的编号

02:表示这是一个网络控制器

00:表示这是一个以太网控制器

image

image

8086:1533 这是一个厂商特有的编号,8086 是 intel的编号(Vendor ID),intel所有的设备都是使用这一编号,1533表示这是一个I210的GE网口

image

image

需要注意的是这个数据库的信息也是通过志愿者主动上传的,因此错误的数据也是有可能存在的。

总结以下这个查找过程,首先 lspci 遍历每个PCI设备并从设备的ROM中获取上述的所有信息,包括PCI地址 (就是开头的那一串数字) ,device class ID(0200) 以及 Vendor ID:Device ID,然后通过查找数据库就能每个PCI地址对应的厂商以及设备类别信息。

参考:

https://pci-ids.ucw.cz/

https://ichenfu.com/2019/11/03/interpreting-the-output-of-lspci/

https://zhuanlan.zhihu.com/p/33932734

posted @ 2023-06-13 18:02  成蹊0xc000  阅读(465)  评论(0编辑  收藏  举报