国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種適用于Linux嵌入式系統(tǒng)的熱插拔處理方法

      文檔序號(hào):6374755閱讀:242來(lái)源:國(guó)知局
      專利名稱:一種適用于Linux嵌入式系統(tǒng)的熱插拔處理方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及Linux嵌入式系統(tǒng)技術(shù)領(lǐng)域,尤其涉及一種適用于Linux嵌入式系統(tǒng)的熱插拔處理方法。
      背景技術(shù)
      熱插拔(Hot swapping或Hot plugging)即“帶電插拔”,指可以在電腦運(yùn)作時(shí)插上或拔除硬件。配合適當(dāng)?shù)能浖?,便可以在不用關(guān)閉電源,不關(guān)閉系統(tǒng)的情況下插入或拔除支援熱插拔的周邊裝置,不會(huì)導(dǎo)致主機(jī)或周邊裝置燒毀并且能夠即時(shí)偵測(cè)及使用新的裝置。這個(gè)過(guò)程可以是取出或者更換損壞的硬盤、電源或者板卡等部件,從而提高了系統(tǒng)的擴(kuò)展性、靈活性以及對(duì)災(zāi)難的及時(shí)恢復(fù)能力。
      Linux系統(tǒng)支持熱插拔功能,在歷史上發(fā)生了很大的變化,這里簡(jiǎn)介當(dāng)前使用的處
      理方案。當(dāng)前Linux熱插拔系統(tǒng),分為內(nèi)核驅(qū)動(dòng)和用戶空間應(yīng)用程序,當(dāng)插入新的硬件時(shí),Linux內(nèi)核會(huì)產(chǎn)生一個(gè)熱插拔信息,具體為硬件的位置信息即DEVPATH,所屬的子系統(tǒng)信息即SUBSYSTEM,動(dòng)作信息即ACTION等,根據(jù)這些字段,可以通過(guò)查看sysfs文件系統(tǒng)獲取到插入或拔出的硬件的詳細(xì)信息。內(nèi)核通過(guò)2個(gè)方法通知應(yīng)用層空間的進(jìn)程。一個(gè)方法為把標(biāo)識(shí)熱插拔的字符信息設(shè)置成環(huán)境變量,然后執(zhí)行/proc/sys/kernel/hotplug文件指定的應(yīng)用層程序,具體熱插拔方案把熱插拔處理入口程序的名稱寫入/proc/sys/kernel/hotplug文件,應(yīng)用層程序可以從環(huán)境變量中得知熱插拔消息。另一個(gè)方法為內(nèi)核通過(guò)一個(gè)稱為NETLINK的socket (套接字)廣播一條熱插拔信息,該信息為字符串,消息的內(nèi)容包括了硬件的位置即DEVPATH、所屬的子系統(tǒng)即SUBSYSTEM字段、動(dòng)作即ACTION字段等,根據(jù)這些字段,可以通過(guò)查看sysfs文件系統(tǒng)獲取到插入或拔出的硬件的詳細(xì)信息;用戶空間的熱插拔處理程序可建立一個(gè)PF_NETLINK類型的socket接收這些消息,然后進(jìn)行處理。當(dāng)前PC上使用UDEV軟件包處理熱插拔事件,這個(gè)軟件包相當(dāng)完善,可配配置性很好,很靈活,但是太大了,需要用到SHELL腳本,并不適合在對(duì)資源要求很苛刻的嵌入式系統(tǒng)中。在Linux嵌入式系統(tǒng)中,普遍配置的SHELL工具busybox有一個(gè)MDEV的熱插拔處理系統(tǒng),該系統(tǒng)是UDEV的簡(jiǎn)化版,但還是比較大,配置不靈活?!愕那度胧綗岵灏未椒ǘ际侵苯舆M(jìn)行編程,即直接寫一個(gè)程序,程序名寫入/proc/sys/kernel/hotplug文件,或直接建立PF_NETLINK類型的socket接收熱插拔消息,收到特定的消息即進(jìn)行特定的處理,但是這會(huì)導(dǎo)致很多問(wèn)題,具體有采用/proc/sys/kernel/hotplug方法時(shí),熱插拔處理不能太久,否則會(huì)阻塞內(nèi)核驅(qū)動(dòng)程序的進(jìn)一步工作,采用監(jiān)聽socket方式時(shí),會(huì)出現(xiàn)丟失事件等問(wèn)題,并且這種簡(jiǎn)單的方法不夠靈活,不便于處理不同的硬件
      發(fā)明內(nèi)容
      本發(fā)明的目的在于提供一種適用于Linux嵌入式系統(tǒng)的熱插拔處理方法,有較強(qiáng)的通用性和靈活性,且比較簡(jiǎn)單。本發(fā)明的目的是通過(guò)以下技術(shù)方案實(shí)現(xiàn)的。一種適用于Linux嵌入式系統(tǒng)的熱插拔處理方法,包括步驟
      設(shè)置熱插拔配置文件,用于配置需要處理的熱插拔事件信息及其相應(yīng)的處理動(dòng)作; 監(jiān)聽Linux的Netlink套接字發(fā)來(lái)的熱插拔事件;
      在監(jiān)聽到新的熱插拔事件時(shí),通過(guò)查詢Linux的sysfs文件系統(tǒng)獲取該熱插拔事件的信息,并據(jù)此查詢熱插拔配置文件以判斷該熱插拔事件是否需要處理,如需要?jiǎng)t建立一個(gè)子進(jìn)程進(jìn)行處理,并且按先后順序串行地處理各熱插拔事件。上述方法中還包括設(shè)置一個(gè)先進(jìn)先出隊(duì)列,用于緩存待處理的熱插拔事件;所 述先進(jìn)先出隊(duì)列的元素為一個(gè)事件描述符,記錄從Netlink套接字收到的所有字符串,包括硬件的位置信息、所屬的子系統(tǒng)信息、動(dòng)作信息、處理該熱插拔事件的進(jìn)程號(hào)、處理該熱插拔事件的方法、處理該熱插拔事件的時(shí)長(zhǎng)。上述方法中,所述熱插拔配置文件中由至少一個(gè)條目組成,所述條目包括索引、處理方法和處理時(shí)長(zhǎng);所述索引為所述事件描述符中記錄的硬件的位置信息、所屬的子系統(tǒng)
      信息、動(dòng)作信息。上述方法中,對(duì)各熱插拔事件按先后順序串行地處理的過(guò)程為
      在監(jiān)聽到新的熱插拔事件時(shí),判斷所述先進(jìn)先出隊(duì)列長(zhǎng)度是否超過(guò)設(shè)定值;若未超過(guò)設(shè)定值,則判斷該熱插拔事件是否需要處理,如需要處理,則從所述熱插拔配置文件中獲取處理該熱插拔事件的方法及時(shí)長(zhǎng),建立一個(gè)事件描述符記錄該內(nèi)容,并插入到先進(jìn)先出隊(duì)列排隊(duì)等候處理;若超過(guò)設(shè)定值,則丟棄當(dāng)前監(jiān)聽到的熱插拔事件,返回監(jiān)聽狀態(tài);
      判斷所述先進(jìn)先出隊(duì)列是否為空,若不為空,則處理先進(jìn)先出隊(duì)列的尾元素。上述方法中,判斷當(dāng)前的熱插拔事件是否需要處理的方法為
      以當(dāng)前的熱插拔事件的硬件的位置信息、所屬的子系統(tǒng)信息和/或動(dòng)作信息的內(nèi)容為索引,查找所述熱插拔配置文件,若有匹配的記錄,則該熱插拔事件需要處理,否則不需要處理。上述方法中,還包括監(jiān)聽熱插拔處理進(jìn)程退出事件;在監(jiān)聽到熱插拔處理進(jìn)程退出事件時(shí),刪除所述先進(jìn)先出隊(duì)列的尾元素;
      判斷所述先進(jìn)先出隊(duì)列是否為空,若不為空,則處理先進(jìn)先出隊(duì)列的尾元素。上述方法中,還包括監(jiān)聽熱插拔處理進(jìn)程超時(shí)事件;在監(jiān)聽到熱插拔處理進(jìn)程超時(shí)事件時(shí),從所述先進(jìn)先出隊(duì)列的尾元素中獲取該事件的處理進(jìn)程,殺死該處理進(jìn)程,之后刪除先進(jìn)先出隊(duì)列的尾元素;
      判斷所述先進(jìn)先出隊(duì)列是否為空,若不為空,則處理先進(jìn)先出隊(duì)列的尾元素。與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例具有以下有益效果占用空間小,適合資源受限的嵌入式系統(tǒng)使用;適應(yīng)性、可重用性、可擴(kuò)展性強(qiáng),可以滿足嵌入式系統(tǒng)應(yīng)用環(huán)境多變,外設(shè)多樣化的需求;穩(wěn)定性強(qiáng),單個(gè)設(shè)備的熱插拔處理程序崩潰不會(huì)影響整個(gè)熱插拔系統(tǒng)。


      圖I是本發(fā)明實(shí)施例中適用于Linux嵌入式系統(tǒng)的熱插拔處理方法流程圖。
      具體實(shí)施例方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。本發(fā)明的核心思想為建立一個(gè)熱插拔后臺(tái)進(jìn)程,用于監(jiān)聽和處理Linux的Netlink套接字發(fā)來(lái)的熱插拔事件,并配置一熱插拔配置文件,用于配置需要進(jìn)行處理的具體熱插拔事件的處理動(dòng)作;對(duì)于所監(jiān)聽到的熱插拔事件,通過(guò)查詢Linux的sysfs文件系統(tǒng)獲取熱插拔事件的細(xì)節(jié),根據(jù)熱插拔配置文件判斷每一個(gè)熱插拔事件是否需要處理,如需要?jiǎng)t建立一個(gè)子進(jìn)程進(jìn)行處理,并且各事件按先后順序串行地處理。本發(fā)明中,需設(shè)置一個(gè)FIFO (先進(jìn)先出)隊(duì)列,用于緩存待處理的熱插拔事件,其中FIFO隊(duì)列的元素為一個(gè)事件描述符,包括從Netlink套接字收到的所有字符串,DEVPATH,SUBSYSTEM和ACTION部分的內(nèi)容,處理該事件的進(jìn)程號(hào),處理該事件的方法,處理該事件的時(shí)長(zhǎng)。 判斷每一個(gè)熱插拔事件是否需要處理的方法如下設(shè)置一個(gè)熱插拔配置文件,用于配置具體熱插拔事件的處理動(dòng)作,文件由多個(gè)條目組成,條目包括索引,處理方法和處理時(shí)長(zhǎng),索引為所述的事件記錄的DEVPATH, SUBSYSTEM, ACTION內(nèi)容,處理方法為一個(gè)處理函數(shù),或一個(gè)外部命令,對(duì)于一個(gè)熱插拔事件,用其DEVPATH, SUBSYSTEM, ACTION的內(nèi)容作為索引,查找上述配置文件,有匹配的記錄,則事件需要處理。請(qǐng)參閱圖1,本實(shí)施例中適用于Linux嵌入式系統(tǒng)的熱插拔處理方法包括以下步驟。101、等待熱插拔事件、熱插拔處理進(jìn)程退出事件和熱插拔處理進(jìn)程超時(shí)事件。如收到熱插拔事件跳到步驟102,如收到熱插拔處理進(jìn)程退出事件跳到105,如收到熱插拔處理進(jìn)程超時(shí)事件跳到步驟104。102、判斷FIFO隊(duì)列長(zhǎng)度是否超過(guò)設(shè)定值,如超過(guò),即緩沖區(qū)滿,則丟棄當(dāng)前監(jiān)聽到的熱插拔事件,跳到步驟101,重新回到監(jiān)聽狀態(tài);若未超過(guò),則繼續(xù)執(zhí)行步驟103。103、判斷當(dāng)前接收到的熱插拔事件是否需要處理,如不需要跳到步驟101,如需要?jiǎng)t從所述的配置文件中獲取該事件的處理方法和處理時(shí)長(zhǎng),建立一個(gè)事件描述符記錄該內(nèi)容,并插入到FIFO隊(duì)列中等候處理,然后跳到步驟106。104、從FIFO隊(duì)列的尾元素中獲取該事件的處理進(jìn)程,然后殺死該進(jìn)程。105、刪除FIFO隊(duì)列的尾元素。106、查看FIFO隊(duì)列是否為空,如為空跳到步驟101,否則建立一個(gè)新進(jìn)程處理該事件,原進(jìn)程跳到步驟101。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
      權(quán)利要求
      1.一種適用于Linux嵌入式系統(tǒng)的熱插拔處理方法,其特征在于,該方法包括步驟 設(shè)置熱插拔配置文件,用于配置需要處理的熱插拔事件信息及其相應(yīng)的處理動(dòng)作; 監(jiān)聽Linux的Netlink套接字發(fā)來(lái)的熱插拔事件; 在監(jiān)聽到新的熱插拔事件時(shí),通過(guò)查詢Linux的sysfs文件系統(tǒng)獲取該熱插拔事件的信息,并據(jù)此查詢熱插拔配置文件以判斷該熱插拔事件是否需要處理,如需要?jiǎng)t建立一個(gè)子進(jìn)程進(jìn)行處理,并且按先后順序串行地處理各熱插拔事件。
      2.如權(quán)利要求I所述適用于Linux嵌入式系統(tǒng)的熱插拔處理方法,其特征在于,該方法中還包括設(shè)置一個(gè)先進(jìn)先出隊(duì)列,用于緩存待處理的熱插拔事件;所述先進(jìn)先出隊(duì)列的元素為一個(gè)事件描述符,記錄從Netlink套接字收到的所有字符串,包括硬件的位置信息、所屬的子系統(tǒng)信息、動(dòng)作信息、處理該熱插拔事件的進(jìn)程號(hào)、處理該熱插拔事件的方法、處理該熱插拔事件的時(shí)長(zhǎng)。
      3.如權(quán)利要求2所述適用于Linux嵌入式系統(tǒng)的熱插拔處理方法,其特征在于,所述熱插拔配置文件中由至少一個(gè)條目組成,所述條目包括索引、處理方法和處理時(shí)長(zhǎng);所述索引為所述事件描述符中記錄的硬件的位置信息、所屬的子系統(tǒng)信息、動(dòng)作信息。
      4.如權(quán)利要求3所述適用于Linux嵌入式系統(tǒng)的熱插拔處理方法,其特征在于,該方法中,對(duì)各熱插拔事件按先后順序串行地處理的過(guò)程為 在監(jiān)聽到新的熱插拔事件時(shí),判斷所述先進(jìn)先出隊(duì)列長(zhǎng)度是否超過(guò)設(shè)定值;若未超過(guò)設(shè)定值,則判斷該熱插拔事件是否需要處理,如需要處理,則從所述熱插拔配置文件中獲取處理該熱插拔事件的方法及時(shí)長(zhǎng),建立一個(gè)事件描述符記錄該內(nèi)容,并插入到先進(jìn)先出隊(duì)列排隊(duì)等候處理;若超過(guò)設(shè)定值,則丟棄當(dāng)前監(jiān)聽到的熱插拔事件,返回監(jiān)聽狀態(tài); 判斷所述先進(jìn)先出隊(duì)列是否為空,若不為空,則處理先進(jìn)先出隊(duì)列的尾元素。
      5.如權(quán)利要求4所述適用于Linux嵌入式系統(tǒng)的熱插拔處理方法,其特征在于,該方法中,判斷當(dāng)前的熱插拔事件是否需要處理的方法為 以當(dāng)前的熱插拔事件的硬件的位置信息、所屬的子系統(tǒng)信息和/或動(dòng)作信息的內(nèi)容為索引,查找所述熱插拔配置文件,若有匹配的記錄,則該熱插拔事件需要處理,否則不需要處理。
      6.如權(quán)利要求2所述適用于Linux嵌入式系統(tǒng)的熱插拔處理方法,其特征在于,該方法中還包括 監(jiān)聽熱插拔處理進(jìn)程退出事件;在監(jiān)聽到熱插拔處理進(jìn)程退出事件時(shí),刪除所述先進(jìn)先出隊(duì)列的尾元素; 判斷所述先進(jìn)先出隊(duì)列是否為空,若不為空,則處理先進(jìn)先出隊(duì)列的尾元素。
      7.如權(quán)利要求2所述適用于Linux嵌入式系統(tǒng)的熱插拔處理方法,其特征在于,該方法中還包括 監(jiān)聽熱插拔處理進(jìn)程超時(shí)事件;在監(jiān)聽到熱插拔處理進(jìn)程超時(shí)事件時(shí),從所述先進(jìn)先出隊(duì)列的尾元素中獲取該事件的處理進(jìn)程,殺死該處理進(jìn)程,之后刪除先進(jìn)先出隊(duì)列的尾元素; 判斷所述先進(jìn)先出隊(duì)列是否為空,若不為空,則處理先進(jìn)先出隊(duì)列的尾元素。
      全文摘要
      本發(fā)明提供了一種適用于Linux嵌入式系統(tǒng)的熱插拔處理方法,包括步驟設(shè)置熱插拔配置文件,用于配置需要處理的熱插拔事件信息及其相應(yīng)的處理動(dòng)作;監(jiān)聽熱插拔事件;在監(jiān)聽到新的熱插拔事件時(shí),通過(guò)查詢Linux的sysfs文件系統(tǒng)獲取該熱插拔事件的信息,并據(jù)此查詢熱插拔配置文件以判斷該熱插拔事件是否需要處理,如需要?jiǎng)t建立一個(gè)子進(jìn)程進(jìn)行處理,并且按先后順序串行地處理各熱插拔事件。與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例占用空間小,適合資源受限的嵌入式系統(tǒng)使用;適應(yīng)性、可重用性、可擴(kuò)展性強(qiáng),滿足嵌入式系統(tǒng)應(yīng)用環(huán)境多變,外設(shè)多樣化的需求;穩(wěn)定性強(qiáng),單個(gè)設(shè)備的熱插拔處理程序崩潰不會(huì)影響整個(gè)熱插拔系統(tǒng)。
      文檔編號(hào)G06F9/44GK102830970SQ201210283879
      公開日2012年12月19日 申請(qǐng)日期2012年8月10日 優(yōu)先權(quán)日2012年8月10日
      發(fā)明者申常扳, 王金桂 申請(qǐng)人:深圳市共進(jìn)電子股份有限公司
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1