文章目录[隐藏]
简介
本文介绍下linux pci总线子系统知识及相关文档,PCIe总线已发展了好几代,从PCIe 1.0 2.5GT/s、PCIe 2.0 5GT/s、PCIe 3.0 8GT/s 、PCIe 4.0 16GT/s、PCIe 5.0 32GT/s, 速率是越来越快,已广泛应用于计算、网络、存储、显卡、安全等各个领域。熟悉linux pci子系统对底层软件非常重要的,本文重点介绍linux中pci子系统的知识。
PCIe软件架构介绍
- PCI/PCIe Hardware
- ACPI PCI/ARCH PCI driver
主要位于drivers/acpi/pci*.c 如pci_root.c
arch pci driver架构相关的pci代码,arm64: arch/arm64/kernel/pci.c
- PCI subsystem driver
代码位于drivers/pci目录, 提供pci枚举,资源分配,初始化功能,并为设备提供pci通用接口。
- PCIe port bus/PCIe port driver
此部分代码位于drivers/pci/pcie目录,提供PCIe高级功能服务,如Hotplug、AER、 DPC、 PME等功能。
- PCIe device driver
这部分主要是PCIe设备驱动,如PCIe 网卡设备( drivers/net/ethernet/),
PCIe NVME存储设备(drivers/nvme)等
PCI子系统文档介绍
PCI子系统文档结合上述PCI软件架构的介绍,能够助力上手PCI子系统知识学习
- 如何写一个linux PCI drviers
主要介绍了pci drviers结构, pci_register_driver注册流程,如何获取pci设备接口,
pci设备初始化流程,配置访问等。
1. How To Write Linux PCI Drivers1.1. Structure of PCI drivers1.2. pci_register_driver() call1.3. How to find PCI devices manually1.4. Device Initialization Steps1.5. PCI device shutdown1.6. How to access PCI config space1.7. Other interesting functions1.8. Miscellaneous hints1.9. Vendor and device identifications1.10. Obsolete functions1.11. MMIO Space and “Write Posting”
- PCIe port bus驱动指导
2. The PCI Express Port Bus Driver Guide HOWTO2.1. About this guide2.2. What is the PCI Express Port Bus Driver2.3. Why use the PCI Express Port Bus Driver?2.4. Configuring the PCI Express Port Bus Driver vs. Service Drivers2.5. Possible Resource Conflicts
- PCIe I/O虚拟化
针对PCIe虚拟化,主要涉及PCIe SR-IOV知识
3. PCI Express I/O Virtualization Howto3.1. Overview3.2. User Guide3.3. Developer Guide
- PCIe MSI中断
这部分主要涉及MSI中断知识点,并指导pci设备如何使用MSI中断申请接口。
4. The MSI Driver Guide HOWTO4.1. About this guide4.2. What are MSIs?4.3. Why use MSIs?4.4. How to use MSIs4.5. MSI quirks
- PCI sysfs文件
这部分涉及PCI sysfs文件接口,提供了remove,rescan,reset,resource等等文件提供给用户使用
5. Accessing PCI device resources through sysfs5.1. Accessing legacy resources through sysfs5.2. Supporting PCI access on new platforms
- PCI ACPI
PCI ACPI知识点及注意事项介绍
6. ACPI considerations for PCI host bridges
- PCI错误恢复
7. PCI Error Recovery7.1. Detailed Design
- PCIe AER
PCIe 高级错误处理
8. The PCI Express Advanced Error Reporting Driver Guide HOWTO8.1. Overview8.2. User Guide8.3. Developer Guide8.4. Software error injection
- PCIe EP模式框架处理
9. PCI Endpoint Framework9.1. Introduction9.2. PCI Endpoint Core9.3. Configuring PCI Endpoint Using CONFIGFS9.4. PCI Test Function9.5. PCI Test User Guide9.6. PCI NTB Function9.7. PCI Non-Transparent Bridge (NTB) Endpoint Function (EPF) User Guide9.8. PCI Test Endpoint Function9.9. PCI NTB Endpoint Function
- Boot Interrupts
10. Boot Interrupts10.1. Overview10.2. Issue10.3. Conditions10.4. Affected Chipsets10.5. Mitigations10.6. More Documentation
小结
linux pci子系统是linux重要基础子系统之一,如何掌握pci子系统知识,需要理解掌握PCIe 规范, linux pci 文档以及pci代码实现。本文对pci子系统做一个整体的概述,提供下学习指引。