PCIe 软硬件架构概览
理解PCIe开发的完整图景,明确不同方向的职责边界
为什么需要理解架构全貌?
在开始学习PCIe之前,了解整个系统的软硬件架构非常重要。很多初学者容易混淆不同的开发方向,例如:
常见误区
有人花了很多时间学习"PCIe设备驱动开发",结果入职后发现部门需要的是"RC控制器驱动开发"——这是两个完全不同的方向!
设备驱动开发:运行在RC侧系统中,用于驱动连接在PCIe总线上的EP设备(如NVMe SSD、网卡)
RC控制器驱动开发:属于RC硬件的软件栈,负责初始化RC硬件、枚举设备、提供配置空间访问接口
本页面将帮助你建立完整的PCIe软硬件架构认知,明确各种开发方向的职责边界。
PCIe 软硬件架构全景图
下图展示了一个典型的PCIe系统架构,包含Root Complex、Switch和Endpoint,以及各层的软件栈。
三大开发方向详解
RC控制器驱动运行在Root Complex所在的系统中(通常是CPU/SoC侧),负责初始化RC硬件、枚举PCIe设备、提供配置空间访问接口。这是PCIe子系统的"基础设施"。
- 初始化RC控制器硬件
- 配置ECAM(增强配置访问机制)
- 实现设备枚举逻辑
- 分配Bus/Device/Function号
- 配置PCIe域和总线范围
- 处理AER错误报告
- SoC厂商开发新芯片的PCIe RC
- 移植Linux内核到新硬件平台
- 调试PCIe链路训练问题
- 修复设备枚举失败问题
- 实现热插拔支持
- PCIe规范(配置空间、枚举流程)
- Linux内核PCI子系统架构
- 设备树(Device Tree)
- ACPI(x86平台)
- ECAM机制
- drivers/pci/controller/
- drivers/pci/host/
- drivers/acpi/pci_root.c
- drivers/pci/probe.c
PCIe设备驱动运行在RC侧的操作系统中,用于驱动连接在PCIe总线上的Endpoint设备。这是最常见的PCIe相关开发方向。
- 实现probe/remove回调
- 映射设备寄存器(MMIO)
- 实现DMA数据传输
- 处理设备中断(MSI/MSI-X)
- 实现用户空间接口
- 电源管理(suspend/resume)
- 开发NVMe SSD驱动
- 开发高速网卡驱动
- 开发AI加速卡驱动
- 开发FPGA卡驱动
- 开发视频采集卡驱动
- Linux驱动开发框架
- DMA编程(一致性/流式)
- 中断处理机制
- 并发和锁机制
- 设备特定协议(如NVMe)
- drivers/nvme/host/
- drivers/net/ethernet/
- drivers/gpu/drm/
- drivers/uio/
EP侧开发运行在Endpoint设备上(如NVMe控制器、FPGA),负责实现设备特定功能和PCIe EP控制器配置。这是一个相对小众但专业的方向。
- 配置EP控制器硬件
- 设置配置空间寄存器
- 实现BAR空间映射
- 处理RC发来的请求
- 实现DMA引擎控制
- 发送MSI/MSI-X中断
- FPGA PCIe IP核开发
- NVMe控制器固件开发
- 智能网卡固件开发
- PCIe测试设备开发
- 嵌入式PCIe设备开发
- PCIe规范(EP角色)
- EP控制器IP核(如Xilinx PCIe IP)
- 裸机或RTOS开发
- 配置空间布局
- 中断发送机制
- Xilinx PCIe IP核
- Intel PCIe IP核
- Synopsys PCIe控制器
- ARM CoreLink PCIe
不同角色的开发对比
- 运行位置:RC侧系统
- 开发对象:RC控制器硬件
- 目标:让PCIe总线工作起来
- 典型雇主:SoC厂商、CPU厂商
- 难度:★★★★☆
- 市场需求:相对较少
- 运行位置:RC侧系统
- 开发对象:EP设备
- 目标:让EP设备发挥作用
- 典型雇主:设备厂商、云厂商
- 难度:★★★☆☆
- 市场需求:量大,最常见
- 运行位置:EP侧系统
- 开发对象:EP控制器+功能逻辑
- 目标:实现设备功能
- 典型雇主:设备厂商、FPGA公司
- 难度:★★★★☆
- 市场需求:小众但专业
学习路径建议
- 理解拓扑结构:RC、Switch、Endpoint的关系
- 协议分层:事务层、数据链路层、物理层的职责
- 配置空间:如何发现和配置设备
- LTSSM:链路是如何建立起来的
- TLP/DLLP:数据是如何传输的
- 中断机制:MSI/MSI-X的工作原理
本网站内容导航
基于上述架构,本网站目前涵盖的内容如下:
| 页面 | 内容 | 适用方向 |
|---|---|---|
| 基础知识 | 拓扑结构、协议分层、事务类型、流量控制 | 所有方向 |
| 配置空间 | 寄存器布局、能力结构、访问方法 | 所有方向 |
| LTSSM状态机 | 链路训练过程、状态转换 | RC驱动、EP固件 |
| PHY架构 | SerDes、编码、均衡、信号完整性 | 硬件相关方向 |
| 软件开发 | Linux驱动开发、DMA、中断处理 | 设备驱动 |
| 交互工具 | 带宽计算、TLP构造、配置解析 | 所有方向 |
待补充内容
本网站仍在建设中,以下内容计划补充:
- RC控制器驱动开发详解
- EP固件开发指南
- Switch工作原理
- PCIe热插拔机制
- 虚拟化中的PCIe(SR-IOV、vGPU)
- CXL(Compute Express Link)简介
声明
本页面内容由AI辅助整理,基于PCIe规范和Linux内核文档整理而成,仅供学习参考。 内容可能存在错误或不准确之处,欢迎读者指正。实际开发请以官方规范和文档为准。