一種在非事件驅(qū)動(dòng)方式的os中實(shí)現(xiàn)對(duì)設(shè)備的熱插拔的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種在非事件驅(qū)動(dòng)方式的0S中實(shí)現(xiàn)對(duì)設(shè)備的熱插拔的方法。
【背景技術(shù)】
[0002]AV(Aud1 and Visual)設(shè)備中,有的可以和個(gè)人電腦組合使用,還有的可以通過(guò)網(wǎng)絡(luò)進(jìn)行音頻數(shù)據(jù)和視頻數(shù)據(jù)的輸入輸出。和這樣的AV設(shè)備連接的個(gè)人電腦中通常使用的是多任務(wù)方式的0S。
[0003]而在Microsoft Windows (注冊(cè)商標(biāo))等事件驅(qū)動(dòng)方式的OS中,用戶應(yīng)用程序是這樣構(gòu)成的,它在從0S接收到系統(tǒng)信息后,執(zhí)行啟動(dòng)、結(jié)束、繪制圖形等相應(yīng)的處理。因此,在事件驅(qū)動(dòng)方式的0S中,USB (Universal Serial Bus通用串行總線〉的連接等熱插拔事件也必須由用戶應(yīng)用程序從0S接受系統(tǒng)信息后,才可以執(zhí)行必要的處理。
[0004]然而,在Linux (注冊(cè)商標(biāo))等非事件驅(qū)動(dòng)方式的0S中,沒(méi)有準(zhǔn)備事件驅(qū)動(dòng)方式的0S中的系統(tǒng)信息。因此,用戶應(yīng)用程序?yàn)榱瞬蹲綗岵灏问录?,必須不斷進(jìn)行輪詢。S卩,如日本專利特開2002 - 300176號(hào)公報(bào)中所公開的內(nèi)容,用戶應(yīng)用程序間隔固定時(shí)間對(duì)總線進(jìn)行監(jiān)測(cè),一旦發(fā)生熱插拔事件,立即運(yùn)行相應(yīng)的處理。
[0005]圖1表示這種通過(guò)輪詢方式處理熱插拔事件的概要。以下說(shuō)明中所述的熱插拔處理,是指將大容量存儲(chǔ)設(shè)備通過(guò)USB連接于安裝有Linus Kernel 2.4 (注冊(cè)商標(biāo))的個(gè)人電腦的情況。
[0006]即,在Linux (注冊(cè)商標(biāo))的內(nèi)核空間KERNEL中,備有USB核心驅(qū)動(dòng)程序usbcore和用于USB大容量存儲(chǔ)的類驅(qū)動(dòng)程序usb-storage。此外,在用戶空間USER中,備有熱插拔hotplug以及USB腳本usb-storage。當(dāng)USB大容量存儲(chǔ)設(shè)備連接到個(gè)人電腦上時(shí),如圖1中a所示,通過(guò)延長(zhǎng)在內(nèi)核空間中備有的核心驅(qū)動(dòng)程序usbcore的探查函數(shù)probe的處理,調(diào)出熱插拔腳本此時(shí),設(shè)定各種環(huán)境變量,執(zhí)行熱插拔腳本hotplug。
[0007]這種情況下,表示與USB設(shè)備連接的值被設(shè)定于部分環(huán)境變量。然后如圖1中b所示,熱插拔腳本hotplug運(yùn)行觸發(fā)其執(zhí)行的事件所對(duì)應(yīng)的腳本。此時(shí),按照?qǐng)D1中3設(shè)定的環(huán)境變量執(zhí)行USB腳本usb.agent.接著,USB腳本usb.agent裝入觸發(fā)其執(zhí)行的事件所對(duì)應(yīng)的類驅(qū)動(dòng)程序,這里如圖1中c所示,裝入U(xiǎn)SB大容量存儲(chǔ)設(shè)備的類驅(qū)動(dòng)程序usb-storage。然后如圖1中d所示,USB核心驅(qū)動(dòng)程序執(zhí)行更新虛擬文件/proc/bus/usb/devices的內(nèi)容等一系列處理。
[0008]因此,用戶應(yīng)用程序只要通過(guò)輪詢,監(jiān)視虛擬文件/proc/bus/usb/devices,便可以在將大容量存儲(chǔ)設(shè)備進(jìn)行USB連接時(shí),使用該大容量存儲(chǔ)設(shè)備。但現(xiàn)行的Linux (注冊(cè)商標(biāo))的熱插拔處理只能在該類驅(qū)動(dòng)程序動(dòng)態(tài)嵌入時(shí)使用。
[0009]然而如上所述,在通過(guò)輪詢捕捉熱插拔事件時(shí),如果縮短輪詢的時(shí)間間隔,則系統(tǒng)的負(fù)擔(dān)就會(huì)增大。但如果相反將輪詢間隔延長(zhǎng),在熱插拔事件發(fā)生之后到執(zhí)行處理之前會(huì)發(fā)生時(shí)間延遲。
[0010]這個(gè)問(wèn)題通過(guò)采用高速CPU可在一定程度上避免或減輕,但這時(shí)需要的CPU價(jià)格十分高昂。此外,當(dāng)AV設(shè)備等的系統(tǒng)控制電路是由微型計(jì)算機(jī)構(gòu)成時(shí),整體中的CPU價(jià)格也很重要,如果價(jià)格昂貴,即便速度快也無(wú)法采用。
【發(fā)明內(nèi)容】
[0011]為解決上述現(xiàn)有的缺點(diǎn),本發(fā)明的主要目的在于提供一種實(shí)用的在非事件驅(qū)動(dòng)方式的0S中實(shí)現(xiàn)對(duì)設(shè)備的熱插拔的方法,減輕系統(tǒng)負(fù)擔(dān),控制系統(tǒng)成本上升。
[0012]為達(dá)成以上所述的目的,本發(fā)明的一種在非事件驅(qū)動(dòng)方式的0S中實(shí)現(xiàn)對(duì)設(shè)備的熱插拔的方法采取如下技術(shù)方案:
一種在非事件驅(qū)動(dòng)方式的0S中實(shí)現(xiàn)對(duì)設(shè)備的熱插拔的方法,其特征在于,在出現(xiàn)設(shè)備安裝或拆卸時(shí),通過(guò)內(nèi)核的核心驅(qū)動(dòng)程序調(diào)用熱插拔腳本,所述熱插拔腳本在進(jìn)行所述調(diào)用之后,執(zhí)行該熱插拔腳本本身描述的特定處理,然后調(diào)用掛鉤程序,所述掛鉤程序在被調(diào)用后,運(yùn)行熱插拔管理程序,獲取所述設(shè)備安裝或拆卸的相關(guān)信息,所述熱插拔管理程序中,熱插拔端口監(jiān)督程序利用所述掛鉤程序運(yùn)行,接受所述熱插拔腳本環(huán)境變量中包含的信息,熱插拔庫(kù)從所述熱插拔端口監(jiān)督程序獲取所述信息,API提供給用戶應(yīng)用程序,所述內(nèi)核是Linux (注冊(cè)商標(biāo))的內(nèi)核。
[0013]具備當(dāng)出現(xiàn)設(shè)備安裝或拆卸時(shí)、通過(guò)內(nèi)核的核心驅(qū)動(dòng)程序調(diào)用并執(zhí)行本身所描述的特定處理的熱插拔腳本,由該熱插拔腳本最后的處理調(diào)用的掛鉤程序;以及由該掛鉤程序運(yùn)行、并將所述設(shè)備安裝拆卸的相關(guān)信息提供給用戶應(yīng)用程序的熱插拔管理程序,所述熱插拔管理程序包含熱插拔端口監(jiān)督程序及熱插拔庫(kù),所述熱插拔端口監(jiān)督程序由所述掛鉤程序調(diào)用,并接受熱插拔腳本環(huán)境變量中包含的信息,所述熱插拔庫(kù)從該熱插拔端口監(jiān)督程序獲取所述信息,并將API提供給用戶應(yīng)用程序。
[0014]采用如上技術(shù)方案的本發(fā)明,具有如下有益效果:
本發(fā)明減輕系統(tǒng)負(fù)擔(dān),控制系統(tǒng)成本上升。
[0015]
【附圖說(shuō)明】
[0016]圖1是表示以往的設(shè)備管理方法及管理系統(tǒng)的方框圖。
[0017]圖2是表示本發(fā)明所述的設(shè)備管理方法及管理系統(tǒng)的方框圖。
【具體實(shí)施方式】
[0018]為了進(jìn)一步說(shuō)明本發(fā)明,下面結(jié)合附圖進(jìn)一步進(jìn)行說(shuō)明:
如圖1所示,在目前使用的Linux (注冊(cè)商標(biāo))中,當(dāng)將USB (universal serial bus)設(shè)備熱插拔連接時(shí),無(wú)論連接的是什么設(shè)備,一旦USB大容量存儲(chǔ)設(shè)備連接到個(gè)人電腦上,則如圖1中3所示,是通過(guò)延長(zhǎng)內(nèi)核空間KERENEL中準(zhǔn)備的核心驅(qū)動(dòng)程序usbcore中探查函數(shù)probe的處理,調(diào)用熱插拔腳本hotplug。
[0019]本發(fā)明著眼于這一點(diǎn),利用熱插拔腳本hotplug實(shí)現(xiàn)熱插拔處理。以下,參照?qǐng)D2說(shuō)明在裝入kernel2.4Linux (注冊(cè)商標(biāo))的個(gè)人電腦上、將大容量存儲(chǔ)設(shè)備USB連接時(shí)的熱插拔處理。
[0020]本發(fā)明與上述圖1中所示的系統(tǒng)一樣,在Linux (注冊(cè)商標(biāo))的內(nèi)核空間中,備有USB核心驅(qū)動(dòng)程序usbcore以及用于USB大容量存儲(chǔ)的類驅(qū)動(dòng)程序usb-storage,在用戶空間USER中有熱插拔腳本hotplug以及USB腳本use.agent。
[0021]此外,在用戶空間USER中,不僅設(shè)有掛鉤程序hooker,并且設(shè)有構(gòu)成熱插拔管理程序pnpmanager的熱插拔端口監(jiān)督程序pnomger以及熱插拔庫(kù)libpnpmgr。
[0022]此時(shí)由于掛鉤程序hooker是由熱插拔腳本hotplug執(zhí)行,因此在熱插拔腳本hotplug的最后,追加用于調(diào)用掛鉤程序hooker的代碼。此外,掛鉤程序pnpmanager的信息隊(duì)列,將環(huán)境變量傳遞給該熱插拔管理程序pnpmanager。
[0023]進(jìn)而,熱插拔端口監(jiān)督程序pnpmgr依據(jù)來(lái)自程序的信息,收集設(shè)備信息,并依據(jù)需要,將事件通知給熱插拔庫(kù)libnpmgr。熱插拔庫(kù)libpnpmgr將API (Applicat1n ProgramInterface)提供給用戶應(yīng)用程序。
[0024]API提供的功能中包含登記或解除事件等待的功能。