总线---
是一种传输信号的信道;由电气接口和编程接口组成。
体系结构----
系统的各个部分通过pci总线和pci-pci桥连接在一起。cpu和ram通过pci桥连接到pci总线0(即主pci总线),而具有pci接口的显卡直接连接到主pci总线上。pci-pci桥是一个特殊的pci设备,它负责将pci总线0和pci总线1连接在一起。
pci设备寻址----
每个pci设备由一个总线号,一个设备号,和一个功能号确定。pci规范允许一个系统最多拥有256条总线,每条总线最多带32个设备,但每个设备可以是最多8个功能的多功能板
/proc/iomem描述了系统中所有的设备I/O在内存地址空间上的映射。我们来看地址从1G开始的第一个设备在/proc/iomem中是如何描述的:
40000000-400003ff:0000:00:1f.1
这是一个pci设备,40000000-400003ff是它所映射的内存空间地址,占据了内存地址空间1024 bytes的位置。0000:00:1f,1是pci外设的地址,第一个16位表示域,第二个8位表示一个总线号,第三个5位表示一个设备号,最后3位,表示功能号。
lspci ------查看系统中的pci设备。
配置寄存器---
每个pci设备都有一组固定格式的寄存器,即配置寄存器,配置寄存器由linux内核中的pci初始化代码与驱动程序共同使用。内核在启动时负责对配置寄存器进行初始化,包括设置中断号以及I/O基址等。
00H---01H vendor id 制造商标识
02H---03H device id 设备标识
04H---05H command 命令寄存器
06H---07H status 状态寄存器
08H revision id 版本识别号寄存器
09H ----0bH class code 分类代码寄存器
0cH cache line size cache 行长度寄存器
0dH latency timer 主设备延迟时间寄存器
0eH header type 头标类型寄存器
0fH built-in-test-register自测试寄存器
10H---13H base address register 0 基地址寄存器0-------记录此设备使用的I/O与内存空间的位置。
14H---17H base address register 1 基地址寄存器1
18H---1bH base address register 2 基地址寄存器2
1cH---19H base address register 3 基地址寄存器3
30H----33H expasion rom base address扩展rom基地址
34H----3bH---------保留
3cH interrupt line 中断线寄存器-----记录此设备使用的中断号
3dH interrupt pin 中断引脚寄存器------记录pci设备使用的引脚号----为0不支持中断,非0支持中断。
3eH min_gnt 最小授权寄存器
3fH max_lat 最大延迟寄存器