drivers/pci 源码目录、构建配置与模块索引
1. 范围与规模
源码基准为 rk3588/kernel-6.1/drivers/pci/。本树包含约 177 个 C 文件和 23 个内部头文件,既有跨架构 PCI Core,也有平台控制器、Endpoint、热插拔及 PCIe 端口服务。目录名虽为 PCI,但现代系统中的主要硬件通常是 PCI Express。
2. 顶层常驻 Core
CONFIG_PCI=y 时,顶层 Makefile固定编入:
| 文件 | 主要职责 |
|---|---|
access.c |
配置空间读写、访问锁和用户态配置访问 |
bus.c |
pci_bus资源窗口、设备加入和总线遍历 |
probe.c |
Host Bridge 注册、BDF 扫描、pci_dev创建及桥递归 |
host-bridge.c |
Host Bridge 窗口和固件节点辅助 |
remove.c |
设备停止、注销及子总线逆序拆除 |
pci.c |
设备使能、电源、状态保存、复位、PCIe Capability 通用操作 |
pci-driver.c |
pci_bus_type、ID 匹配、probe/remove、PM 和错误回调 |
search.c |
在已枚举对象中按 BDF、ID、Class 查找;不探测硬件 |
pci-sysfs.c |
设备、总线、资源、配置空间及控制属性 |
rom.c |
Expansion ROM 资源与映射 |
setup-res.c |
单设备 BAR 分配、写回和资源 claim |
setup-bus.c |
全拓扑桥窗口 sizing 与未分配资源处理 |
irq.c、setup-irq.c |
INTx 路由及 IRQ 分配 |
vpd.c |
Vital Product Data 访问 |
vc.c |
PCIe Virtual Channel |
mmap.c |
PCI 资源映射辅助 |
CONFIG_PCI还递归进入msi/和pcie/,但其中对象继续受各自 Kconfig 控制。
3. 顶层条件模块
| 配置 | 文件/目录 | 功能 |
|---|---|---|
CONFIG_OF |
of.c |
DT ranges、bus-range、IRQ 等解析 |
CONFIG_ACPI |
pci-acpi.c |
ACPI companion、PM、_OSC 等协作 |
CONFIG_PCI_QUIRKS |
quirks.c |
Header/Final/Early/Enable/Resume fixup |
CONFIG_HOTPLUG_PCI |
hotplug/ |
热插拔 Core 及各类控制器 |
CONFIG_PCI_ATS |
ats.c |
ATS、PRI、PASID |
CONFIG_PCI_IOV |
iov.c |
SR-IOV PF/VF |
CONFIG_PCI_ECAM |
ecam.c |
Enhanced Configuration Access Mechanism |
CONFIG_PCI_P2PDMA |
p2pdma.c |
PCIe Peer-to-Peer DMA |
CONFIG_PCI_DOE |
doe.c |
Data Object Exchange mailbox |
CONFIG_VGA_ARB |
vgaarb.c |
Legacy VGA 资源仲裁 |
CONFIG_PROC_FS |
proc.c |
/proc/bus/pci兼容接口 |
4. 子目录地图
| 子目录 | 定位 |
|---|---|
pcie/ |
PCIe Port Bus、AER、DPC、PME、ASPM、PTM、RCEC、EDR |
msi/ |
MSI/MSI-X 描述符、IRQ domain 和向量生命周期 |
hotplug/ |
pciehp、ACPI、SHPC、GPIO 及架构专用热插拔 |
endpoint/ |
EPC、EPF、ConfigFS 和测试/NTB Function |
controller/ |
Host/Endpoint 控制器平台驱动 |
controller/dwc/ |
Synopsys DesignWare 公共 Host/EP 层及平台 glue |
controller/cadence/、mobiveil/ |
其它 PCIe IP 公共层 |
switch/ |
Switchtec 等 PCIe Switch 管理驱动 |
5. RK3588 实际重点
Rockchip defconfig 启用CONFIG_PCI、CONFIG_PCIEPORTBUS、ASPM、CONFIG_PCIE_ROCKCHIP_HOST和CONFIG_PCIE_DW_ROCKCHIP。其中:
- RK3588 RC 主路径:
controller/dwc/pcie-dw-rockchip.c; - DWC 公共层:
pcie-designware.c和pcie-designware-host.c; - Endpoint:部分配置启用
pcie-dw-ep-rockchip.c; pcie-rockchip-host.c是较早 Rockchip PCIe IP 路线,不能与 RK3588 DWC 路线混为一谈;- x86、PowerPC、s390 等平台专用控制器和热插拔文件虽然在源码树中,但不会因“位于该目录”就在 RK3588 上运行。
6. 阅读顺序
建议按controller -> DWC Host -> probe -> setup-bus/setup-res -> bus -> pci-driver理解启动主链,再分别进入 MSI、PCIe 端口服务、PM/错误恢复和 Endpoint。只从probe.c开始会看不到配置事务如何由 RK3588 控制器真正发出。
正在加载留言…