基于Linux實現(xiàn)PCIE設(shè)備熱插拔的方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通信技術(shù)領(lǐng)域,具體涉及基于Linux實現(xiàn)PCIE設(shè)備熱插拔的方法及裝置。
【背景技術(shù)】
[0002]隨著處理器技術(shù)的發(fā)展,對外部設(shè)備的訪問速率和可靠性要求越來越高,目前,PCIE接口成為了處理器普遍支持的接口之一,PCIE的熱插拔技術(shù)包含了支持熱插拔的系統(tǒng)硬件和系統(tǒng)軟件,在硬件方面需要有熱插拔控制器、接口卡電源開關(guān)邏輯線、接口卡復(fù)位線、提不按鈕(Attent1n Button)、指不器(Power Indicator/Attent1n Indicator)和接口卡檢測腳(PRSNT1#、PRSNT2#信號)等,在軟件方面需要系統(tǒng)支持熱插拔的操作,能對設(shè)備的插拔作出相應(yīng)的響應(yīng)。
[0003]當要移除接口卡的時候,需要預(yù)先通知系統(tǒng),包括兩種方式,通過提示按鈕或軟件程序的“用戶界面”來實現(xiàn),當按下按鈕或操作軟件程序的“用戶界面”時,熱插拔控制器獲得該信息,并向PCIE控制器發(fā)出中斷信號,系統(tǒng)進行處理,中止驅(qū)動程序,關(guān)閉插槽電源,釋放接口卡所分配的系統(tǒng)資源等,當系統(tǒng)處理完成后,就會控制指示燈來指示操作者可以移除接口卡。
[0004]當要插入接口卡的時候,熱插拔控制器根據(jù)接口卡檢測管腳獲得該信息,向PCIE控制器發(fā)出中斷信號,系統(tǒng)進行處理,使能接口卡電源,掃描接口卡的PCIE設(shè)備,分配系統(tǒng)資源,加載驅(qū)動等。
[0005]雖然PCIE設(shè)備具有熱插拔功能,但是不同的處理器和系統(tǒng)對PCIE設(shè)備的熱插拔功能支持不同,例如對于PowerPc處理器,只能在Linux系統(tǒng)啟動過程中對整個PCIE控制器下的設(shè)備進行掃描時,對PowerPc處理器下掛的PCIE設(shè)備進行掃描,并分配地址空間,在Linux系統(tǒng)啟動后,無法單獨對PowerPc處理器下掛的PCIE設(shè)備進行掃描,并分配地址空間。
[0006]具體地,在Linux系統(tǒng)掃描PCIE設(shè)備的過程中,對于總線號的分配采用自上而下的順序分配,但是對于地址空間的分配采用自下而上的順序分配,如圖1所示,圖1為PCIE設(shè)備外設(shè)的結(jié)構(gòu)圖,由PCIE控制器、PCIE SWITCH和PCIE設(shè)備組成,其中,PCIE控制器的總線號為0,PCIE SWITCH有一個上行口和四個下行口,在Linux系統(tǒng)掃描PCIE設(shè)備過程中,分配總線號由上往下依次分配,即PCIE SWITCH的上行口總線號為1,四個下行口的總線號為2,四個下行口下掛的四個PCIE設(shè)備的總線號從左往右依次為3、4、5、6,而地址空間的分配則由下往上依次分配,首先會訪問四個PCIE設(shè)備來確定四個PCIE設(shè)備所需地址空間的大小,然后通過四個PCIE設(shè)備所需地址空間的大小來決定PCIE SWITCH的四個下行口所需地址空間的大小,最終通過PCIE SWITCH的四個下行口所需地址空間的大小來決定PCIE控制器給PCIE SWITCH的上行口分配的地址空間的大小。
[0007]由上可知,PowerPc處理器無法在Linux系統(tǒng)啟動后實現(xiàn)PCIE設(shè)備熱插拔功能。
【發(fā)明內(nèi)容】
[0008]本發(fā)明所要解決的技術(shù)問題是解決PowerPc處理器無法在Linux系統(tǒng)啟動后實現(xiàn)PCIE設(shè)備熱插拔功能的問題。
[0009]為了解決上述技術(shù)問題,本發(fā)明所采用的技術(shù)方案是提供一種基于Linux實現(xiàn)PCIE設(shè)備熱插拔的方法,包括以下步驟:
[0010]Linux系統(tǒng)啟動后,運行應(yīng)用程序,加載具有掃描PCIE設(shè)備功能的驅(qū)動,初始化PCIE SWITCH,預(yù)先為PCIE SWITCH的每個下行口分配地址空間,然后掃描母卡上的FPGA ;
[0011]創(chuàng)建線程,通過輪詢FPGA的寄存器檢測到PCIE插槽有子卡插入后,為插入的子卡供電;
[0012]掃描插入的子卡,通過訪問插入的子卡的配置空間來獲取其所需地址空間,并為其分配地址空間;
[0013]加載插入的子卡的驅(qū)動,啟動訪問插入的子卡的程序,通過輪詢FPGA的寄存器檢測到PCIE插槽有子卡被拔出后,退出訪問程序,并卸載拔出的子卡的驅(qū)動,通過訪問FPGA的寄存器為相應(yīng)的PCIE插槽斷電。
[0014]在上述技術(shù)方案中,在所述PCIE插槽斷電后,所述Linux系統(tǒng)刪除相應(yīng)的子卡的總線號,同時釋放相應(yīng)的地址空間。
[0015]在上述技術(shù)方案中,所述PCIE設(shè)備包括所述母卡和所述子卡。
[0016]本發(fā)明還提供了一種基于Linux實現(xiàn)PCIE設(shè)備熱插拔的裝置,包括:
[0017]PCIE SWITCH分配地址模塊,預(yù)先為PCIE SWITCH的每個下行口分配地址空間;
[0018]檢測PCIE設(shè)備插入模塊,通過輪詢母卡上的FPGA的寄存器來檢測PCIE插槽中子卡的插入;
[0019]PCIE設(shè)備供電模塊,檢測到子卡插入時,Linux系統(tǒng)通過訪問FPGA的寄存器為插入的子卡供電;
[0020]掃描PCIE設(shè)備模塊,掃描插入的子卡,通過訪問插入的子卡的配置空間,獲取插入的子卡所需地址空間,并為其分配地址空間;
[0021]加載PCIE設(shè)備驅(qū)動模塊,加載插入的子卡的驅(qū)動;
[0022]檢測PCIE設(shè)備拔出模塊,通過輪詢FPGA的寄存器來檢測PCIE插槽的狀態(tài),判斷插入的子卡是否被拔出;
[0023]卸載PCIE設(shè)備驅(qū)動模塊,在檢測到PCIE插槽有子卡被拔出后,退出訪問拔出的子卡程序,并卸載拔出的子卡的驅(qū)動;
[0024]PCIE設(shè)備斷電模塊,卸載完拔出的子卡的驅(qū)動后,Linux系統(tǒng)通過訪問FPGA的寄存器為相應(yīng)的PCIE插槽斷電。
[0025]在上述技術(shù)方案中,還包括刪除PCIE設(shè)備模塊,在所述PCIE插槽斷電后,所述Linux系統(tǒng)刪除相應(yīng)的子卡的總線號,同時釋放相應(yīng)的地址空間。
[0026]在上述技術(shù)方案中,所述PCIE設(shè)備包括所述母卡和所述子卡,所述FPGA連接所述PCIE SWITCH的第一下行口,兩個所述子卡分別通過兩個所述PCIE插槽連接所述PCIESWITCH的第二下行口和第三下行口,同時,兩個所述子卡分別通過兩個所述PCIE插槽與所述母卡相連。
[0027]本發(fā)明,在Linux系統(tǒng)啟動后,預(yù)先為PCIE SWITCH的每個下行口分配地址空間,在每次掃描插入的PCIE設(shè)備并為其分配地址空間時,由于PCIE SWITCH的下行口已有地址空間,可以直接為插入的PCIE設(shè)備分配地址空間,不需要將整個PCIE控制器下的設(shè)備重新掃描一次,避免了對正在訪問插入的PCIE設(shè)備的程序產(chǎn)生影響,實現(xiàn)了 PCIE設(shè)備的熱插拔功能。
【附圖說明】
[0028]圖1為本發(fā)明實施例提供的PCIE設(shè)備外設(shè)的結(jié)構(gòu)圖;
[0029]圖2為本發(fā)明實施例提供的PCIE設(shè)備的熱插拔示意圖;
[0030]圖3為本發(fā)明實施例提供的基于Linux實現(xiàn)PCIE設(shè)備熱插拔的裝置結(jié)構(gòu)圖;
[0031]圖4為本發(fā)明實施例提供的基于Linux實現(xiàn)PCIE設(shè)備熱插拔的方法流程圖。
【具體實施方式】
[0032]下面結(jié)合說明書附圖和【具體實施方式】對本發(fā)明做出詳細的說明。
[0033]本發(fā)明實施例提供了一種基于Linux實現(xiàn)PCIE設(shè)備熱插拔的裝置,本實施例針對其中一種應(yīng)用場景進行說明,本實施例中處理器為FreeScale的P2020處理器,操作系統(tǒng)為Linux系統(tǒng),本發(fā)明提供的PCIE設(shè)備的熱插拔示意圖如圖2所示,PCIE控制器(P2020處理器)通過PCIE SWITCH進行擴展,PCIE設(shè)備分為一個母卡和兩個子卡,母卡上設(shè)有FPGA,F(xiàn)PGA連接PCIE SWITCH的第一下行口,兩個PCIE插槽分別連接第二下行口和第三下行口,第四下行口未使用,并且兩個子卡分別通過PCIE插槽與母卡相連。PCIE插槽還與其它的控制信號線連接,這些控制信號線由FPGA控制,主要用來檢測PCIE插槽的狀態(tài),以及控制子卡的電源。
[0034]同時,為實現(xiàn)PCIE設(shè)備可隨時插拔功能,對PCIE設(shè)備和處理器也有相關(guān)要求。與標準PCIE設(shè)備的熱插拔相比較,本裝置在拔掉子卡時,無需先按按鈕或操作應(yīng)用程序的“用戶界面”,可以直接拔掉子卡。在拔掉子卡時,訪問子卡的程序并不會立即退出,還會繼續(xù)訪