网站301如何做/免费手机优化大师下载安装
Linux中Pci设备的枚举是个复杂的过程,本文对此过程作了较清楚的描述.
一:前言
Pci,是Peripheral Component Interconnect的缩写,翻译成中文即为外部设备互联.与传统的总线相比.它的传输速率较高.能为用户提供动态查询pci deivce.和局部总线信息的方法,此外,它还能自动为总线提供仲裁.在近几年的发展过程中,被广泛应用于多种平台.
pci协议比较复杂,关于它的详细说明,请查阅有关pci规范的资料,本文不会重复这些部份.
对于驱动工程师来说,Pci设备的枚举是pci设备驱动编写最复杂的操作。分析和理解这部份,是进行深入分析pci设备驱动架构的基础。
我们也顺便来研究一下,linux是怎么对这个庞然大物进行封装的。
二:pci架构概貌
上图展现了pci驱动架构中,pci_bus、pci_dev之间的关系。如上图所示,所有的根总线都链接在pci_root_buses链表中。 Pci_bus ->device链表链接着该总线下的所有设备。而pci_bus->children链表链接着它的下层总线。对于pci_dev来说。pci_dev->bus指向它所属的pci_bus。 Pci_dev->bus_list链接在它所属bus的device链表上。此外,所有pci设备都链接在pci_device链表中。
三:pci设备的配置空间
每个pci设备都有最多256个连续的配置空间。配置空间中包含了设备的厂商ID,设备ID,IRQ,设备存储区信息等.摘下LDD3中的一副说明图,如下: