PCIe 软件开发
三大开发方向,请选择你的路径
软件开发概述
PCIe软件开发涉及多个层次,从固件层的BIOS/UEFI初始化,到操作系统内核的设备驱动,再到用户空间的应用程序。在开始学习之前,请务必明确你的开发方向(参见架构概览)。
重要提示
本页面已拆分为三个独立的子页面,分别对应 PCIe 的三大开发方向。请根据你的目标选择对应页面。
用户应用程序
设备控制、数据处理
内核驱动
设备枚举、资源管理、中断处理
PCI子系统
总线枚举、资源分配、热插拔
固件 (BIOS/UEFI)
平台初始化、ACPI配置
三大开发方向
PCIe软件开发按运行位置和职责分为三个方向,点击下方卡片进入对应详细页面:
PCI设备驱动开发
运行位置:RC 侧系统内核
职责:驱动连接在PCIe总线上的EP设备(如NVMe SSD、网卡、GPU)
核心内容:
- Linux PCI 子系统框架
- Probe / Remove 函数实现
- 配置空间访问 API
- DMA 编程(流式 / 一致性 / 分散聚集)
- MSI / MSI-X 中断处理
- 用户空间交互(字符设备、mmap、sysfs)
- GPU / AI 加速卡驱动示例
- 调试方法与最佳实践
进入设备驱动开发
RC控制器驱动开发
运行位置:RC 侧系统内核
职责:初始化RC控制器硬件、枚举设备、提供配置空间访问接口
核心内容:
- pci_host_bridge 结构详解
- pci_ops 配置空间操作实现
- ECAM 配置访问机制
- RC 控制器初始化流程
- 设备树(Device Tree)配置
- Linux 内核源码路径指引
- RC 驱动调试方法
进入RC驱动开发
EP控制器驱动开发
运行位置:Endpoint 设备(FPGA / 嵌入式设备)
职责:配置EP控制器、响应RC请求、实现设备特定功能
核心内容:
- EP 控制器配置要点
- BAR 配置与能力结构
- 处理 RC 的 Memory Read/Write 请求
- MSI 中断发送
- 常用 EP 控制器 IP 核对比
- Linux PCIe EP 子系统编程
- EP 开发调试方法
进入EP控制器驱动开发
三大方向对比
| 维度 | 设备驱动 | RC控制器驱动 | EP控制器驱动 |
|---|---|---|---|
| 运行位置 | RC 侧内核 | RC 侧内核 | EP 设备 |
| 主要职责 | 驱动 EP 设备 | 初始化 RC 硬件 | 配置 EP 控制器 |
| 典型场景 | NVMe/网卡/GPU 驱动 | SoC 芯片移植 | FPGA 加速卡固件 |
| 核心 API | pci_register_driver |
devm_pci_alloc_host_bridge |
pci_epc_write_header |
| 源码目录 | drivers/*/ |
drivers/pci/controller/ |
drivers/pci/endpoint/ |
| 人才需求 | 最广泛 | SoC/芯片厂商 | FPGA/嵌入式 |