PCI设备扫描

来源:互联网 发布:ubuntu 微信调试工具 编辑:程序博客网 时间:2024/05/01 13:37

本博文为原创,转载请注明出处 http://blog.csdn.net/lux_veritas/article/details/8288174

PCI总线在设备的组织上呈现树状结构。pci总线以北桥的HOST-PCI视为它的根,其它与PCI相连的设备或桥都是作总线的子节点,由于pci总线支持pci桥,这棵树可以一直向下生长


典型的PCI总线结构。

每一个PCI设备,都由一个16位的标识符来表示,该标志符由一个总线号、一个设备号和一个功能号组成。总线号是设备所在总线的编号,PCI规范每个系统最多255个总线。设备号是在一条总线上的唯一标识编号,一条总线上最多挂32个设备。所以,这个16位的标识符构成如下:

8~15bit:总线号,3~7bit:设备号,0~2bit:功能号。

程序员通过设置PCI设备的配置寄存器与PCI设备交互,具体的PCI设备配置空间不在这里详述。

PCI设备的扫描过程:

PCI设备的扫描在系统加电自检阶段完成,IA-32架构主要由BIOS程序负责PCI设备的扫描以及配置寄存器的设置,BIOS向上提供PCI设备枚举接口给OS调用。

PCI设备以及PCI桥(包括PCI-PCI桥、PCI-ISA桥)构成了一个完整的树状结构,以HOST-PCI桥(特殊的PCI-PCI桥)作为树的根节点,与它相连的设备作为叶子节点,与它相连的桥作为它的子树并向下生长下去。由此可见,整个设备的枚举过程,实际上是对PCI桥执行递归调用,若为叶节点做标记,若为子树继续执行枚举算法。

PCI-PCI桥主要有三个属性:

1.Primary Bus:表示该桥所属的根总线

2.Secondary Bus:表示以该桥为根的总线号

3.Subordinate Bus:表示以该桥为根的子树中的最高总线号


以该图为例,“PCI-PCI桥1”的Primary Bus为0,Secondary Bus为1,Subordinate Bus为2。

PCI设备的扫描过程为,从HOST-PCI桥开始,首先探测总线0上的设备,探测到桥设备时,再探测以其为根的所有设备及桥。重复执行以上动作,直至全部设备被扫描出来。



原创粉丝点击