一種Squashfs只讀根文件系統(tǒng)的遠(yuǎn)程升級方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及嵌入式Linux操作系統(tǒng)的根文件系統(tǒng),具體是涉及一種Squashfs (南瓜文件系統(tǒng))只讀根文件系統(tǒng)的遠(yuǎn)程升級方法及系統(tǒng)。
【背景技術(shù)】
[0002]在嵌入式Linux系統(tǒng)的應(yīng)用中,系統(tǒng)啟動后都會加載根文件系統(tǒng)(rootfilesystem),并通過根文件系統(tǒng)啟動各種后臺服務(wù)程序、加載應(yīng)用程序、提供用戶操作界面。在實際產(chǎn)品中,如果根文件系統(tǒng)被損害,不僅系統(tǒng)服務(wù)和應(yīng)用程序無法正常加載和運(yùn)行,而且會造成系統(tǒng)無法正常啟動的嚴(yán)重后果,根文件系統(tǒng)被損害導(dǎo)致的上述后果,對于對產(chǎn)品可靠性要求很高通信系統(tǒng)的影響更為嚴(yán)重。
[0003]在一些要求高可靠性的系統(tǒng)中,為了保證Linux系統(tǒng)的穩(wěn)定可靠,Linux系統(tǒng)的根文件系統(tǒng)會以只讀的方式存放在系統(tǒng)的存儲設(shè)備(如NOR FLASH,NAND FLASH等非易失閃存設(shè)備)中,將根文件系統(tǒng)設(shè)置為只讀不可修改,這樣就可以防止和避免意外操作造成根文件系統(tǒng)損壞,保證系統(tǒng)啟動時根文件系統(tǒng)能正常被掛載,增強(qiáng)系統(tǒng)的可靠性。而由于Squashfs具備壓縮只讀的特點,所以在目前產(chǎn)品開發(fā)中常常使用Squashfs作為根文件系統(tǒng),不僅可以增強(qiáng)Linux系統(tǒng)可靠性,而且可以節(jié)省硬件成本。
[0004]采用只讀的Squashfs根文件系統(tǒng)雖然可以提高Linux系統(tǒng)可靠性,但其只可讀而不可修改的屬性,在實際應(yīng)用中,也導(dǎo)致了根文件系統(tǒng)不能進(jìn)行遠(yuǎn)程在線升級的缺陷,使得采用只讀的Squashfs根文件系統(tǒng)的Linux系統(tǒng)軟件模塊遠(yuǎn)程更新具有很大局限性,即只可以對除根文件系統(tǒng)以外的軟件模塊進(jìn)行在線升級(如應(yīng)用程序、內(nèi)核、驅(qū)動、應(yīng)用庫或者啟動代碼等);而對于通信系統(tǒng)多個基站離散分布、基站分布可能位偏遠(yuǎn)山區(qū)的特點而言,上述缺陷將增加根文件系統(tǒng)軟件升級、維護(hù)的成本和難度。
【發(fā)明內(nèi)容】
[0005]本發(fā)明所要解決的技術(shù)問題是Linux系統(tǒng)中的只讀Squashfs根文件系統(tǒng)不能進(jìn)行遠(yuǎn)程在線升級的問題。
[0006]為了解決上述技術(shù)問題,本發(fā)明所采用的技術(shù)方案是提供一種Squashfs只讀根文件系統(tǒng)的遠(yuǎn)程升級方法,包括以下步驟:
[0007]在Linux系統(tǒng)存儲設(shè)備的不同區(qū)域,為Linux系統(tǒng)配備兩個可掛載根文件系統(tǒng),分別為Squashfs只讀根文件系統(tǒng)和存儲Squashfs只讀根文件系統(tǒng)升級方法的內(nèi)存文件系統(tǒng),且Squashfs只讀根文件系統(tǒng)和內(nèi)存文件系統(tǒng)分別對應(yīng)于標(biāo)識Squashfs只讀根文件系統(tǒng)的存儲區(qū)為只讀的第一設(shè)備樹描述文件和標(biāo)識Squashfs只讀根文件系統(tǒng)的存儲區(qū)為可讀寫的第二設(shè)備樹描述文件;
[0008]通過系統(tǒng)BOOT多重啟動技術(shù)控制解析不同的設(shè)備樹描述文件和啟動與解析的設(shè)備樹描述文件對應(yīng)的可掛載根文件系統(tǒng);
[0009]掛載內(nèi)存文件系統(tǒng)為根文件系統(tǒng),實現(xiàn)Squashfs只讀根文件系統(tǒng)的遠(yuǎn)程在線升級。
[0010]在上述方法中,通過系統(tǒng)BOOT多重啟動技術(shù)控制遠(yuǎn)程解析不同的設(shè)備樹描述文件和啟動與解析的設(shè)備樹描述文件對應(yīng)的可掛載文件系統(tǒng)具體包括以下步驟:
[0011]步驟S101、檢測啟動標(biāo)志位;
[0012]步驟S102、判斷啟動標(biāo)志位是否為1,如果為1,則執(zhí)行步驟S105,否則,執(zhí)行步驟
5103;
[0013]步驟S103、判斷啟動標(biāo)志位是否為2,如果為2,則執(zhí)行步驟S107,否則執(zhí)行步驟
5104;
[0014]步驟S104、根據(jù)標(biāo)志位掛載其他文件系統(tǒng)為根文件系統(tǒng),然后執(zhí)行步驟S109 ;
[0015]步驟S105、解析第一設(shè)備樹描述文件,執(zhí)行步驟S106 ;
[0016]步驟S106、掛載Squashfs只讀根文件系統(tǒng)為根文件系統(tǒng),然后執(zhí)行步驟S109 ;
[0017]步驟S107、解析第二設(shè)備樹描述文件,執(zhí)行步驟S108 ;
[0018]步驟S108、掛載內(nèi)存文件系統(tǒng)為根文件系統(tǒng),然后執(zhí)行步驟S109 ;
[0019]步驟S109、系統(tǒng)正常啟動。
[0020]在上述方法中,掛載內(nèi)存文件系統(tǒng)為根文件系統(tǒng),實現(xiàn)Squashfs只讀根文件系統(tǒng)的遠(yuǎn)程在線升級具體包括以下步驟:
[0021]步驟S201、將根文件系統(tǒng)升級文件復(fù)制到遠(yuǎn)程目標(biāo)設(shè)備系統(tǒng)的外部存儲設(shè)備中;
[0022]步驟S202、修改啟動標(biāo)志位,設(shè)置遠(yuǎn)程目標(biāo)設(shè)備系統(tǒng)狀態(tài)為升級狀態(tài),重啟系統(tǒng);
[0023]步驟S203、解析第二設(shè)備樹描述文件;
[0024]步驟S204、掛載內(nèi)存文件系統(tǒng)為根文件系統(tǒng);
[0025]步驟S205、檢測目標(biāo)設(shè)備系統(tǒng)的外部存儲設(shè)備上是否存在根文件系統(tǒng)升級文件,如果存在,執(zhí)行步驟S206 ;否則執(zhí)行步驟S212 ;
[0026]步驟S206、檢測外部存儲設(shè)備上的根文件系統(tǒng)升級文件校驗碼是否有誤,如果校驗碼無誤,執(zhí)行步驟S207 ;否則,執(zhí)行步驟S212 ;
[0027]步驟S207、檢測根文件系統(tǒng)升級文件與現(xiàn)有根文件的版本是否一致,如果不一致,執(zhí)行步驟S208 ;否則執(zhí)行步驟S212 ;
[0028]步驟S208、使用讀寫FLASH的工具軟件將根文件系統(tǒng)升級文件數(shù)據(jù)寫入指定的用于存儲Squashfs只讀根文件系統(tǒng)的FLASH區(qū)域;
[0029]步驟S209、校驗寫入的根文件系統(tǒng)升級文件數(shù)據(jù)與原外部存儲設(shè)備上的數(shù)據(jù)是否一致,如果一致,執(zhí)行步驟S213 ;否則執(zhí)行步驟S210 ;
[0030]步驟S210、判斷該版本根文件系統(tǒng)升級文件寫入次數(shù)是否超過預(yù)設(shè)次數(shù),如果超出,執(zhí)行步驟S211 ;否則執(zhí)行步驟S208 ;
[0031]步驟S211、發(fā)送升級失敗告警信號通知用戶,執(zhí)行步驟S212 ;
[0032]步驟S212、停止根文件系統(tǒng)升級;
[0033]步驟S213、修改啟動標(biāo)志位,設(shè)置遠(yuǎn)程目標(biāo)設(shè)備系統(tǒng)狀態(tài)為升級完成狀態(tài),重啟系統(tǒng)。
[0034]在上述方法中,步驟S201具體包括以下步驟:
[0035]步驟S2011、用戶遠(yuǎn)程登錄目標(biāo)設(shè)備系統(tǒng);
[0036]步驟S2012、通過SCP或者FTP將根文件系統(tǒng)升級文件傳輸?shù)侥繕?biāo)設(shè)備內(nèi)存中;
[0037]步驟S2013、校驗根文件系統(tǒng)升級文件傳輸是否損壞,如果損壞,執(zhí)行步驟S2012,否則執(zhí)行步驟S2014 ;
[0038]步驟S2014、檢測目標(biāo)設(shè)備系統(tǒng)是否存在外部存儲設(shè)備,如果存在,執(zhí)行步驟
52016;否則執(zhí)行步驟S2015 ;
[0039]步驟S2015、發(fā)送無存放根文件系統(tǒng)升級文件外部存儲設(shè)備告警,然后執(zhí)行步驟
52017;
[0040]步驟S2016、將根文件系統(tǒng)升級文件復(fù)制到外部存儲設(shè)備中;
[0041]步驟S2017、程序結(jié)束。
[0042]在上述方法中,外部存儲設(shè)備包括FLASH存儲設(shè)備、SD卡存儲設(shè)備、CF卡存儲設(shè)備和磁盤存儲設(shè)備;
[0043]對上述外部存儲設(shè)備的檢測順序依次為FLASH存儲設(shè)備、SD卡存儲設(shè)備、CF卡存儲設(shè)備和磁盤存儲設(shè)備;
[0044]當(dāng)上述四種外部存儲設(shè)備全部存在時,將根文件系統(tǒng)升級文件從內(nèi)存復(fù)制到優(yōu)先發(fā)現(xiàn)的一種外部存儲設(shè)備中。
[0045]本發(fā)明還提供了一種Squashfs只讀根文件系統(tǒng)的遠(yuǎn)程升級系統(tǒng),包括兩個掛載根文件系統(tǒng)和一個BOOT多重啟動控制單元;
[0046]所述兩個掛載根文件系統(tǒng)分別為Squashfs只讀根文件系統(tǒng)和存儲Squashfs只讀根文件系統(tǒng)升級方法的內(nèi)存文件系統(tǒng),且所述Squashfs只讀根文件系統(tǒng)和所述內(nèi)存文件系統(tǒng)分別對應(yīng)于標(biāo)識所述Squashfs只讀根文件系統(tǒng)的存儲區(qū)為只讀的第一設(shè)備樹描述文件和標(biāo)識所述Squashfs只讀根文件系統(tǒng)的存儲區(qū)為可讀寫的第二設(shè)備樹描述文件;
[0047]所述BOOT多重啟動控制單元通過修改啟動標(biāo)志位解析不同的設(shè)備樹描述文件和啟動與解析的設(shè)備樹描述文件對應(yīng)的掛載文件系統(tǒng);
[0048]所述BOOT多重啟動控制單元修改啟動標(biāo)志位為升級狀態(tài),并解析所述第二設(shè)備樹描述文件,掛載所述內(nèi)存文件系統(tǒng)為根文件系統(tǒng),對Squashfs只讀根文件系統(tǒng)進(jìn)行遠(yuǎn)程升級。
[0049]本發(fā)明通過引入了一個設(shè)置Squashfs只讀根文件系統(tǒng)存儲分區(qū)為可讀寫的第二設(shè)備樹描述文件,以及小型的存有Squashfs只讀根文件系統(tǒng)升級方法的內(nèi)存文件系統(tǒng),解決存放Squashfs只讀根文件系統(tǒng)的存儲設(shè)備無法寫入和Squashf