一種實現(xiàn)移動存儲掛載的方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本申請涉及移動存儲技術(shù),尤指一種在Linux系統(tǒng)實現(xiàn)移動存儲掛載的方法及裝置。
【背景技術(shù)】
[0002]目前,Linux系統(tǒng)在工業(yè)方面已經(jīng)得到廣泛的應(yīng)用,自內(nèi)核2.6版本開始支持實時性后,軍方也考慮使用Linux系統(tǒng)來替代昂貴的實時操作系統(tǒng)VxWorks系統(tǒng)(美國WindRiver System公司(簡稱風(fēng)河公司)推出的一個實時操作系統(tǒng))。然而,Linux系統(tǒng)對于移動存儲,例如U盤、移動硬盤的支持仍不如Windows系統(tǒng)那樣完美,需要用戶進(jìn)行掛載操作。在Linux系統(tǒng)下通用的識別與掛載U盤、移動硬盤的方法是通過腳本或者C程序來實現(xiàn)的,其通用流程大致如下:首先,獲取USB熱插拔事件;然后,依據(jù)USB熱插拔事件判別移動存儲是否為存儲設(shè)備;接著,如果判別出移動存儲是存儲設(shè)備,且為插入事件,進(jìn)而獲取存儲設(shè)備的分區(qū)信息,查詢存儲設(shè)備分區(qū)文件系統(tǒng)類型,依據(jù)存儲設(shè)備分區(qū)的文件系統(tǒng),掛載存儲設(shè)備分區(qū)到指定的目錄,實現(xiàn)存儲設(shè)備的掛載;如果為拔出事件,則卸載存儲設(shè)備。
[0003]移動終端如手機(jī)終端作為隨身攜帶的通信設(shè)備,其一般擁有較大的存儲空間,除了用于安裝手機(jī)操作系統(tǒng)和應(yīng)用外,在實際使用過程中,剩余的存儲空間通常被用作虛擬存儲。手機(jī)還支持SD卡擴(kuò)容,當(dāng)手機(jī)終端通過USB連接到計算機(jī)設(shè)備時(例如PC),手機(jī)終端上的虛擬存儲和SD卡都相當(dāng)于一個U盤。對于不同的計算機(jī)設(shè)備的操作系統(tǒng),手機(jī)終端的接入模式是不同的,如Windows下要求選擇“U盤”模式,Linux下要求選擇“大容量存儲”模式;只有選擇了恰當(dāng)?shù)哪J剑嬎銠C(jī)操作系統(tǒng)才可以探測到設(shè)備的存儲空間,進(jìn)而獲取存儲設(shè)備分區(qū)信息,查詢存儲設(shè)備分區(qū)文件系統(tǒng)類型,實現(xiàn)掛載。然而,選擇模式有四五種之多,用戶只能通過多次嘗試,才可能實現(xiàn)手機(jī)在Linux系統(tǒng)上的掛載。
[0004]當(dāng)手機(jī)作為USB設(shè)備接入Linux系統(tǒng)中時,需要手工或者通過守護(hù)進(jìn)程來觸發(fā)上述的通用流程來完成掛載,才可以在Linux上正常使用手機(jī)上的虛擬存儲或者SD卡。然而在Linux上掛載手機(jī)終端的虛擬存儲或者SD卡,這個通用流程容易出現(xiàn)以下問題:
[0005]1、通用流程要求用戶在判別移動存儲是否為存儲設(shè)備且是否為插入事件前,完成“大容量存儲”模式的選擇。如果未完成“大容量存儲”模式的選擇,雖然Linux系統(tǒng)能識別到手機(jī)終端的存儲設(shè)備,但由于手機(jī)終端的存儲設(shè)備的驅(qū)動加載過程并未完成,無法識別存儲設(shè)備分區(qū)。
[0006]2、用戶在完成手機(jī)“大容量存儲”模式選擇下,Linux系統(tǒng)仍需要一段時間查詢到存儲設(shè)備分區(qū)文件系統(tǒng)類型,并在Linux系統(tǒng)內(nèi)核中對存儲設(shè)備及存儲設(shè)備分區(qū)文件系統(tǒng)類型等相關(guān)記錄進(jìn)行更新,更無法查詢出文件系統(tǒng)類型。
[0007]3、假如用戶在判別移動存儲是否為存儲設(shè)備且是否為插入事件之后,完成手機(jī)“大容量存儲”模式選擇;如果Linux系統(tǒng)不能識別存儲設(shè)備分區(qū)文件系統(tǒng)類型,就不會更新Linux系統(tǒng)內(nèi)核中存儲設(shè)備及存儲設(shè)備分區(qū)文件系統(tǒng)類型等相關(guān)記錄;除非用戶或者系統(tǒng)再次調(diào)用底層的接口查詢該存儲設(shè)備。
[0008]4、SD卡的熱插拔事件比較特殊,Linux系統(tǒng)不會自動給出存儲設(shè)備分區(qū)熱插拔事件,也就是說只給出SD卡作為移動存儲熱插拔事件,需要額外處理(例如:再次掛載或調(diào)用底層接口強(qiáng)行檢測)才能觸發(fā)系統(tǒng)給出存儲設(shè)備分區(qū)名相關(guān)的事件。
[0009]5、虛擬存儲空間的熱插拔事件也很特殊,系統(tǒng)根本就不會給出存儲設(shè)備分區(qū)名相關(guān)的事件。
[0010]6、在Linux下直接格式化未分區(qū)的U盤或移動硬盤,再重新插入也會出現(xiàn)系統(tǒng)不給出存儲設(shè)備分區(qū)名的情況。另外,在掛載過程中,Linux系統(tǒng)只會識別出存儲空間,而不會識別出存儲設(shè)備分區(qū),存儲空間無法實現(xiàn)掛載。
[0011]綜上,在Linux系統(tǒng)實現(xiàn)手機(jī)虛擬存儲及SD卡的掛載在實現(xiàn)上存在諸多問題,在Linux下直接格式化未分區(qū)的U盤或移動硬盤,在掛載上也存在問題,根據(jù)現(xiàn)有掛載的通用流程,用戶無法實現(xiàn)良好的掛載。
【發(fā)明內(nèi)容】
[0012]為了解決上述問題,本發(fā)明提供一種實現(xiàn)移動存儲掛載的方法及裝置,能夠解決Linux環(huán)境下,通用流程進(jìn)行移動存儲掛載存在的問題,實現(xiàn)對移動存儲的良好掛載。
[0013]為了達(dá)到本發(fā)明的目的,本申請?zhí)峁┮环N實現(xiàn)移動存儲掛載的方法;包括:
[0014]當(dāng)根據(jù)USB熱插拔事件判定移動存儲為存儲設(shè)備且為插入事件時,在預(yù)定時長內(nèi)周期性查詢存儲設(shè)備是否存在多媒體空間;
[0015]當(dāng)存在多媒體空間且多媒體空間存在存儲空間時,查詢存儲空間的文件系統(tǒng)類型;
[0016]根據(jù)查詢到的文件系統(tǒng)類型進(jìn)行移動存儲的掛載。
[0017]進(jìn)一步地,當(dāng)未查詢到所述存儲設(shè)備存在多媒體空間,該方法還包括:
[0018]創(chuàng)建新的線程,周期性查詢所述存儲設(shè)備是否存在多媒體空間,當(dāng)存在多媒體空間且多媒體空間存在存儲空間時,繼續(xù)執(zhí)行所述查詢存儲空間的文件系統(tǒng)類型。
[0019]進(jìn)一步地,查詢存儲空間的文件系統(tǒng)類型具體包括:
[0020]根據(jù)所述存儲空間的存儲空間名判斷是否為存儲設(shè)備分區(qū),
[0021]當(dāng)存儲空間為存儲設(shè)備分區(qū)時,根據(jù)存儲設(shè)備分區(qū)名查詢所述存儲空間的文件系統(tǒng)類型;
[0022]當(dāng)存儲空間不是存儲設(shè)備分區(qū)時,根據(jù)所述存儲空間名查詢所述存儲空間的文件系統(tǒng)類型。
[0023]進(jìn)一步地,當(dāng)存儲空間的文件系統(tǒng)類型是根據(jù)所述存儲設(shè)備分區(qū)名查詢獲得時,所述根據(jù)查詢到的文件系統(tǒng)類型進(jìn)行移動存儲的掛載具體包括:
[0024]根據(jù)查詢到的所述文件系統(tǒng)類型將存儲設(shè)備分區(qū)掛載到指定的目錄;
[0025]當(dāng)所述存儲空間的文件系統(tǒng)類型是根據(jù)存儲空間的存儲空間名查詢獲得,所述根據(jù)查詢到的文件系統(tǒng)類型進(jìn)行移動存儲的掛載具體包括:
[0026]根據(jù)查詢到的文件系統(tǒng)類型將存儲空間掛載到指定的目錄。
[0027]進(jìn)一步地,當(dāng)查詢不到存儲空間的文件系統(tǒng)類型時,該方法還包括:提示用戶進(jìn)行格式化處理;
[0028]進(jìn)行格式化處理:當(dāng)所述存儲空間為存儲設(shè)備分區(qū)時,根據(jù)外部指令格式化存儲設(shè)備分區(qū),繼續(xù)掛載存儲設(shè)備分區(qū)到指定的目錄;或,當(dāng)所述存儲空間不是存儲設(shè)備分區(qū)時,根據(jù)外部指令格式化所述存儲空間,繼續(xù)掛載存儲空間到指定的目錄。
[0029]進(jìn)一步地,當(dāng)根據(jù)USB熱插拔事件判定所述移動存儲為存儲設(shè)備且為卸載事件時,該方法還包括:卸載所述移動存儲;
[0030]當(dāng)根據(jù)所述USB熱插拔事件判定所述移動存儲不是存儲設(shè)備時,該方法還包括:結(jié)束掛載。
[0031]進(jìn)一步地,在完成移動存儲的掛載后,該方法還包括:串行的記錄移動存儲的掛載信息到預(yù)先設(shè)定的文件或共享內(nèi)存中,并進(jìn)行更新。
[0032]進(jìn)一步地,USB熱插拔事件為:由Linux系統(tǒng)內(nèi)核產(chǎn)生的、包含有設(shè)備路徑信息、設(shè)備名、存儲設(shè)備分區(qū)名、子系統(tǒng)信息的相應(yīng)的事件。
[0033]進(jìn)一步地,根據(jù)USB熱插拔事件判定移動存儲為存儲設(shè)備具體包括:根據(jù)USB熱插拔事件的所述移動存儲的設(shè)備路徑信息、子系統(tǒng)信息、存儲設(shè)備分區(qū)名和設(shè)備名與存儲設(shè)備的標(biāo)識參數(shù)進(jìn)行匹配獲得。
[0034]進(jìn)一步地,存儲空間為:可存放文件的硬件存儲體;
[0035]可存放文件的硬件存儲體為:可格式化或已被格式化的空間。
[0036]進(jìn)一步地,串行的記錄移動存儲的掛載信息到預(yù)先設(shè)定的文件或共享內(nèi)存中具體包括:
[0037]通過單線程方式來串行的記錄所述移動存儲的掛載信息到預(yù)先設(shè)定的文件或共享內(nèi)存中;或,
[0038]采用互斥鎖、讀寫鎖或信號量來實現(xiàn)多線程、和/或多進(jìn)程的串行的記錄所述移動存儲的掛載信息到預(yù)先設(shè)定的文件或共享內(nèi)存中。
[0039]進(jìn)一步地,掛載為:根據(jù)系統(tǒng)命令或者相對應(yīng)的API實現(xiàn)的所述移動存儲的掛載;
[0040]卸載為:根據(jù)系統(tǒng)命令或者相對應(yīng)的API實現(xiàn)的所述移動存儲的卸載。
[0041]另一方面,本申請還提供一種實現(xiàn)移動存儲掛載的裝置,包括:第一查詢單元、第二查詢單元和掛載單元;其中,
[0042]第一查詢單元,用于根據(jù)USB熱插拔事件判定的移動存儲為存儲設(shè)備且為插入事件,在預(yù)定時長內(nèi)周期性查詢存儲設(shè)備是否存在多媒體空間;
[0043]第二查詢單元,用于判定存在多媒體空間且多媒體空間存在存儲空間時,查詢存儲空間的文件系統(tǒng)類型;
[0044]掛載單元,用于根據(jù)查詢到的文件系統(tǒng)類型進(jìn)行移動存儲的掛載。
[0045]進(jìn)一步地,該裝置還包括第三查詢單元,為新創(chuàng)建的線程,用于在第一查詢單元未查詢到所述存儲設(shè)備存在多媒體空間時,周期性查詢所述存儲設(shè)備是否存在多媒體空間,當(dāng)存在多媒體空間且多媒體空間存在存儲空間時,調(diào)用第二查詢單元及掛載單元進(jìn)行掛載操作。