一種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_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資源遍歷方法,其特征在于,該方法還包括:編輯...
【專利技術屬性】
技術研發人員:童鈺,
申請(專利權)人:鴻富錦精密工業深圳有限公司,鴻海精密工業股份有限公司,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。