1、引盲
CPCI是1994年由PICMG提出來的一種高性能工業(yè)用總線。廣泛應(yīng)用于工業(yè)和嵌入式控制系統(tǒng)中。它在電氣,邏輯和軟件功能方面與PCI完全兼容。對(duì)熱插拔的支持是CPCI一個(gè)顯著的特點(diǎn),即當(dāng)系統(tǒng)正在運(yùn)行的時(shí)候進(jìn)行電路板的插入或拔出而不會(huì)導(dǎo)致系統(tǒng)硬件設(shè)備的損壞,也不會(huì)造成運(yùn)行中的軟件系統(tǒng)的混亂與崩潰。這滿足了對(duì)系統(tǒng)可靠性、穩(wěn)定性、容錯(cuò)性要求較高的行業(yè)如電信與數(shù)據(jù)通訊等的對(duì)設(shè)備的熱插拔要求,減少甚至避免停機(jī)時(shí)間。熱插拔的實(shí)現(xiàn)需要相關(guān)硬件與軟件的支持,本文主要介紹熱插拔軟件的設(shè)計(jì)與實(shí)現(xiàn)。
2、熱插拔的原理,
CPCI的熱插拔過程就是軟硬件交互的連接過程。包括物理連接、硬件連接、軟件連接。
物理連接就是CPCI板卡按照機(jī)械標(biāo)準(zhǔn),使長(zhǎng),中,短針依次與總線連接的過程,硬件連接是電器層的連接,即各種電信號(hào)的連接過程。在電器連接層中,與PCI區(qū)別的是CPCI增加一個(gè)ENUM#信號(hào),即系統(tǒng)枚舉信號(hào)。當(dāng)一個(gè)CPCI設(shè)備卡被插入或拔出時(shí),ENUM#被激活,熱插拔軟件通過該信號(hào),判斷熱插拔活動(dòng)。軟件連接過程是軟件層同系統(tǒng)的連接或斷離過程。對(duì)于板卡的插入,這一過程包括分配系統(tǒng)資源,如I/O空間、內(nèi)存空間、中斷線以及PCI總線號(hào)等,另外還對(duì)板卡的支持軟件如驅(qū)動(dòng)等進(jìn)行加載,使操作系統(tǒng)或其它應(yīng)用程序可以使用板卡。
根據(jù)系統(tǒng)要求的不同,熱插拔系統(tǒng)有三種模型:
基本熱插拔模型:最基本的熱插拔方式需要用戶干預(yù)。用戶通過控制臺(tái)通知OS(操作系統(tǒng))即將進(jìn)行設(shè)備卡插入或拔出。
完全熱插拔模型:完全熱插拔是在基本熱插拔模型的基礎(chǔ)上,在卡的插入/拔出機(jī)構(gòu)中添加一個(gè)微開關(guān)裝置。這個(gè)開關(guān)藏在手柄中。當(dāng)CPCI卡被插入或拔出時(shí),在卡開始或停止工作之前,微開關(guān)首先改變狀態(tài),產(chǎn)生ENUM#信號(hào),該信號(hào)通過某種途徑通知OS將要插入或拔出一個(gè)卡,OS再執(zhí)行總線枚舉、安裝驅(qū)動(dòng)程序或卸載驅(qū)動(dòng)程序等動(dòng)作。
高可用性模型:高可用性模型在完全熱插拔模型基礎(chǔ)上對(duì)板卡實(shí)行了更高程度的控制,而不僅僅是指示板卡的插入或可拔出的狀態(tài)。這種模型的軟件能夠控制板卡的硬件連接,這就使得軟件能對(duì)對(duì)發(fā)生故障的板卡立即進(jìn)行總線或電氣上的斷離,并啟用冗余板卡,滿足系統(tǒng)始終處于運(yùn)行狀態(tài)、幾乎沒有故障的高可用性目標(biāo)。
采用不同的熱插拔模式,系統(tǒng)的復(fù)雜程度和造價(jià)會(huì)有很大差別??筛鶕?jù)應(yīng)用要求的不同來選擇適當(dāng)?shù)哪J健1疚挠懻摰氖峭耆珶岵灏文J较聼岵灏伪O(jiān)控軟件的實(shí)現(xiàn)。
3、Windows下熱插拔監(jiān)控程序的實(shí)現(xiàn)
熱插拔技術(shù)實(shí)現(xiàn)的一個(gè)基本前提是要有設(shè)備驅(qū)動(dòng)程序和熱插拔驅(qū)動(dòng)程序的支持。從下面的熱插拔系統(tǒng)架構(gòu)圖中,我們可以看到熱插拔驅(qū)動(dòng)程序和設(shè)備驅(qū)動(dòng)程序及其它模塊在整個(gè)系統(tǒng)中的位置及相互關(guān)系。
設(shè)備驅(qū)動(dòng)程序和熱插拔驅(qū)動(dòng)程序位于操作系統(tǒng)下層,它們共同管理板卡設(shè)備(通過CPCI,總線),其中熱插拔驅(qū)動(dòng)程序管理設(shè)備的熱插拔事務(wù),而設(shè)備驅(qū)動(dòng)程序則對(duì)設(shè)備的正常使用進(jìn)行管理。熱插撥監(jiān)控程序(HSMonitor.EXE)通過對(duì)中間層(Hotplug.dll)的調(diào)用對(duì)以上兩者進(jìn)行管理。驅(qū)動(dòng)程序必須向操作系統(tǒng)提供一個(gè)接口,這樣熱插拔事件發(fā)生時(shí)操作系統(tǒng)就可以調(diào)用此接口通知驅(qū)動(dòng)程序接納或注銷一個(gè)設(shè)備。另外CPCI的應(yīng)用系統(tǒng)中往往有多個(gè)相同設(shè)備共存,這就要求在驅(qū)動(dòng)程序中提供對(duì)多設(shè)備的支持并滿足設(shè)備個(gè)數(shù)變化的要求。
熱插拔監(jiān)控軟件采用了分層的設(shè)計(jì)結(jié)構(gòu)。層次結(jié)構(gòu)如下:
3.1最底層是熱插拔驅(qū)動(dòng)程序hotswap,sys,它執(zhí)行與硬件相關(guān)的操作,如響應(yīng)熱插拔過程中ENUM#產(chǎn)生的中斷事件、對(duì)Hotswap寄存器的操作,包括控制LED指示、清除INS,EXT狀態(tài)位等,熱插拔驅(qū)動(dòng)實(shí)現(xiàn)關(guān)鍵是驅(qū)動(dòng)的初始化和中斷服務(wù)響應(yīng)函數(shù)。驅(qū)動(dòng)初始化過程中要實(shí)現(xiàn)ENUM#連接的中斷與系統(tǒng)地掛接。在硬件設(shè)計(jì)上,ENUM#信號(hào)連接到系統(tǒng)南橋的io_acpi上,系統(tǒng)E C工程師將中斷號(hào)、中斷優(yōu)先級(jí)、以及觸發(fā)方式等保存到系統(tǒng)BIOS的RAM區(qū),驅(qū)動(dòng)在初始化時(shí)讀取并進(jìn)行中斷配置。
熱插拔驅(qū)動(dòng)程序初始化代碼:
中斷服務(wù)程序及相關(guān)的函數(shù)的關(guān)鍵代碼:
3.2中間層:hotplug.dll
中間層主要是實(shí)現(xiàn)對(duì)訪問驅(qū)動(dòng)的封裝,方便監(jiān)控軟件調(diào)用。熱插拔驅(qū)動(dòng)采用動(dòng)態(tài)加載、卸載,主要導(dǎo)出如下如下函數(shù),供應(yīng)用程序調(diào)用。
3.3上層;監(jiān)控應(yīng)用軟件HSMonitor.exe,它是GUI圖形界面程序,提供熱插報(bào)過程
的一些動(dòng)態(tài)信息,同時(shí)他還控制應(yīng)用程序的啟動(dòng)與關(guān)閉。在應(yīng)用層,還完成插人設(shè)備時(shí)設(shè)備驅(qū)動(dòng)的安裝;拔除設(shè)備時(shí)設(shè)備驅(qū)動(dòng)程序的卸載工作。
關(guān)鍵的代碼是設(shè)備驅(qū)動(dòng)的卸載與安裝。
安裝的代碼主要工作是調(diào)用PNP設(shè)備管理器搜索新設(shè)備。當(dāng)PNP設(shè)備管理器發(fā)現(xiàn)新設(shè)備后,調(diào)用設(shè)備驅(qū)動(dòng)程序的協(xié)同安裝程序,完成設(shè)備驅(qū)動(dòng)的安裝。代碼如下:
卸載驅(qū)動(dòng),當(dāng)熱插拔驅(qū)動(dòng)收到設(shè)備拔出請(qǐng)求時(shí),他會(huì)將請(qǐng)求發(fā)送給熱插拔監(jiān)控軟件。當(dāng)熱插監(jiān)控軟件收到通知后,首先控制占用該設(shè)備資源的應(yīng)用程序退出,釋放占用的資源。然后通過中間層的(hotplug.d11)
控制驅(qū)動(dòng)程序卸載。主要代碼如下:
CPCI的完全熱插撥方式對(duì)用戶操作步驟有限制:用戶需要在扳動(dòng)板卡上的微動(dòng)開關(guān)后等待LED指示燈點(diǎn)亮再繼續(xù)操作。如果用戶不遵循操作規(guī)范,可能造成該板的某些狀態(tài)不穩(wěn)定,系統(tǒng)死機(jī)、藍(lán)屏等。因此要求用戶嚴(yán)格規(guī)范操作。
這里,只討論了完壘熱插拔的監(jiān)控軟件的實(shí)現(xiàn)。對(duì)于更復(fù)雜的高可用熱插拔,由干涉及的信號(hào)更多,而且有板間切換、工作狀態(tài)檢測(cè)等處理,需要在驅(qū)動(dòng)中增加內(nèi)容。完全熱插拔的大部分思想在實(shí)現(xiàn)高可用熱插拔時(shí)是可以沿用的。
結(jié)束語
當(dāng)前,越來越多的企業(yè)將嵌入式系統(tǒng)放進(jìn)關(guān)鍵任務(wù)應(yīng)用系統(tǒng)中,以提高可擴(kuò)充性和可靠性,本文所設(shè)計(jì)的熱插拔監(jiān)控軟件已經(jīng)成功地應(yīng)用到鐵路系統(tǒng)監(jiān)測(cè)設(shè)備中,給現(xiàn)場(chǎng)設(shè)備的維護(hù)帶來了極大的方便。