说明:

  1. Kernel版本:4.14
  2. ARM64处理器
  3. 使用工具:Source Insight 3.5, Visio

1. 概述

从本文开始,将会针对PCIe专题来展开,涉及的内容包括:

  1. PCI/PCIe总线硬件;
  2. Linux PCI驱动核心框架;
  3. Linux PCI Host控制器驱动;

不排除会包含PCIe外设驱动模块,一切随缘。

作为专题的第一篇,当然会先从硬件总线入手。进入主题前,先讲点背景知识。在PC时代,随着处理器的发展,经历了几代I/O总线的发展,解决的问题都是CPU主频提升与外部设备访问速度的问题:

  1. 第一代总线包含ISA、EISA、VESA和Micro Channel等;
  2. 第二代总线包含PCI、AGP、PCI-X等;
  3. 第三代总线包含PCIe、mPCIe、m.2等;

PCIe(PCI Express)是目前PC和嵌入式系统中最常用的高速总线,PCIe在PCI的基础上发展而来,在软件上PCIe与PCI是后向兼容的,PCI的系统软件可以用在PCIe系统中。

本文会分两部分展开,先介绍PCI总线,然后再介绍PCIe总线,方便在理解上的过渡,开始旅程吧。

2. PCI Local Bus

2.1 PCI总线组成