分享

PCIE命令lspci 和一些调试信息

 charlie_linux 2022-10-03 发布于广东

一、lspci 命令查看 pci 设备。出现如下信息:

shell@rk3399_mid:/ $ lspci
shell@rk3399_mid:/ $ 0c:00.0 0100: 1000:0056 (rev 02)

PCI规范允许单个系统拥有高达256个总线,所以总线编号是8位。但对于大型系统而言,这是不够的,所以,引入了域的概念,每个 PCI域可以拥有最多256个总线,每个总线上可支持32个设备,所以设备号是5位,而每个设备上最多可有8种功能,所以功能号是3位。

每个PCIE设备在系统总线上都有自己的标识符,这个标识符就是BDF(Bus,Device,Function),PCIE的配置软件(即Root的应用层,一般是PC)应当有能力识别整个PCIE总线系统的拓扑逻辑,以及其中的每一条总线(Bus),每一个设备(Device)和每一项功能(Function)。

在BDF中,Bus Number占用8位,Device Number占用5位,Function Number占用3位。显然,PCIe总线最多支持256个子总线,每个子总线最多支持32个设备,每个设备最多支持8个功能,如下图所示:


0c:00.0 表示含义为 bus number: device number.function number 三者组合成一个 16bit 的识别码

  1. bus number:8bits 最多连接到 256 个 bus
    2. device number:6bits 最多连接到 32 种装置
    3. function number:3bits 最多每种装置有 8 种功能
    0100: 1000:0056 表示含义为 Class ID: Vendor ID Device ID

二、pci 设备速度

通过如下命令可以获取 pci 的速度

shell@rk3399_mid:/ $ lspci -n -d 1000:0056 -vvv | grep -i width

三、在 PCIe 设备没有插上的情况下开机,得到如下 log

[1.157185] rockchip-pcie f8000000.pcie: no vpcie3v3 regulator found
[1.157207] rockchip-pcie f8000000.pcie: no vpcie1v8 regulator found
[1.157223] rockchip-pcie f8000000.pcie: n vpcie0v9 regulator found
[1.691995] rockchip-pcie f8000000.pcie: PCIe link training gen1 timeout!
[1.692059] rockchip-pcie: probe of f8000000.pcie failed with error -110

我们 PCIe 设备还未连接,出现如上 Log 为正常。
四、将 PCIe 的设备插在板子上

利用 busybox lspci 查看现在的 pci 设备。

shell@rk3399_mid:/ $ busybox lspci

00:00.0 Class 0604: 17cd:0000
01:00.0 Class 0106: 1b21:0612

可以看到有几个 ID,可以根据 ID 确认设备是否被识别到。

需要注意的是,每Bus0总是分配给RC,且每个设备必须要有功能0(Fun0),其他的7个功能(Fun1~Fun7)都是可选的。所以bus0是RC,必须要有的。bus1才是设备。bus:01就是刚刚插上的PCIE设备。

比如我们根据官方的 datasheet 知道,1b21 即 ASMEDIA 厂商的 Vendor ID,0612 即 Device ID。之后就是加载设备驱动的时候,会根据 VENDOR_ID 进行匹配。识别成功后才能加载 probe。

如果没有进入 probe ,有一种情况是设备已经被一个驱动占有了,找到这个设备使用的驱动,并且去除即可。

五、lspci命令解析和使用

表1 基本参数:

表二 限制参数:

通过表二中所示的-s -d 参数,配合表1中的基础参数,可以查看指定pcie设备的信息。

六、举例:

lspci -vv  
lspci -n
lspci -tv                --树形结构显示设备上所有pcie设备,并显示简要信息
lspci -tn                --树形结构显示设备上所有pcie设备,并deviceid vendorid
lspci -vv -s 00:1f.3     --查看00:1f.3设备的详细信息
lspci -xxx -s 00:1f.3    --查看00:1f.3设备配置空间的所有内容
lspci -vv -d 8086:8c22   --查看8086:8c22设备的的详细信息
lspci -xxx-d 8086:8c22   --查看8086:8c22设备配置空间的所有内容
setpci -s 00:1f.3 3c.B=c   --将00:1f.3设备配置空间的0x3c地址值修改为0xc

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多