ITKeyword,专注技术干货聚合推荐

注册 | 登录

Linux获取pci设备的厂商号、设备号、class号

styshoo 分享于 2017-04-01

推荐:浅谈Linux PCI设备驱动(一)

http://blog.csdn.net/linuxdrivers/archive/2010/08/30/5849698.aspx 要弄清楚Linux PCI设备驱动,首先要明白,所谓的Linux PCI设备驱动实际包括Linux PCI设备

2019阿里云全部产品优惠券(新购或升级都可以使用,强烈推荐)
领取地址https://promotion.aliyun.com/ntms/yunparter/invite.html

  要描述一个pci设备,就需要知道设备的厂商号(venderId)、设备号(devId)和class号。那么,在Linux系统中,如何获取这三个数据呢?
  既然是一个pci设备,那么首先就得知道BDF——该pci设备在OS中的唯一标识符。以网卡举例,我们可以通过ethtool来得到BDF。其中,bus-info对应的信息就是BDF。

# ethtool -i p12p1
driver: ixgbe
version: 4.0.1-k
firmware-version: 0x800003e1
bus-info: 0000:11:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no

厂商号和设备号

  可通过lspci命令获取pci设备的厂商号和设备号。

# lspci -n -s 11:00.0
11:00.0 0200: 8086:1528 (rev 01)

  其中,8086就是厂商号,1528就是设备号。

# lspci | grep 11:00.0 
11:00.0 Ethernet controller: Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 (rev 01)

  当然,也可以通过上面的方法直接使用lspci命令来查看该设备的基础信息。上面可以看出,这是一个intel的网卡设备,X540网卡。

推荐:linux为PCI、USB设备找到合适的驱动

本文转载自:http://hi.baidu.com/deep_pro/blog/item/415ec217bdead20c4b90a77d.html 尊重作者 这些操作都是我很久以前就想知道的,但是一直没有找到合适的资料

class号

  一个完整的class号应该包含三个部分:Device class、Device subclass和Program interface,每个部分占2个16进制数字,一个类型的设备,他们的class号是一样的。其实,在上面的lspci命令中已经获取到了部分的class号。下面实例的0200就是class号的前两部分Device class和Device subclass,只是没有Program interface这一部分。要查询完整的class号,可以通过在线网站pci-ids来查询。

# lspci -n -s 11:00.0
11:00.0 0200: 8086:1528 (rev 01)

无Program interface情况

  还是以上面的网卡为例,我们已经知道这是个网卡控制器(Ethernet controller)。那么我们就在网页的Jump一栏中输入关键字“Ethernet controller”,就会直接跳转该项。由于该项没有Program interface,因此,最终的class号就是020000。

有Program interface情况

  再以三星的ssd磁盘为例。

# lspci | grep Samsung
01:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd Device a802 (rev 01)
0c:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd Device a802 (rev 01)
10:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd Device a802 (rev 01)
# lspci -n -s 01:00.0
01:00.0 0108: 144d:a802 (rev 01)

  在pci-ids查询关键字“Non-Volatile memory controller”,进入该项后,了解到该项的Device class和Device subclass为0108。同时,我们还发现该项有两个Program Interface。由于这个ssd是NVMe总线的,所以该ssd的最终class号就是010802。
这里写图片描述
ps:lspci -D:显示设备的厂商号、设备号、Class号。但这个Class号只是前半部分,还缺少后半部分。

# lspci -Q -s 0c:00.1
0c:00.1 Class 0200: Device 8086:1528 (rev 01)

推荐:Linux下获取设备pci ID的方法

有的时候,开发时需要用到设备的pci ID,如用dpdk来绑定某个网卡,需要用网卡的pci ID。下面有一些方法是可以获取pci ID的。 1.使用lspci命令。 如 02:00.0 USB

  要描述一个pci设备,就需要知道设备的厂商号(venderId)、设备号(devId)和class号。那么,在Linux系统中,如何获取这三个数据呢?   既然是一个pci设备,那么首先就得知道BDF——该pci

相关阅读排行


用户评论

游客

相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。