PCI资源遍历方法及系统技术方案

技术编号:8131020 阅读:203 留言:0更新日期:2012-12-27 03:10
一种PCI资源遍历方法,包括:根据存储于内核系统的PCI数据结构获取PCI主总线的数据信息,并将该PCI主总线置为当前PCI总线;扫描当前PCI总线下的所有PCI设备;记录所有PCI设备,将PCI设备所处PCI总线的位置的相关信息记录于一个单一的数据结构体中;判断PCI设备中是否有桥接设备,当PCI设备中有桥接设备时,则判断是否所有桥接设备上均未连接下行总线,当桥接设备上连接有下行总线时,逐一获得所有桥接设备上所连接的下行总线,并将所有下行总线逐一置为当前PCI总线。本发明专利技术还提供一种PCI资源遍历系统。本发明专利技术可以快速实现PCI资源的遍历,能安全可靠地节省计算机的资源。

【技术实现步骤摘要】
PCI资源遍历方法及系统
本专利技术涉及一种PCI资源遍历方法及系统。
技术介绍
PCI,全称为PeripheralComponentInterconnect,外设部件互连标准,是一种用于定义局部总线的标准。对于服务器和存储系统,PCI总线占据其中大部份的资源,是生产制造中非常重要的测试重点之一。测试中最需要做到的就是要保证操作系统中PCI总线的完整,所以如何获取操作系统所有PCI总线资源是关键。通常的遍历方法就是扫描操作系统中所有可能的bus,以及每个bus下所有可能的device和每个device下所有可能的function,这样进行一次操作系统完整的PCI资源的遍历需要扫描256*32*8次。这种遍历方式虽然可以保证不漏掉任何PCI设备,但是因为进行了许多不存在的PCIbus和device的扫描而导致产生扫描次数过多的问题,这种过多的扫描次数致使整个遍历的时间过长,从而造成时间的浪费。后有稍改进的方式,由于操作系统中的设备是有限的,通常用不到255个bus,所以仅扫描0到10的bus,以及每个bus下所有可能的device和每个device下所有可能的function。或者根据PCI设备的类别先扫描出操作系统中所有存在的PCIbus,然后再扫描每个bus下所有可能的device和每个device下所有可能的function。举个例子,如果扫描到操作系统中存在的PCIbus分别是0、3、5、9共四条,那么用这种方式进行的扫描次数是4*32*8。这种遍历方式相对来说减少了整体的扫描次数,但是仍然进行了一些不存在的PCIbus和device的扫描,依然存在一定程度上的时间浪费。在linux系统中,系统提供了利用第三方工具如lspci工具的功能来遍历所有的PCI资源。也可以通过解析linux操作系统中的系统文件来遍历PCI资源。这两种方式虽然遍历的次数最少,没有浪费时间去扫描不存在的PCI设备,但是它存在不稳定因素。当反复读写PCI的系统文件的时候,如果达到一定的压力测试程度,有的PCI设备的配置空间的某些数据有时候读不到。而且,lspci工具不仅具有遍历的功能,同时也有其它一些可能用不到的功能,所以也存在资源的浪费。这对于对测试系统大小有严格要求的工厂测试模式来说,是个不好的选择。
技术实现思路
鉴于以上内容,有必要提供一种PCI资源遍历方法,能够快速实现PCI设备的遍历,减少不必要的资源浪费。鉴于以上内容,还有必要提供一种PCI资源遍历系统,能够快速实现PCI设备的遍历,减少不必要的资源浪费。所述PCI资源遍历方法,应用于PCI设备的遍历,该方法包括以下步骤:获取步骤一:根据存储于内核系统的PCI数据结构获取PCI主总线的数据信息,并将该PCI主总线置为当前PCI总线,该PCI主总线的数据信息即PCI数据结构中pci_root指向的PCI总线的数据结构pci_bus的数据信息;扫描步骤:扫描当前PCI总线下的所有PCI设备;记录步骤:记录所有PCI设备,将PCI设备所处PCI总线的位置的相关信息记录于一个单一的数据结构体中;判断步骤一:判断PCI设备中是否有桥接设备,当PCI设备中有桥接设备时,则执行判断步骤二,否则,直接结束流程;判断步骤二:判断是否所有桥接设备上均未连接下行总线,根据桥接设备的pci_dev是否有连接pci_bus中的self变量来判断桥接设备上是否连接有下行总线,当所有桥接设备上均未连接下行总线时,则直接结束流程,否则,执行获取步骤二,所述pci_dev是PCI数据结构中PCI设备的数据结构;获取步骤二:逐一获得所有桥接设备上所连接的下行总线,并将所有下行总线逐一置为当前PCI总线,返回扫描步骤,直至所有下行总线扫描完毕,所述下行总线根据连接桥接设备的pci_dev的self变量所在的pci_bus来得到。所述PCI资源遍历系统,运行于计算机中,该系统包括:获取模块一,用于根据存储于内核系统的PCI数据结构获取PCI主总线的数据信息,并将该PCI主总线置为当前PCI总线,该PCI主总线的数据信息即PCI数据结构中pci_root指向的PCI总线的数据结构pci_bus的数据信息;扫描模块,用于扫描当前PCI总线下的所有PCI设备;记录模块,用于记录所有PCI设备,将PCI设备所处PCI总线的位置的相关信息记录于一个单一的数据结构体中;判断模块一,用于判断PCI设备中是否有桥接设备;判断模块二,用于当PCI设备中有桥接设备时,判断是否所有桥接设备上均未连接下行总线,根据桥接设备的pci_dev是否有连接pci_bus中的self变量来判断桥接设备上是否连接有下行总线,所述pci_dev是PCI数据结构中PCI设备的数据结构;获取模块二,用于当桥接设备上连接有下行总线时,逐一获得所有桥接设备上所连接的下行总线,并逐一将下行总线置为当前PCI总线,所述下行总线根据连接pci_dev的self变量所在的pci_bus来得到。相较于现有技术,所述的PCI资源遍历方法及系统,能够快速实现PCI设备的遍历,减少不必要的资源浪费,能安全可靠地节省计算机的资源。附图说明图1是本专利技术PCI资源遍历系统较佳实施例的架构图。图2是本专利技术PCI资源遍历方法较佳实施例的流程图。图3是本专利技术较佳实施例的PCI资源的拓扑结构图。图4是本专利技术较佳实施例的内核中PCI资源的数据结构图。图5是本专利技术较佳实施例中Linux系统应用层调用内核中资源过程示意图。主要元件符号说明计算机10PCI资源遍历系统20获取模块一200扫描模块201记录模块202判断模块一203判断模块二204获取模块二205编辑模块206如下具体实施方式将结合上述附图进一步说明本专利技术。具体实施方式如图1所示,是本专利技术PCI资源遍历系统较佳实施例的架构图。PCI资源遍历系统20运行于计算机10中。所述PCI资源遍历系统20包括获取模块一200、扫描模块201、记录模块202、判断模块一203、判断模块二204、获取模块二205及编辑模块206。PCI资源中包含PCI总线及PCI设备。PCI主总线有一个,一般是bus0。PCI资源的拓扑结构是由PCI主总线、连接在PCI主总线上的PCI设备、桥接设备上的次PCI总线以及连接在次PCI总线上的PCI设备构成。该PCI主总线与次PCI总线可连接的PCI设备的范围为0至31,其中,该PCI设备可以为桥接卡(即桥接设备)、网络卡、声卡或显示卡等。PCI资源的拓扑结构中次PCI总线亦可以通过桥接设备再连接次PCI总线。如图3所示的本专利技术较佳实施例的PCI资源的拓扑结构图。在CPU上连接有PCI主总线bus0,bus0上连接有PCI设备device1及桥接设备bridge1、bridge2,通过桥接设备bridge1,次PCI总线bus1与PCI主总线连接,次PCI总线bus1上连接有PCI设备device1、device2。在linux内核启动过程中,内核会首先搜寻操作系统中所有PCI资源,然后根据PCI设备和PCI总线的连接关系,将搜寻的所有PCI资源存储于内核的PCI数据结构中,形成一个多层次存储的树形链表结构。当内核启动完成后,这个PCI数据结构仍然存在于内核系统中。如图4所示,为对应图3中PCI资本文档来自技高网
...
PCI资源遍历方法及系统

【技术保护点】
一种PCI资源遍历方法,其特征在于,该方法包括步骤:获取步骤一:根据存储于内核系统的PCI数据结构获取PCI主总线的数据信息,并将该PCI主总线置为当前PCI总线,该PCI主总线的数据信息即PCI数据结构中pci_root指向的PCI总线的数据结构pci_bus的数据信息;扫描步骤:扫描当前PCI总线下的所有PCI设备;记录步骤:记录所有PCI设备,将PCI设备所处PCI总线的位置的相关信息记录于一个单一的数据结构体中;判断步骤一:判断PCI设备中是否有桥接设备,当PCI设备中有桥接设备时,则执行判断步骤二,否则,直接结束流程;判断步骤二:判断是否所有桥接设备上均未连接下行总线,根据桥接设备的pci_dev是否有连接pci_bus中的self变量来判断桥接设备上是否连接有下行总线,当所有桥接设备上均未连接下行总线时,则直接结束流程,否则,执行获取步骤二,所述pci_dev是PCI数据结构中PCI设备的数据结构;获取步骤二:逐一获得所有桥接设备上所连接的下行总线,并将所有下行总线逐一置为当前PCI总线,返回扫描步骤,直至所有下行总线扫描完毕,所述下行总线根据连接桥接设备的pci_dev的self变量所在的pci_bus来得到。...

【技术特征摘要】
1.一种PCI资源遍历方法,其特征在于,该方法包括步骤:获取步骤一:根据存储于内核系统的PCI数据结构获取PCI主总线的数据信息,并将该PCI主总线置为当前PCI总线,该PCI主总线的数据信息即PCI数据结构中pci_root指向的PCI总线的数据结构pci_bus的数据信息;扫描步骤:扫描当前PCI总线下的所有PCI设备;记录步骤:记录所有PCI设备,将PCI设备所处PCI总线的位置的相关信息记录于一个单一的数据结构体中;判断步骤一:判断PCI设备中是否有桥接设备,当PCI设备中有桥接设备时,则执行判断步骤二,否则,直接结束流程;判断步骤二:判断是否所有桥接设备上均未连接下行总线,根据桥接设备的pci_dev是否有连接pci_bus中的self变量来判断桥接设备上是否连接有下行总线,当所有桥接设备上均未连接下行总线时,则直接结束流程,否则,执行获取步骤二,所述pci_dev是PCI数据结构中PCI设备的数据结构;获取步骤二:逐一获得所有桥接设备上所连接的下行总线,并将所有下行总线逐一置为当前PCI总线,返回扫描步骤,直至所有下行总线扫描完毕,所述下行总线根据连接桥接设备的pci_dev的self变量所在的pci_bus来得到,所述扫描步骤是通过扫描PCI数据结构中当前pci_bus中的devices变量来扫描所有PCI设备,该devices变量指向PCI总线上所连接的PCI设备。2.如权利要求1所述的PCI资源遍历方法,其特征在于,该方法还包括:编辑...

【专利技术属性】
技术研发人员:童钰
申请(专利权)人:鸿富锦精密工业深圳有限公司鸿海精密工业股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1