一、lspci 命令查看 pci 设备。出现如下信息: shell@rk3399_mid:/ $ lspci 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 的识别码
二、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 利用 busybox lspci 查看现在的 pci 设备。 shell@rk3399_mid:/ $ busybox lspci 00:00.0 Class 0604: 17cd:0000 需要注意的是,每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 |
|
来自: charlie_linux > 《pcie》