PCI Sysfs、Proc 与用户态控制接口

PCI Sysfs、Proc 与用户态控制接口

1. 设备目录

每个 Function 通常位于:

1
/sys/bus/pci/devices/0000:bb:dd.f/

pci-sysfs.c创建主要属性,proc.c提供历史/proc/bus/pci接口。现代管理和诊断应优先使用 sysfs、libpci/lspci 及驱动专用接口。

2. 身份与拓扑属性

常见只读属性:

  • vendordevice
  • subsystem_vendorsubsystem_device
  • classrevision
  • irq
  • modalias
  • max_link_speed/width
  • current_link_speed/width
  • 桥的secondary_bus_number/subordinate_bus_number
  • numa_nodelocal_cpulist等拓扑信息。

modalias用于 udev/module loader 查找匹配模块,但最终仍由pci_bus_match()按 ID 表确认。

3. 配置空间

config是二进制属性,大小由设备配置空间决定,通常为 256 B 或 PCIe 4 KiB。读写权限受 capability、内核 lockdown 和文件 mode 限制。

直接写配置空间可能:

  • 改写 BAR 导致资源树与硬件不一致;
  • 关闭 Bus Master 或使能未知 DMA;
  • 改变 AER/ASPM/链路状态;
  • 破坏正在运行的驱动。

因此在线设备优先使用内核 API 或驱动接口,不把setpci作为永久配置方案。

4. BAR 与 ROM

  • resource:文本形式列出所有资源起止地址和 flags;
  • resourceN:可 mmap 的 BAR 二进制文件;
  • resourceN_wc:允许 write-combining 的变体;
  • rom:Expansion ROM;
  • resourceN_resize:Resizable BAR 控制,只有支持且安全时出现。

用户态 mmap BAR 不能绕过设备所有权。设备已绑定内核驱动时,并发访问私有寄存器可能破坏驱动状态。

5. 设备控制属性

enable

写 1/0通过 PCI Core 增减设备 enable 状态。它不是完整的驱动初始化/停机接口,不能代替 unbind、停止 DMA 和资源释放。

remove

写 1触发逻辑移除:

1
2
pci_lock_rescan_remove()
-> pci_stop_and_remove_bus_device_locked()

它不会物理断电,且桥设备移除会递归影响下游。

rescan

总线或设备 rescan 会重新读取配置空间并加入新 Function。前提是控制器、链路、电源已就绪。

reset

若设备存在安全 reset 方法,会出现reset属性。写入会触发功能复位,但不保证应用或驱动状态自动恢复。

driver_override

指定仅允许匹配某驱动名。它本身不会自动 unbind/rebind;常用于 VFIO,但必须同时完成 IOMMU group 和设备隔离检查。

6. 驱动绑定

1
2
3
4
5
/sys/bus/pci/drivers/<driver>/
bind
unbind
new_id
remove_id
  • unbind调用当前驱动 remove;
  • bind尝试绑定指定 BDF;
  • new_id临时向驱动加入动态 PCI ID;
  • 动态 ID 不会让不兼容硬件突然兼容,错误绑定可能造成 MMIO/DMA 破坏。

7. SR-IOV

PF 设备可能暴露:

  • sriov_totalvfs
  • sriov_numvfs
  • sriov_drivers_autoprobe

sriov_numvfs会创建/删除 VF。删除前必须解绑或停止 VF 用户;资源不足时应检查 VF BAR 和桥窗口。

8. PCI Slot 与 Hotplug

Hotplug Core 在:

1
/sys/bus/pci/slots/<slot>/

按后端能力提供powerattentionlatchadaptertest等属性。并非每个 BDF 都有物理 slot,也不是每个 M.2 连接器都支持软件控电。

9. /proc/bus/pci

CONFIG_PROC_FSproc.c提供兼容枚举和配置访问。它主要服务历史 ABI;新代码不应依赖其目录布局来判断热插拔或设备所有权。

10. 常用诊断

1
2
3
4
5
6
lspci -nn
lspci -t
lspci -vv -s <BDF>
readlink /sys/bus/pci/devices/<BDF>/driver
cat /sys/bus/pci/devices/<BDF>/resource
cat /proc/interrupts

lspci展示配置空间快照;dmesg 展示内核过程;二者不能替代 PHY/clock/regulator 等平台状态检查。

11. 并发与权限

removerescan、bind/unbind、SR-IOV 和 reset 都是有破坏性的控制操作,应:

  • 限制为管理员;
  • 先停业务和 DMA;
  • 串行化自动化脚本;
  • 验证目标 BDF,避免桥级操作波及整棵子树;
  • 不在不可信容器中暴露可写 PCI sysfs。

文章互动

阅读 --

留言

0 条留言

正在加载留言…