專利名稱:嵌入式系統(tǒng)及其中的文件系統(tǒng)的倒換方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信領(lǐng)域,具體而言,涉及一種嵌入式系統(tǒng)及其中的文件系統(tǒng)的倒換方法。
背景技術(shù):
嵌入式系統(tǒng)通常由以下幾個(gè)部分組成嵌入式系統(tǒng)硬件、嵌入式操作系統(tǒng)、以及基于該操作系統(tǒng)的應(yīng)用軟件。其中嵌入式操作系統(tǒng)是一個(gè)非常重要的部分,其直接決定了嵌入式系統(tǒng)所使用的應(yīng)用軟件以及文件系統(tǒng)的類型。目前,已經(jīng)有多種不同類型的操作系統(tǒng)為這種需求提供了支持,比如VxWorks、各種版本的嵌入式Linux、Windows CE、PalmOS、 Symbian 等。在實(shí)際應(yīng)用中,嵌入式系統(tǒng)經(jīng)常需要在多種操作系統(tǒng)之間進(jìn)行切換。比如從 Vxfforks切換到嵌入式Linux,或者從嵌入式Linux切換到VxWorks,通常將前者稱為操作系統(tǒng)升級(jí)(簡(jiǎn)稱“升級(jí)”),將后者稱為操作系統(tǒng)回滾(簡(jiǎn)稱“回滾”)。通常情況下,應(yīng)用系統(tǒng)除了操作系統(tǒng)以外,還有許多系統(tǒng)配置文件、應(yīng)用程序存儲(chǔ)在磁盤(pán)或者閃存中(以下簡(jiǎn)稱“存儲(chǔ)設(shè)備”),該存儲(chǔ)設(shè)備通常被格式化為某種文件系統(tǒng),用于組織和存儲(chǔ)嵌入式系統(tǒng)所需要的諸多文件。因此,在操作系統(tǒng)升級(jí)和回滾的過(guò)程中,如何實(shí)現(xiàn)文件系統(tǒng)的穩(wěn)定倒換,是系統(tǒng)升級(jí)需要考慮的重要因素。一般有以下幾個(gè)方面的重要因素需要考慮(1)升級(jí)和回滾時(shí),不同的操作系統(tǒng)所支持的文件系統(tǒng)各不相同。比如,VxWorks 支持的文件系統(tǒng)為T(mén)FFS文件系統(tǒng),而嵌入式Linux支持的文件系統(tǒng)為JFFS2。因此,升級(jí)和回滾時(shí)需要保證所存儲(chǔ)的文件的完整性和兼容性,使文件不因操作系統(tǒng)的改變而發(fā)生改變,避免出現(xiàn)文件內(nèi)容被修改甚至文件不可見(jiàn)的情況;(2)升級(jí)失敗時(shí),需要進(jìn)行系統(tǒng)回滾?;貪L之后,需要保證升級(jí)之前所存儲(chǔ)的文件的完整性,即實(shí)現(xiàn)系統(tǒng)升級(jí)的可靠性,使系統(tǒng)不因升級(jí)失敗而丟失或者損傷文件;(3)回滾失敗時(shí),需要回退到升級(jí)后的狀態(tài)。同樣需要保證返回到升級(jí)后的狀態(tài)之后的文件的完整性,實(shí)現(xiàn)可靠回退。綜上,文件系統(tǒng)的倒換應(yīng)該使以上因素得以充分考慮。目前,經(jīng)常被使用的文件系統(tǒng)倒換方法是以人工的方式進(jìn)行倒換,具體為首先,將所需要的文件通過(guò)FTP或者TFTP下載到本地,然后,切換系統(tǒng),在對(duì)存儲(chǔ)設(shè)備格式化后,再將之前下載到本地的文件上傳至存儲(chǔ)設(shè)備,之后啟動(dòng)系統(tǒng),完成文件系統(tǒng)的倒換。可以看出,上述方法由于以人工的方式進(jìn)行倒換,因此比較浪費(fèi)人力,無(wú)法實(shí)現(xiàn)文件系統(tǒng)倒換的自動(dòng)化。尤其在文件系統(tǒng)目錄結(jié)構(gòu)復(fù)雜的情況下,使用這種方法進(jìn)行倒換,不但極大地增加了用戶的工作量,并且難以保證倒換后文件目錄結(jié)構(gòu)的完整性。
發(fā)明內(nèi)容
本發(fā)明的主要目的在于提供一種嵌入式系統(tǒng)及其中的文件系統(tǒng)的倒換方法,以至少解決上述的比較浪費(fèi)人力,無(wú)法實(shí)現(xiàn)文件系統(tǒng)倒換的自動(dòng)化的問(wèn)題。根據(jù)本發(fā)明的一個(gè)方面,提供了一種嵌入式系統(tǒng)中的文件系統(tǒng)的倒換方法,包括 嵌入式系統(tǒng)將第一文件系統(tǒng)中的文件打包至內(nèi)存;打包成功后,嵌入式系統(tǒng)將第一文件系統(tǒng)格式化為第二文件系統(tǒng);格式化成功后,嵌入式系統(tǒng)將內(nèi)存中的打包文件解包至第二文件系統(tǒng)。
進(jìn)一步地,第一文件系統(tǒng)為非并發(fā)文件系統(tǒng);將第一文件系統(tǒng)中的文件打包至內(nèi)存包括在內(nèi)存中創(chuàng)建打包文件;采用串行化的操作方式依次讀取第一文件系統(tǒng)的文件中的數(shù)據(jù)并將讀取的數(shù)據(jù)寫(xiě)入打包文件,直至第一文件系統(tǒng)中的所有文件中的數(shù)據(jù)均已寫(xiě)入到打包文件中。進(jìn)一步地,將內(nèi)存中的打包文件解包至第二文件系統(tǒng)包括采用串行的操作方式依次讀取打包文件中的數(shù)據(jù)并將讀取的數(shù)據(jù)寫(xiě)入第二文件系統(tǒng)的對(duì)應(yīng)文件中,直至打包文件中的所有數(shù)據(jù)均已解包至第二文件系統(tǒng)中。進(jìn)一步地,在上述的方法中,還包括若打包失敗,則嵌入式系統(tǒng)判斷打包失敗的次數(shù)是否超過(guò)打包失敗次數(shù)閾值;若未超過(guò),則嵌入式系統(tǒng)繼續(xù)執(zhí)行將第一文件系統(tǒng)中的文件打包至內(nèi)存的步驟,否則,結(jié)束流程。進(jìn)一步地,在上述的方法中,還包括若格式化失敗,則嵌入式系統(tǒng)將文件系統(tǒng)重新格式化為第一文件系統(tǒng);嵌入式系統(tǒng)將內(nèi)存中的打包文件解包至第一文件系統(tǒng)。進(jìn)一步地,在嵌入式系統(tǒng)將內(nèi)存中的打包文件解包至第二文件系統(tǒng)之后,還包括 若解包失敗,則嵌入式系統(tǒng)判斷解包失敗的次數(shù)是否超過(guò)解包失敗次數(shù)閾值;若未超過(guò), 則嵌入式系統(tǒng)繼續(xù)執(zhí)行將內(nèi)存中的打包文件解包至第二文件系統(tǒng)的步驟;若超過(guò),則嵌入式系統(tǒng)將文件系統(tǒng)重新格式化為第一文件系統(tǒng),并將內(nèi)存中的打包文件解包至第一文件系統(tǒng)。根據(jù)本發(fā)明的另一方面,提供了一種嵌入式系統(tǒng),包括打包模塊,用于將第一文件系統(tǒng)中的文件打包至內(nèi)存;格式化模塊,用于在打包成功后,將第一文件系統(tǒng)格式化為第二文件系統(tǒng);解包模塊,用于在格式化成功后,將內(nèi)存中的打包文件解包至第二文件系統(tǒng)。進(jìn)一步地,還包括接口模塊,用于為第一文件系統(tǒng)、第二文件系統(tǒng)與打包模塊、解包模塊之間的通信提供接口,其中,上述接口包括創(chuàng)建接口、打開(kāi)接口、關(guān)閉接口、讀取接口、和寫(xiě)入接口。進(jìn)一步地,打包模塊將第一文件系統(tǒng)中的文件打包至內(nèi)存的方式包括調(diào)用上述創(chuàng)建接口在內(nèi)存中創(chuàng)建打包文件;采用串行化的操作方式依次調(diào)用上述讀取接口讀取第一文件系統(tǒng)的文件中的數(shù)據(jù)并調(diào)用上述寫(xiě)入接口將讀取的數(shù)據(jù)寫(xiě)入打包文件,直至第一文件系統(tǒng)中的所有文件中的數(shù)據(jù)均已寫(xiě)入到打包文件中;其中,每次調(diào)用上述讀取接口讀取第一文件系統(tǒng)的文件中的數(shù)據(jù)之前先調(diào)用上述打開(kāi)接口打開(kāi)該文件并在讀取之后調(diào)用上述關(guān)閉接口關(guān)閉該文件,每次調(diào)用上述寫(xiě)入接口將讀取的數(shù)據(jù)寫(xiě)入該打包文件之前先調(diào)用上述打開(kāi)接口打開(kāi)該打包文件并在寫(xiě)入之后調(diào)用上述關(guān)閉接口關(guān)閉該打包文件。進(jìn)一步地,解包模塊將內(nèi)存中的打包文件解包至第二文件系統(tǒng)的方式包括采用串行的操作方式依次調(diào)用上述讀取接口讀取打包文件中的數(shù)據(jù)并調(diào)用上述寫(xiě)入接口將讀取的數(shù)據(jù)寫(xiě)入第二文件系統(tǒng)的對(duì)應(yīng)文件中,直至打包文件中的所有數(shù)據(jù)均已解包至第二文件系統(tǒng)中;其中,每次調(diào)用上述讀取接口讀取打包文件中的數(shù)據(jù)之前先調(diào)用上述打開(kāi)接口打開(kāi)該打包文件并在讀取之后調(diào)用上述關(guān)閉接口關(guān)閉該打包文件,每次調(diào)用上述寫(xiě)入接口將讀取的數(shù)據(jù)寫(xiě)入第二文件系統(tǒng)的對(duì)應(yīng)文件中之前先調(diào)用上述打開(kāi)接口打開(kāi)該對(duì)應(yīng)文件并在寫(xiě)入之后調(diào)用上述關(guān)閉接口關(guān)閉該對(duì)應(yīng)文件。進(jìn)一步地,還包括控制模塊,用于在格式化模塊將第一文件系統(tǒng)格式化為第二文件系統(tǒng)失敗的情況下,將文件系統(tǒng)重新格式化為第一文件系統(tǒng),并控制解包模塊將打包文件解包至第一文件系統(tǒng)。進(jìn)一步地,控制模塊還用于在解包模塊將打包文件解包至第二文件系統(tǒng)失敗的情況下,判斷解包失敗的次數(shù)是否超過(guò)解包失敗次數(shù)閾值;在未超過(guò)時(shí),控制解包模塊繼續(xù)執(zhí)行將內(nèi)存中的打包文件解包至第二文件系統(tǒng)的步驟;在超過(guò)時(shí),控制格式化模塊將文件系統(tǒng)重新格式化為第一文件系統(tǒng)以及將打包文件解包至第一文件系統(tǒng)。通過(guò)本發(fā)明,嵌入式系統(tǒng)通過(guò)在文件系統(tǒng)的倒換過(guò)程中,先將倒換前的文件系統(tǒng) (即第一文件系統(tǒng))中的文件打包至不會(huì)受到影響的內(nèi)存中,并在格式化為倒換后的文件系統(tǒng)(即第二文件系統(tǒng))后再將內(nèi)存中的打包文件解包至倒換后的文件系統(tǒng)中,從而在文件系統(tǒng)的倒換過(guò)程中,確保了文件及其目錄結(jié)構(gòu)的完整性,并實(shí)現(xiàn)了由嵌入式系統(tǒng)自己來(lái)完成整個(gè)文件系統(tǒng)的倒換過(guò)程,從而實(shí)現(xiàn)了倒換的自動(dòng)化,因此系統(tǒng)運(yùn)行效率更高,并且節(jié)省了人力。
此處所說(shuō)明的附圖用來(lái)提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本發(fā)明的示意性實(shí)施例及其說(shuō)明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中圖1是根據(jù)本發(fā)明實(shí)施例的嵌入式系統(tǒng)中的文件系統(tǒng)的倒換方法;圖2是根據(jù)本發(fā)明第一優(yōu)選實(shí)施例的升級(jí)和回滾過(guò)程中的文件系統(tǒng)倒換過(guò)程的流程圖;圖3是根據(jù)本發(fā)明優(yōu)選實(shí)施例的打包的流程圖;圖4是根據(jù)本發(fā)明優(yōu)選實(shí)施例的解包的流程圖;圖5是根據(jù)本發(fā)明第二優(yōu)選實(shí)施例的文件系統(tǒng)的倒換過(guò)程的具體流程圖;圖6是根據(jù)本發(fā)明實(shí)施例的嵌入式系統(tǒng)的示意圖;圖7是根據(jù)本發(fā)明優(yōu)選實(shí)施例的嵌入式系統(tǒng)的結(jié)構(gòu)示意圖;圖8是根據(jù)本發(fā)明優(yōu)選實(shí)施例的引導(dǎo)裝置的結(jié)構(gòu)示意圖。
具體實(shí)施例方式下文中將參考附圖并結(jié)合實(shí)施例來(lái)詳細(xì)說(shuō)明本發(fā)明。需要說(shuō)明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互組合。圖1是根據(jù)本發(fā)明實(shí)施例的嵌入式系統(tǒng)中的文件系統(tǒng)的倒換方法,包括以下步驟步驟S102,嵌入式系統(tǒng)將第一文件系統(tǒng)中的文件打包至內(nèi)存;例如,上述文件可以包括用戶的各種配置文件、以及其他的文件或程序、目錄、以及目錄下的各種文件與程序等。第一文件系統(tǒng)中的文件打包至內(nèi)存中后,即以打包文件的形式保存。
步驟S104,打包成功后,嵌入式系統(tǒng)將第一文件系統(tǒng)格式化為第二文件系統(tǒng); 在實(shí)際實(shí)施時(shí),可以在執(zhí)行格式化之前,先卸載第一文件系統(tǒng)。格式化之后,嵌入式系統(tǒng)中的磁盤(pán)或閃存等存儲(chǔ)設(shè)備即被格式化為第二文件系統(tǒng)。步驟S106,格式化成功后,嵌入式系統(tǒng)將內(nèi)存中的打包文件解包至第二文件系統(tǒng)。相關(guān)技術(shù)中由于采用以人工的方式進(jìn)行倒換,需要文件系統(tǒng)使用者去記憶與存儲(chǔ)相關(guān)的文件、目錄以及目錄結(jié)構(gòu),因此比較浪費(fèi)人力,無(wú)法實(shí)現(xiàn)文件系統(tǒng)倒換的自動(dòng)化。本實(shí)施例中,嵌入式系統(tǒng)通過(guò)在文件系統(tǒng)的倒換過(guò)程中,先將倒換前的文件系統(tǒng)(即第一文件系統(tǒng))中的文件打包至不會(huì)受到影響的內(nèi)存中,并在格式化為倒換后的文件系統(tǒng)(即第二文件系統(tǒng))后再將內(nèi)存中的打包文件解包至倒換后的文件系統(tǒng)中,從而在文件系統(tǒng)的倒換過(guò)程中,確保了文件及其目錄結(jié)構(gòu)的完整性,并實(shí)現(xiàn)了由嵌入式系統(tǒng)自己來(lái)完成整個(gè)文件系統(tǒng)的倒換過(guò)程,從而實(shí)現(xiàn)了倒換的自動(dòng)化,因此系統(tǒng)運(yùn)行效率更高,并且節(jié)省了人力。此外,使用打包的方法作為中間過(guò)程,實(shí)現(xiàn)了系統(tǒng)配置文件和程序的平滑遷移,使相關(guān)文件既能夠在原操作系統(tǒng)中可用,也能夠被升級(jí)后的操作系統(tǒng)所用。如圖2所示,在實(shí)際應(yīng)用中,上述實(shí)施例的文件系統(tǒng)的倒換方法既可以應(yīng)用在嵌入式系統(tǒng)的操作系統(tǒng)的升級(jí)過(guò)程中,也可以應(yīng)用于操作系統(tǒng)的回滾過(guò)程中,設(shè)升級(jí)前的文件系統(tǒng)為文件系統(tǒng)1,升級(jí)后的文件系統(tǒng)為文件系統(tǒng)2,其文件系統(tǒng)的倒換過(guò)程示意如圖2 所示。在操作系統(tǒng)的升級(jí)過(guò)程中,文件系統(tǒng)的倒換包括以下步驟步驟S202,嵌入式系統(tǒng)將文件系統(tǒng)1中的文件打包進(jìn)內(nèi)存中;該步驟對(duì)應(yīng)于圖1中的步驟S102 ;步驟S204,卸載文件系統(tǒng)1,并將文件系統(tǒng)格式化為文件系統(tǒng)2,該步驟對(duì)應(yīng)于圖1中的步驟S104 ;步驟 S206,將內(nèi)存中的打包文件解包,解包完成后,將在文件系統(tǒng)2中還原文件系統(tǒng)1中的文件, 該步驟對(duì)應(yīng)于圖1中的步驟S106。解包完成后,文件系統(tǒng)的倒換即完成。在操作系統(tǒng)的回滾過(guò)程中,文件系統(tǒng)的倒換流程與升級(jí)過(guò)程中的流程相反,這里不再贅述。由于在嵌入式系統(tǒng)中,文件系統(tǒng)有可能不支持并發(fā)操作(即為非并發(fā)文件系統(tǒng)), 因此,在打包和解包時(shí)可以采用串行化的操作方式,一次僅打開(kāi)一個(gè)文件,當(dāng)需要打開(kāi)第二個(gè)文件時(shí),需要先將已經(jīng)打開(kāi)的文件關(guān)閉。因此,當(dāng)?shù)谝晃募到y(tǒng)為非并發(fā)文件系統(tǒng)時(shí),可以采用串行化的操作方式將第一文件系統(tǒng)中的文件打包至內(nèi)存,即,具體地上述步驟S102 包括在內(nèi)存中創(chuàng)建打包文件;采用串行化的操作方式依次讀取第一文件系統(tǒng)的文件中的數(shù)據(jù)并將讀取的數(shù)據(jù)寫(xiě)入打包文件,直至第一文件系統(tǒng)中的所有文件中的數(shù)據(jù)均已寫(xiě)入到打包文件中。這樣,可以有效地規(guī)避文件系統(tǒng)的不支持并發(fā)操作的局限性。在實(shí)際應(yīng)用中,采用串行化的操作方式的打包流程如圖3所示,以文件系統(tǒng)中一個(gè)文件的打包流程為例,包括以下步驟步驟S302,嵌入式系統(tǒng)創(chuàng)建打包后需要生成的文件(即上述的打包文件),創(chuàng)建成功后關(guān)閉打包文件;步驟S304,創(chuàng)建頭信息,打開(kāi)已經(jīng)創(chuàng)建的打包文件,將頭信息寫(xiě)入,寫(xiě)入成功后關(guān)閉打包文件;步驟S306,打開(kāi)需要打包的文件(可以為上述的第一文件系統(tǒng)中的文件),讀取一定長(zhǎng)度的數(shù)據(jù),關(guān)閉文件;
步驟S308,打開(kāi)打包文件,將讀取的數(shù)據(jù)寫(xiě)入,寫(xiě)入后關(guān)閉文件;步驟S310,判斷文件中的數(shù)據(jù)是否已經(jīng)全部讀取,如果尚未讀完,則繼續(xù)返回執(zhí)行步驟S306,直至文件中的數(shù)據(jù)全部讀取后,一個(gè)文件的打包流程結(jié)束。步驟S312,使用上述步驟S306至步驟S310繼續(xù)打包其他的文件。以上為將文件打包至文件系統(tǒng)中,將文件打包至內(nèi)存中的流程與圖3類似,這里不再贅述。同樣的,也可以采用串行化的操作方式將打包文件解包至第二文件系統(tǒng)中,S卩,具體地上述步驟S106可以包括采用串行的操作方式依次讀取打包文件中的數(shù)據(jù)并將讀取的數(shù)據(jù)寫(xiě)入第二文件系統(tǒng)的對(duì)應(yīng)文件中,直至打包文件中的所有數(shù)據(jù)均已寫(xiě)入到對(duì)應(yīng)的文件中。在實(shí)際應(yīng)用中,與打包流程同樣的原因,采用串行化的操作方式的解包流程如圖4 所示,以文件系統(tǒng)中單個(gè)文件的解包為例,包括以下步驟步驟S402,嵌入式系統(tǒng)打開(kāi)打包文件,讀取頭信息后,關(guān)閉打包文件;步驟S404,對(duì)讀取到的頭信息進(jìn)行判斷,如果頭信息所描述的數(shù)據(jù)是文件則繼續(xù)文件解包流程;步驟S406,打開(kāi)打包文件,讀取對(duì)應(yīng)數(shù)據(jù)塊的一定長(zhǎng)度的數(shù)據(jù),讀取完成后,關(guān)閉打包文件;步驟S408,判斷解包后的文件是否存在,如果不存在,則轉(zhuǎn)入步驟S412,若已存在,則轉(zhuǎn)入步驟S410;步驟S410,打開(kāi)文件;步驟S412,創(chuàng)建文件;步驟S414,將讀取到的數(shù)據(jù)寫(xiě)入文件中,寫(xiě)入成功后關(guān)閉文件;步驟S416,判斷對(duì)應(yīng)文件數(shù)據(jù)是否已經(jīng)全部解包,如果尚未全部解包,則返回步驟 S406,直至解包結(jié)束;步驟S418,使用上述步驟繼續(xù)解其他的文件。以上為將文件系統(tǒng)中的打包文件解包至文件系統(tǒng)中,將內(nèi)存中的打包文件解包至文件系統(tǒng)中的流程與上述步驟相同,這里不再贅述。需要注意的是如果將文件打包至文件系統(tǒng)中,倒換前需要首先將打包文件讀取至內(nèi)存中;格式化存儲(chǔ)設(shè)備為第二文件系統(tǒng)后,再將內(nèi)存中的打包文件寫(xiě)入第二文件系統(tǒng), 之后再將打包文件解包至第二文件系統(tǒng)。實(shí)際應(yīng)用時(shí),在文件系統(tǒng)的倒換過(guò)程中,偶爾會(huì)發(fā)生倒換異常的情況,因此,需要對(duì)文件系統(tǒng)的倒換過(guò)程進(jìn)行相應(yīng)的保護(hù)流程,以在流程上盡可能地保護(hù)文件系統(tǒng)的數(shù)據(jù)、 文件不發(fā)生丟失,以進(jìn)一步確保文件的完整性和可靠性,盡可能地確保文件系統(tǒng)的倒換的安全性。保護(hù)流程主要包括以下幾個(gè)方面(1)為打包文件分配內(nèi)存中的存儲(chǔ)空間時(shí),如果內(nèi)存的剩余存儲(chǔ)不足,直接返回失敗,倒換結(jié)束;(2)如果打包過(guò)程中失敗,則將已經(jīng)為打包文件分配的內(nèi)存清零,再次打包。連續(xù)打包10次均失敗,則返回失敗,倒換結(jié)束;(3)如果格式化失敗,則反向格式化,并將內(nèi)存中的打包文件解包,復(fù)原文件;
(4)如果解包失敗,則重新解包,解包過(guò)程中覆蓋之前已經(jīng)解包的文件。如果解包失敗次數(shù)超過(guò)10次,則進(jìn)行反向格式化,并將內(nèi)存中的打包文件解包,復(fù)原文件。
如圖5所示,增加了保護(hù)流程的文件系統(tǒng)的倒換流程,具體包括以下步驟步驟S502,嵌入式系統(tǒng)為打包文件分配需要的內(nèi)存空間;步驟S504,判斷內(nèi)存是否足夠,若是,則進(jìn)入步驟S506,若否,則返回失敗,倒換流程結(jié)束;步驟S506,將第一文件系統(tǒng)中的文件打包至內(nèi)存中;步驟S508,判斷打包是否成功,若成功,則轉(zhuǎn)入步驟S510,若失敗,則如果打包失敗,則連續(xù)嘗試10次,如果都未成功,返回失敗,倒換結(jié)束。步驟S510,判斷失敗次數(shù)是否超過(guò)10次(即打包失敗次數(shù)閾值),若超過(guò),則返回失敗,倒換流程結(jié)束,若未超過(guò),則返回步驟S506 ;步驟S512,將第一文件系統(tǒng)格式化為第二文件系統(tǒng);步驟S514,判斷格式化是否成功,如果格式化失敗,則進(jìn)入步驟S516,若成功,則進(jìn)入步驟S518 ;步驟S516,反向格式化(即重新格式化為第一文件系統(tǒng)),再將內(nèi)存中的打包文件解包,恢復(fù)之前文件系統(tǒng)的狀態(tài)(即將打包文件解包至第一文件系統(tǒng)),倒換結(jié)束;步驟S518,將內(nèi)存中的打包文件解包至第二文件系統(tǒng);步驟S520,判斷解包是否成功,若成功,則結(jié)束倒換流程,若失敗,則進(jìn)入步驟 S522 ;步驟S522,判斷失敗次數(shù)是否超過(guò)10次(即解包失敗次數(shù)閾值),若未超過(guò),則返回步驟S518,繼續(xù)解包;如果超過(guò)10次,則反向格式化,并將文件寫(xiě)入,完成解包,恢復(fù)之前的流程,倒換結(jié)束;本發(fā)明上述實(shí)施例的目的是提供一種易于實(shí)現(xiàn)的嵌入式系統(tǒng)的文件系統(tǒng)的倒換方法,上述實(shí)施例的方法通過(guò)使用打包的方法作為中間過(guò)程,實(shí)現(xiàn)文件系統(tǒng)的倒換;同時(shí), 可以實(shí)現(xiàn)自動(dòng)化的倒換,從而提高了系統(tǒng)的運(yùn)行效率。為了使得嵌入式系統(tǒng)能夠利用上述的方法實(shí)現(xiàn)文件系統(tǒng)的自動(dòng)倒換,本發(fā)明以下實(shí)施例還提供了一種嵌入式系統(tǒng),通過(guò)在該嵌入式系統(tǒng)中設(shè)置一引導(dǎo)裝置,由該引導(dǎo)裝置來(lái)執(zhí)行上述實(shí)施例的方法。圖6是根據(jù)本發(fā)明實(shí)施例的嵌入式系統(tǒng)的示意圖,包括打包模塊10,用于將第一文件系統(tǒng)中的文件打包至內(nèi)存;格式化模塊20,用于在打包成功后,將第一文件系統(tǒng)格式化為第二文件系統(tǒng);解包模塊30,用于在格式化成功后,將內(nèi)存中的打包文件解包至第二文件系統(tǒng)。該實(shí)施例中的嵌入式系統(tǒng),通過(guò)設(shè)置在其中的打包模塊、格式化模塊、和解包模塊來(lái)在文件系統(tǒng)的倒換過(guò)程中,先將倒換前的文件系統(tǒng)(即第一文件系統(tǒng))中的文件打包至不會(huì)受到影響的內(nèi)存中,并在格式化為倒換后的文件系統(tǒng)(即第二文件系統(tǒng))后再將內(nèi)存中的打包文件解包至倒換后的文件系統(tǒng)中,從而在文件系統(tǒng)的倒換過(guò)程中,確保了文件的完整性,并實(shí)現(xiàn)了由嵌入式系統(tǒng)自己來(lái)完成整個(gè)文件系統(tǒng)的倒換過(guò)程,從而實(shí)現(xiàn)了倒換的自動(dòng)化,因此提高了系統(tǒng)運(yùn)行的效率和文件系統(tǒng)倒換的效率,并且節(jié)省了人力。如圖7所示,上述的嵌入式系統(tǒng)還可以包括接口模塊40,用于為第一文件系統(tǒng)、第二文件系統(tǒng)與打包模塊10、解包模塊20之間的通信提供接口,其中,上述接口可以包括創(chuàng)建(如vcreat 創(chuàng)建新的文件、vmkdir 創(chuàng)建目錄)、打開(kāi)(包括vopen 打開(kāi)文件、 vopendir 打開(kāi)目錄)、關(guān)閉(如包括vclose 關(guān)閉打開(kāi)的文件、vclosedir 關(guān)閉目錄)、讀取(如vread 讀取文件中的數(shù)據(jù)、vreaddir 讀取目錄)、和寫(xiě)入(如write 將數(shù)據(jù)寫(xiě)入文件)。顯然,還可以包括vlseek 設(shè)置文件偏移、vstat 獲取文件屬性、以及vchdir 改變目錄等接口。通過(guò)接口模塊提供的這些接口,可以為各個(gè)不同的文件系統(tǒng)提供統(tǒng)一的接口, 從而為打包模塊和解包模塊讀寫(xiě)各個(gè)不同的文件系統(tǒng)中的文件中的數(shù)據(jù)提供了方便。例如,在打包模塊10將第一文件系統(tǒng)中的文件打包至內(nèi)存過(guò)程中,打包模塊10首先調(diào)用創(chuàng)建接口在內(nèi)存中創(chuàng)建打包文件;然后,采用串行化的操作方式依次調(diào)用讀取接口讀取第一文件系統(tǒng)的文件中的數(shù)據(jù)并調(diào)用寫(xiě)入接口將讀取的數(shù)據(jù)寫(xiě)入打包文件,直至第一文件系統(tǒng)中的所有文件中的數(shù)據(jù)均已寫(xiě)入到打包文件中;其中,每次調(diào)用讀取接口讀取第一文件系統(tǒng)的某一文件中的數(shù)據(jù)之前先調(diào)用打開(kāi)接口打開(kāi)該文件并在讀取之后調(diào)用關(guān)閉接口關(guān)閉該文件,每次調(diào)用寫(xiě)入接口將讀取的數(shù)據(jù)寫(xiě)入該打包文件之前先調(diào)用打開(kāi)接口打開(kāi)該打包文件并在寫(xiě)入之后調(diào)用關(guān)閉接口關(guān)閉該打包文件。在解包模塊30將內(nèi)存中的打包文件解包至第二文件系統(tǒng)的過(guò)程中,解包模塊30 采用串行的操作方式依次調(diào)用讀取接口讀取打包文件中的數(shù)據(jù)并調(diào)用寫(xiě)入接口將讀取的數(shù)據(jù)寫(xiě)入第二文件系統(tǒng)的對(duì)應(yīng)文件中,直至打包文件中的所有數(shù)據(jù)均已解包至第二文件系統(tǒng)中;其中,每次調(diào)用讀取接口讀取打包文件中的數(shù)據(jù)之前先調(diào)用打開(kāi)接口打開(kāi)該打包文件并在讀取之后調(diào)用關(guān)閉接口關(guān)閉該打包文件,每次調(diào)用寫(xiě)入接口將讀取的數(shù)據(jù)寫(xiě)入第二文件系統(tǒng)的對(duì)應(yīng)文件中之前先調(diào)用打開(kāi)接口打開(kāi)該對(duì)應(yīng)文件并在寫(xiě)入之后調(diào)用關(guān)閉接口關(guān)閉該對(duì)應(yīng)文件。如圖7所示,上述嵌入式系統(tǒng)中還可以包括控制模塊50,用于在格式化模塊20 將第一文件系統(tǒng)格式化為第二文件系統(tǒng)失敗的情況下,將文件系統(tǒng)重新格式化為第一文件系統(tǒng),并控制解包模塊30將打包文件解包至第一文件系統(tǒng)。此外,控制模塊50還可以用于在解包模塊將打包文件解包至第二文件系統(tǒng)失敗的情況下,判斷解包失敗的次數(shù)是否超過(guò)解包失敗次數(shù)閾值;在未超過(guò)時(shí),控制解包模塊繼續(xù)執(zhí)行將內(nèi)存中的打包文件解包至第二文件系統(tǒng)的步驟;在超過(guò)時(shí),控制格式化模塊將文件系統(tǒng)重新格式化為第一文件系統(tǒng)以及將打包文件解包至第一文件系統(tǒng)。從而,控制模塊除了用于控制打包模塊、格式化模塊、和解包模塊執(zhí)行各自的操作之外,還為整個(gè)的倒換流程提供了保護(hù)。如圖8所示,在實(shí)際實(shí)施時(shí),可以將上述的第一文件系統(tǒng)、第二文件系統(tǒng)、打包模塊、格式化模塊、解包模塊、接口模塊、和控制模塊統(tǒng)一地由一個(gè)引導(dǎo)裝置來(lái)實(shí)現(xiàn),該引導(dǎo)裝置同時(shí)兼容升級(jí)前、后系統(tǒng)使用的文件系統(tǒng)。為了實(shí)現(xiàn)方便、更加符合實(shí)際應(yīng)用需要,該引導(dǎo)裝置在實(shí)際實(shí)施時(shí)可以主要由多文件系統(tǒng)支持模塊(即第一文件系統(tǒng)、第二文件系統(tǒng)、 接口模塊、和格式化模塊的組合)、打包解包模塊(即打包模塊和解包模塊的組合)、以及控制模塊。如圖8所示,多文件系統(tǒng)支持模塊支持多種文件系統(tǒng),并能夠根據(jù)需要進(jìn)行擴(kuò)充, 擴(kuò)充時(shí)需要移植相關(guān)文件系統(tǒng)對(duì)應(yīng)的接口,并添加文件系統(tǒng)識(shí)別程序。多文件系統(tǒng)支持模塊對(duì)外提供的統(tǒng)一接口(即上述接口模塊40中包括的接口)包括創(chuàng)建、打開(kāi)、關(guān)閉、讀取、 寫(xiě)入文件、打開(kāi)目錄、讀取目錄、關(guān)閉目錄等。通過(guò)提供統(tǒng)一的接口實(shí)現(xiàn)了接口的透明化。打包解包模塊能夠通過(guò)調(diào)用統(tǒng)一的接口來(lái)對(duì)相應(yīng)的文件系統(tǒng)進(jìn)行各種操作。此外,由于多文件系統(tǒng)支持模塊對(duì)外保持接口透明,在模塊內(nèi)部需要對(duì)不同文件系統(tǒng)進(jìn)行區(qū)分,因此,通過(guò)一個(gè)全局的文件系統(tǒng)標(biāo)識(shí)符FS來(lái)區(qū)分當(dāng)前使用的文件系統(tǒng),區(qū)分每個(gè)不同的文件系統(tǒng)的私有接口,以及辨識(shí)文件系統(tǒng)的倒換進(jìn)行的方向。當(dāng)該FS = 1時(shí), 表示當(dāng)前使用第一文件系統(tǒng),則從外部(此處主要指打包解包模塊)傳進(jìn)來(lái)的調(diào)用指令,會(huì)調(diào)用第一文件系統(tǒng)的接口;當(dāng)FS = 2時(shí),表示當(dāng)前使用第二文件系統(tǒng),則從外部傳進(jìn)來(lái)的調(diào)用指令,會(huì)調(diào)用第二文件系統(tǒng)對(duì)應(yīng)的接口。例如當(dāng)FS指示為文件系統(tǒng)1時(shí),多文件系統(tǒng)支持模塊使用文件系統(tǒng)1提供的接口,格式化程序使用文件系統(tǒng)2提供的接口;當(dāng)FS指示為文件系統(tǒng)2時(shí),多文件系統(tǒng)支持模塊使用文件系統(tǒng)2提供的接口,格式化程序使用文件系統(tǒng)1提供的接口。其中,在引導(dǎo)裝置啟動(dòng)時(shí),需要設(shè)置FS指示當(dāng)前系統(tǒng)的文件系統(tǒng)。打包解包模塊主要實(shí)現(xiàn)目錄和文件的打包與解包,用于將用戶的多個(gè)配置文件打包為一個(gè)文件,使開(kāi)發(fā)者免于記憶數(shù)據(jù)目錄結(jié)構(gòu)與數(shù)據(jù)內(nèi)容,尤其在目錄結(jié)構(gòu)復(fù)雜的情況下,能夠有效保證用戶配置文件的目錄結(jié)構(gòu)與配置數(shù)據(jù)的完整性。打包裝置主要實(shí)現(xiàn)以下功能1、支持目錄與文件的打包、解包;2、同時(shí)支持文件系統(tǒng)與內(nèi)存中打包、解包;3、支持非并發(fā)文件系統(tǒng)。其中,為了支持內(nèi)存中打包,設(shè)計(jì)了結(jié)構(gòu)體tarBuff typedef struct {char氺buffer ;int write_num ;int read_num ;} tarBuff ;其中,buffer成員用于存儲(chǔ)打包好的數(shù)據(jù);write_num用于記錄打包時(shí)已經(jīng)寫(xiě)入內(nèi)存的數(shù)據(jù)。由于打包程序以10240個(gè)字節(jié)的數(shù)據(jù)為單位,每次從需要打包的文件中讀取10240個(gè)字節(jié),之后將這些數(shù)據(jù)追加在已經(jīng)寫(xiě)入的數(shù)據(jù)尾部,等所有的數(shù)據(jù)都寫(xiě)入后,就構(gòu)成一個(gè)完整的打包數(shù)據(jù)。根據(jù)write_nUm的記錄,就可以找到內(nèi)存中已經(jīng)打包的數(shù)據(jù)的結(jié)尾;reacLnum與此類似,主要應(yīng)用于解包流程,記錄已經(jīng)從內(nèi)存中讀取的數(shù)據(jù)數(shù)量,下次讀取時(shí),根據(jù)這個(gè)記錄,能夠找到已經(jīng)讀取過(guò)的數(shù)據(jù)的尾部。除了內(nèi)存中打包、解包,打包解包模塊還支持文件系統(tǒng)中的打包、解包配置,能夠?qū)⒋虬募虬雰?nèi)存或者打包入文件系統(tǒng)中,為用戶提供了多種打包選擇。此外,為了支持非并發(fā)文件系統(tǒng),打包解包模塊還采用了串行化的操作流程,有效地解決了非并發(fā)文件系統(tǒng)打包和解包的問(wèn)題。串行化的操作方式的主要思想是每次調(diào)用 vopen之前,必須保證對(duì)上一次調(diào)用vopen打開(kāi)的文件使用了 vclose。打包解包模塊采用串行化的操作方式進(jìn)行打包和解包時(shí)的操作流程分別如圖3、圖4所示??刂颇K用于在流程上盡可能地為文件系統(tǒng)倒換的安全性提供盡可能的保護(hù),以在流程上盡可能地保護(hù)文件系統(tǒng)中的文件不被損壞。結(jié)合圖8所示的引導(dǎo)裝置,以第一文件系統(tǒng)為T(mén)FFS文件系統(tǒng)、第二文件系統(tǒng)為 JFFS2文件系統(tǒng)為例,詳細(xì)說(shuō)明由嵌入式系統(tǒng)中的該引導(dǎo)裝置實(shí)現(xiàn)上述實(shí)施例的文件系統(tǒng)的倒換方法,包括以下步驟步驟1 同時(shí)兼容2種文件系統(tǒng)的引導(dǎo)裝置啟動(dòng),該引導(dǎo)裝置為文件系統(tǒng)倒換的基礎(chǔ)平臺(tái),其結(jié)構(gòu)圖如圖8所示,包括以下幾部分文件系統(tǒng)I-TFFS文件系統(tǒng);文件系統(tǒng) 2-JFFS2文件系統(tǒng);打包解包模塊;和控制模塊。步驟2 打包解包模塊將TFFS文件系統(tǒng)中所有的文件打包到內(nèi)存中。打包解包模塊將需要遷移的目錄與文件打包到內(nèi)存中。打包時(shí),所使用的文件系統(tǒng)接口正是多文件系統(tǒng)支持模塊提供的統(tǒng)一接口。步驟3 將TFFS文件系統(tǒng)卸載,格式化文件系統(tǒng)為JFFS2。步驟4:打包解包模塊將內(nèi)存中的打包文件進(jìn)行解包,解包后,所有的目錄以及文件會(huì)寫(xiě)入到JFFS2文件系統(tǒng)中。該優(yōu)選實(shí)施例在系統(tǒng)啟動(dòng)初期,通過(guò)使用同時(shí)兼容多種文件系統(tǒng)的引導(dǎo)裝置,使用打包的方法作為中間過(guò)程,實(shí)現(xiàn)了文件系統(tǒng)的倒換。從以上的描述中,可以看出,本發(fā)明實(shí)現(xiàn)了如下技術(shù)效果(1)實(shí)現(xiàn)了文件系統(tǒng)的倒換自動(dòng)化,從而提高了系統(tǒng)的運(yùn)行效率,并且節(jié)省了人力;(2)為系統(tǒng)升級(jí)和回滾提供了較可靠的安全保證。顯然,本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本發(fā)明的各模塊或各步驟可以用通用的計(jì)算裝置來(lái)實(shí)現(xiàn),它們可以集中在單個(gè)的計(jì)算裝置上,或者分布在多個(gè)計(jì)算裝置所組成的網(wǎng)絡(luò)上,可選地,它們可以用計(jì)算裝置可執(zhí)行的程序代碼來(lái)實(shí)現(xiàn),從而,可以將它們存儲(chǔ)在存儲(chǔ)裝置中由計(jì)算裝置來(lái)執(zhí)行,并且在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟,或者將它們分別制作成各個(gè)集成電路模塊,或者將它們中的多個(gè)模塊或步驟制作成單個(gè)集成電路模塊來(lái)實(shí)現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域的技術(shù)人員來(lái)說(shuō),本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種嵌入式系統(tǒng)中的文件系統(tǒng)的倒換方法,其特征在于,包括 所述嵌入式系統(tǒng)將第一文件系統(tǒng)中的文件打包至內(nèi)存;所述打包成功后,所述嵌入式系統(tǒng)將所述第一文件系統(tǒng)格式化為第二文件系統(tǒng); 所述格式化成功后,所述嵌入式系統(tǒng)將所述內(nèi)存中的打包文件解包至所述第二文件系統(tǒng)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述第一文件系統(tǒng)為非并發(fā)文件系統(tǒng);將第一文件系統(tǒng)中的文件打包至內(nèi)存包括在所述內(nèi)存中創(chuàng)建所述打包文件;采用串行化的操作方式依次讀取所述第一文件系統(tǒng)的文件中的數(shù)據(jù)并將讀取的數(shù)據(jù)寫(xiě)入所述打包文件,直至所述第一文件系統(tǒng)中的所有文件中的數(shù)據(jù)均已寫(xiě)入到所述打包文件中。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,將所述內(nèi)存中的打包文件解包至所述第二文件系統(tǒng)包括采用所述串行的操作方式依次讀取所述打包文件中的數(shù)據(jù)并將讀取的數(shù)據(jù)寫(xiě)入所述第二文件系統(tǒng)的對(duì)應(yīng)文件中,直至所述打包文件中的所有數(shù)據(jù)均已解包至所述第二文件系統(tǒng)中。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括若所述打包失敗,則所述嵌入式系統(tǒng)判斷打包失敗的次數(shù)是否超過(guò)打包失敗次數(shù)閾值;若未超過(guò),則所述嵌入式系統(tǒng)繼續(xù)執(zhí)行所述將第一文件系統(tǒng)中的文件打包至內(nèi)存的步驟,否則,結(jié)束流程。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括若所述格式化失敗,則所述嵌入式系統(tǒng)將文件系統(tǒng)重新格式化為所述第一文件系統(tǒng); 所述嵌入式系統(tǒng)將所述內(nèi)存中的打包文件解包至所述第一文件系統(tǒng)。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,在所述嵌入式系統(tǒng)將所述內(nèi)存中的打包文件解包至所述第二文件系統(tǒng)之后,還包括若所述解包失敗,則所述嵌入式系統(tǒng)判斷解包失敗的次數(shù)是否超過(guò)解包失敗次數(shù)閾值;若未超過(guò),則所述嵌入式系統(tǒng)繼續(xù)執(zhí)行所述將所述內(nèi)存中的打包文件解包至所述第二文件系統(tǒng)的步驟;若超過(guò),則所述嵌入式系統(tǒng)將文件系統(tǒng)重新格式化為所述第一文件系統(tǒng),并將所述內(nèi)存中的打包文件解包至所述第一文件系統(tǒng)。
7.一種嵌入式系統(tǒng),其特征在于,包括打包模塊,用于將第一文件系統(tǒng)中的文件打包至內(nèi)存;格式化模塊,用于在所述打包成功后,將所述第一文件系統(tǒng)格式化為第二文件系統(tǒng); 解包模塊,用于在所述格式化成功后,將所述內(nèi)存中的打包文件解包至所述第二文件系統(tǒng)。
8.根據(jù)權(quán)利要求7所述的嵌入式系統(tǒng),其特征在于,還包括接口模塊,用于為所述第一文件系統(tǒng)、所述第二文件系統(tǒng)與所述打包模塊、所述解包模塊之間的通信提供接口。
9.根據(jù)權(quán)利要求7所述的嵌入式系統(tǒng),其特征在于,還包括控制模塊,用于在所述格式化模塊將所述第一文件系統(tǒng)格式化為所述第二文件系統(tǒng)失敗的情況下,將文件系統(tǒng)重新格式化為所述第一文件系統(tǒng),并控制所述解包模塊將所述打包文件解包至所述第一文件系統(tǒng)。
10.根據(jù)權(quán)利要求9所述的嵌入式系統(tǒng),其特征在于,所述控制模塊還用于在所述解包模塊將所述打包文件解包至所述第二文件系統(tǒng)失敗的情況下,判斷解包失敗的次數(shù)是否超過(guò)解包失敗次數(shù)閾值;在未超過(guò)時(shí),控制所述解包模塊繼續(xù)執(zhí)行所述將所述內(nèi)存中的打包文件解包至所述第二文件系統(tǒng)的步驟;在超過(guò)時(shí),控制所述格式化模塊將文件系統(tǒng)重新格式化為所述第一文件系統(tǒng)以及將所述打包文件解包至所述第一文件系統(tǒng)。
全文摘要
本發(fā)明公開(kāi)了一種嵌入式系統(tǒng)及其中的文件系統(tǒng)的倒換方法,其中,倒換方法包括嵌入式系統(tǒng)將第一文件系統(tǒng)中的文件打包至內(nèi)存;打包成功后,嵌入式系統(tǒng)將第一文件系統(tǒng)格式化為第二文件系統(tǒng);格式化成功后,嵌入式系統(tǒng)將內(nèi)存中的打包文件解包至第二文件系統(tǒng)。本發(fā)明在文件系統(tǒng)的倒換過(guò)程中,確保了文件及其目錄結(jié)構(gòu)的完整性,并實(shí)現(xiàn)了由嵌入式系統(tǒng)自己來(lái)完成整個(gè)文件系統(tǒng)的倒換過(guò)程,從而實(shí)現(xiàn)了倒換的自動(dòng)化,因此系統(tǒng)運(yùn)行效率更高,并且節(jié)省了人力。
文檔編號(hào)G06F9/48GK102375760SQ201010262748
公開(kāi)日2012年3月14日 申請(qǐng)日期2010年8月24日 優(yōu)先權(quán)日2010年8月24日
發(fā)明者崔云峰, 徐嚴(yán)濤, 王亮, 程圣宇, 薛志宏 申請(qǐng)人:中興通訊股份有限公司