專利名稱:一種固件空中升級(jí)的方法及終端的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及固件空中升級(jí)(FOTA/ Firmware Over-The Air)技術(shù)領(lǐng)域,具 體涉及一種固件空中升級(jí)的方法及終端。
背景技術(shù):
固件空中升級(jí)(FOTA/ Firmware Over-The Air )是指終端通過(guò)無(wú)線下載的 方式獲取軟件版本并對(duì)終端的固件進(jìn)行升級(jí),F(xiàn)OTA已經(jīng)被開(kāi)放移動(dòng)聯(lián)盟 (Open Mobile Alliance )標(biāo)準(zhǔn)化,被稱為固件升級(jí)管理對(duì)象(FUMO, Firmware Update Management Object)。 FOTA技術(shù)的出現(xiàn)解決了人們通常升級(jí)固件 (Firmware )必須通過(guò)有線連接的缺點(diǎn),能夠使運(yùn)營(yíng)商方便地對(duì)移動(dòng)電話、PDA 等無(wú)線連接的終端設(shè)備進(jìn)行無(wú)線升級(jí),用戶無(wú)需訪問(wèn)服務(wù)提供商的站點(diǎn)就可以 將設(shè)備升級(jí)到最新的版本,享受到更貼心周到的服務(wù)。
FOTA升級(jí)的優(yōu)勢(shì)在于,其用于升級(jí)的軟件升級(jí)包不會(huì)影響原有的鏡像文 件,即使由于各種原因造成的升級(jí)失敗,也能使固件回退到升級(jí)前的狀態(tài),所 以FOTA升級(jí)不會(huì)因升級(jí)失敗(例如,升級(jí)過(guò)程中斷電等原因造成的升級(jí)失敗) 而導(dǎo)致設(shè)備無(wú)法使用,用戶可以放心地進(jìn)行FOTA升級(jí)。
現(xiàn)有技術(shù)的FOTA升級(jí)技術(shù)只針對(duì)一個(gè)設(shè)備進(jìn)行升級(jí)。而當(dāng)有附加的功能 模塊嵌入終端時(shí),很可能功能模塊和終端都需要升級(jí)。這時(shí)就需要對(duì)一個(gè)設(shè)備 進(jìn)行至少兩次FOTA升級(jí)。這種方式使得運(yùn)營(yíng)商對(duì)這類設(shè)備升級(jí)的管理非常困 難。例如,當(dāng)終端連接有無(wú)線功能模塊(如無(wú)線上網(wǎng)卡)時(shí),現(xiàn)有技術(shù)通常需 要分別對(duì)終端和無(wú)線上網(wǎng)卡進(jìn)行升級(jí)。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題是提供一種固件空中升級(jí)的方法及終端,用以 簡(jiǎn)化設(shè)備的FOTA升級(jí),提高升級(jí)過(guò)程的安全性。為解決上述技術(shù)問(wèn)題,本發(fā)明提供方案如下
一種固件空中升級(jí)(FOTA)的方法,應(yīng)用于對(duì)終端和與所述終端連接的 至少一個(gè)功能模塊進(jìn)行固件升級(jí),所述方法包括
步驟A,所述終端通過(guò)空中接口從升級(jí)服務(wù)器下載升級(jí)數(shù)據(jù),得到分別對(duì) 應(yīng)于所述終端和所述功能模塊的升級(jí)文件;
步驟B,所述終端對(duì)所述升級(jí)文件進(jìn)行校驗(yàn),并在升級(jí)文件校驗(yàn)成功后進(jìn) 入步驟C;
步驟C,根據(jù)所述升級(jí)文件,對(duì)對(duì)應(yīng)的終端和功能模塊進(jìn)行升級(jí)。 優(yōu)選地,上述方法中,所述步驟B中,如果任一升級(jí)文件校驗(yàn)失敗,則 進(jìn)入步驟D;
步驟D,所述終端向所述升級(jí)服務(wù)器上報(bào)升級(jí)失敗消息,并結(jié)束流程。 優(yōu)選地,上述方法中,所述步驟C中,如果所述對(duì)應(yīng)的終端和功能模塊 中的任一個(gè)升級(jí)失敗,則進(jìn)入所述步驟D;如果所述對(duì)應(yīng)的終端和功能模塊均 升級(jí)成功,則進(jìn)入步驟E;
步驟E,所述終端向所述升級(jí)服務(wù)器上報(bào)升級(jí)成功消息,并結(jié)束流程。 優(yōu)選地,上述方法中,在所述步驟C中,所述終端從最后校驗(yàn)成功的升 級(jí)文件開(kāi)始,根據(jù)各個(gè)升級(jí)文件,對(duì)對(duì)應(yīng)的終端或功能模塊逐個(gè)進(jìn)行升級(jí)。
優(yōu)選地,上述方法中,設(shè)置一個(gè)用于指示終端當(dāng)前所處的操作階段的升級(jí) 狀態(tài)機(jī),且所述升級(jí)狀態(tài)機(jī)的初始狀態(tài)為無(wú)升級(jí)狀態(tài),所述升級(jí)狀態(tài)機(jī)還包括 對(duì)應(yīng)步驟A中的下載升級(jí)數(shù)據(jù)操作的升級(jí)數(shù)據(jù)下載狀態(tài)、對(duì)應(yīng)于步驟B中各 個(gè)升級(jí)文件的校驗(yàn)操作的校驗(yàn)狀態(tài)、對(duì)應(yīng)于步驟C中的所述終端或功能模塊 的升級(jí)操作的升級(jí)狀態(tài)、以及對(duì)應(yīng)于步驟D或步驟E中的上報(bào)操作的升級(jí)上 報(bào)狀態(tài);
所述終端在執(zhí)行所述步驟A、 B、 C和D中的各個(gè)操作時(shí),進(jìn)一步在當(dāng)前 操作成功執(zhí)行完畢后,將上述升級(jí)狀態(tài)機(jī)置為下一操作所對(duì)應(yīng)的狀態(tài);
并且,所述終端在每次啟動(dòng)后,讀取所述升級(jí)狀態(tài)機(jī)的當(dāng)前狀態(tài),并從所 述升級(jí)狀態(tài)機(jī)的當(dāng)前狀態(tài)所對(duì)應(yīng)的操作開(kāi)始繼續(xù)執(zhí)行,其中,當(dāng)所述升級(jí)狀態(tài) 機(jī)的當(dāng)前狀態(tài)為無(wú)升級(jí)狀態(tài)時(shí),結(jié)束流程。
優(yōu)選地,上述方法中,預(yù)先設(shè)置一個(gè)用于指示上報(bào)狀態(tài)的升級(jí)上報(bào)標(biāo)志,所述升級(jí)上報(bào)標(biāo)志的初始狀態(tài)為不上報(bào);所述方法還包括
所述步驟C中,如果任一升級(jí)文件校驗(yàn)失敗,則將所述升級(jí)上報(bào)標(biāo)志設(shè)
置為上報(bào)失敗,并將所述升級(jí)狀態(tài)機(jī)設(shè)置為升級(jí)上^^良狀態(tài);
所述步驟C中,如果所述對(duì)應(yīng)的終端和功能^^莫塊均升級(jí)成功,則終端將
所述升級(jí)上報(bào)標(biāo)志設(shè)置為上報(bào)成功,以及將所述升級(jí)狀態(tài)機(jī)設(shè)置為升級(jí)上報(bào)狀
態(tài);
所述終端在啟動(dòng)后,當(dāng)讀取到所述升級(jí)狀態(tài)機(jī)的當(dāng)前狀態(tài)為升級(jí)上報(bào)狀態(tài) 時(shí),則根據(jù)所述升級(jí)上報(bào)標(biāo)志的當(dāng)前狀態(tài),向所述升級(jí)服務(wù)器上報(bào)升級(jí)成功消 息或升級(jí)失敗消息,然后將所述升級(jí)上報(bào)標(biāo)志恢復(fù)為不上報(bào),將所述升級(jí)狀態(tài) 機(jī)恢復(fù)為無(wú)升級(jí)狀態(tài)。
優(yōu)選地,上述方法中,所述功能模塊的個(gè)數(shù)為一個(gè),且所述功能模塊為無(wú) 線上網(wǎng)卡。
本發(fā)明還提供了一種種應(yīng)用于固件空中升級(jí)(FOTA)的終端,所述終端 與至少一個(gè)功能模塊連接,所述終端包括
升級(jí)包獲取單元,用于通過(guò)空中接口從升級(jí)服務(wù)器下載升級(jí)數(shù)據(jù),得到分 別對(duì)應(yīng)于所述終端和所述功能模塊的至少兩個(gè)升級(jí)文件;
校驗(yàn)單元,用于對(duì)所述升級(jí)文件進(jìn)行校驗(yàn),并在升級(jí)文件校驗(yàn)成功后觸發(fā) 升級(jí)單元;
升級(jí)單元,用于在接收到所述校驗(yàn)單元的觸發(fā)后,根據(jù)各個(gè)升級(jí)文件,對(duì) 對(duì)應(yīng)的終端或功能模塊逐個(gè)進(jìn)行升級(jí)。
優(yōu)選地,上述終端中,還包括升級(jí)上報(bào)單元和一用于指示上報(bào)狀態(tài)的升級(jí) 上報(bào)標(biāo)志;
所述校驗(yàn)單元,還用于在所有升級(jí)文件中的任一升級(jí)文件校驗(yàn)失敗時(shí),將 所述升級(jí)上報(bào)標(biāo)志設(shè)置為上報(bào)失?。?br>
所述升級(jí)上報(bào)單元,用于在所述終端每次啟動(dòng)后,讀取所述升級(jí)上報(bào)標(biāo)志, 并在所述升級(jí)上報(bào)標(biāo)志為上報(bào)失敗時(shí),向所述升級(jí)服務(wù)器上報(bào)升級(jí)失敗消息。
優(yōu)選地,上述終端中,
所述升級(jí)單元,還用于在所述對(duì)應(yīng)的終端和功能模塊中的任一個(gè)升級(jí)失敗 時(shí),將所述升級(jí)上報(bào)標(biāo)志設(shè)置為上報(bào)失敗;以及在所述對(duì)應(yīng)的終端和功能模塊均升級(jí)成功時(shí),將所述升級(jí)上報(bào)標(biāo)志設(shè)置為上報(bào)成功;
所述上報(bào)成功單元,還用于在所述終端每次啟動(dòng)后,讀取所述升級(jí)上報(bào)標(biāo) 志,并在所述升級(jí)上報(bào)標(biāo)志為上報(bào)成功時(shí),向所述升級(jí)服務(wù)器上報(bào)升級(jí)成功消
自、
'"、o
優(yōu)選地,上述終端中,所述升級(jí)單元,還用于從最后校驗(yàn)成功的升級(jí)文件 開(kāi)始,根據(jù)各個(gè)升級(jí)文件,對(duì)對(duì)應(yīng)的終端或功能模塊逐個(gè)進(jìn)行升級(jí)。
優(yōu)選地,上述終端中,所述功能模塊的個(gè)數(shù)為一個(gè),且所述功能模塊為無(wú) 線上網(wǎng)卡。
從以上所述可以看出,本發(fā)明提供的固件空中升級(jí)的方法及終端,解決了 終端和相連功能模塊時(shí)同時(shí)進(jìn)行升級(jí)的問(wèn)題。本發(fā)明所述方法,在升級(jí)過(guò)程中
如果出現(xiàn)掉電等情況,仍能夠在設(shè)備重新上電后升級(jí)成功;并且本發(fā)明采用 FOTA升級(jí)方式,保證整個(gè)升級(jí)過(guò)程是可恢復(fù)的,在升級(jí)過(guò)程中如果升級(jí)不成 功也可將恢復(fù)到升級(jí)前的狀態(tài),因此本發(fā)明提高了升級(jí)的可靠性和安全性。
圖1為本發(fā)明實(shí)施例所述固件空中升級(jí)的方法的流程示意圖2為本發(fā)明實(shí)施例1定義的一種升級(jí)包的具體格式示意圖3為本發(fā)明實(shí)施例1所述固件空中升級(jí)的方法的流程示意圖4為本發(fā)明實(shí)施例中通過(guò)輪詢串口 ,判斷無(wú)線模塊是否升級(jí)完成的示意
圖5為本發(fā)明實(shí)施例2所述固件空中升級(jí)的方法的流程示意圖; 圖6為本發(fā)明實(shí)施例中無(wú)線模塊啟動(dòng)模式下的數(shù)據(jù)寫(xiě)入示意圖; 圖7為本發(fā)明實(shí)施例中所述終端的結(jié)構(gòu)示意圖。
具體實(shí)施例方式
本發(fā)明提供了一種固件空中升級(jí)的方法及終端,實(shí)現(xiàn)了終端和與終端相連 的功能模塊同時(shí)升級(jí),并提高了升級(jí)的安全性。
本發(fā)明所述固件空中升級(jí)的方法,應(yīng)用于對(duì)終端和與所述終端連接的至少 一個(gè)功能模塊進(jìn)行固件升級(jí)。如圖l所示,該方法包括步驟11,所述終端通過(guò)空中接口從升級(jí)服務(wù)器下載升級(jí)數(shù)據(jù),并解析所
述升級(jí)數(shù)據(jù),得到分別對(duì)應(yīng)于所述終端和所述功能模塊的至少兩個(gè)升級(jí)文件; 步驟12,所述終端對(duì)各個(gè)升級(jí)文件逐個(gè)進(jìn)行校驗(yàn)如果所有升級(jí)文件都
校驗(yàn)成功后,則進(jìn)入步驟13;如果任一升級(jí)文件校驗(yàn)失敗,則進(jìn)入步驟14; 步驟13,在所有升級(jí)文件都校驗(yàn)成功后,所述終端根據(jù)各個(gè)升級(jí)文件,
對(duì)該升級(jí)文件對(duì)應(yīng)的終端或功能模塊逐個(gè)進(jìn)行升級(jí)如果所述對(duì)應(yīng)的終端和功
能模塊中的任一個(gè)升級(jí)失敗,則進(jìn)入步驟14;如果所述對(duì)應(yīng)的終端和功能模
塊均升級(jí)成功,則進(jìn)入步驟15;
步驟14,所述終端向所述升級(jí)服務(wù)器上報(bào)升級(jí)失敗消息,并結(jié)束本流程。 其中,在上述步驟13中,在所有升級(jí)文件都校驗(yàn)成功后,可以從最后校
驗(yàn)成功的升級(jí)文件開(kāi)始,根據(jù)各個(gè)升級(jí)文件,對(duì)對(duì)應(yīng)的終端或功能模塊逐個(gè)進(jìn)
行升級(jí)。
步驟15,所述終端向所述升級(jí)服務(wù)器上報(bào)升級(jí)成功消息,并結(jié)束流程。 以下通過(guò)終端和與終端相連的一個(gè)無(wú)線模塊(該無(wú)線模塊具體可以是無(wú)線
上網(wǎng)卡)為例,對(duì)上述流程進(jìn)一步說(shuō)明。
<實(shí)施例1>
實(shí)際應(yīng)用中,功能模塊是以各種形式和終端連接在一起的,作為一個(gè)設(shè)備 存在的。運(yùn)營(yíng)商也要求對(duì)這類設(shè)備的升級(jí)必須作為一個(gè)整體看待,因此對(duì)這類 終端和功能模塊的FOTA升級(jí)只能有一個(gè)升級(jí)包。本實(shí)施例提出了一種升級(jí)包 的格式。設(shè)備從空口接收的升級(jí)包經(jīng)過(guò)正確的解包,在終端上生成了新的終端 升級(jí)包和無(wú)線模塊升級(jí)包,并分別保存在終端和無(wú)線模塊的Flash中。
如果希望實(shí)現(xiàn)終端和無(wú)線模塊一起升級(jí),必須定義好升級(jí)包的格式。本實(shí) 施例中可能的升級(jí)情況包括僅升級(jí)終端、僅升級(jí)無(wú)線模塊、同時(shí)升級(jí)終端和 無(wú)線模塊。圖2所示為本實(shí)施例定義的一種升級(jí)包的具體格式,需要說(shuō)明的是, 該升級(jí)包的格式并非用以限定本發(fā)明。圖2中的升級(jí)包包括以下幾個(gè)字段
版本號(hào)字段32字節(jié),用于存放升級(jí)包的版本號(hào)。在升級(jí)的過(guò)程中將該 版本號(hào)暫存在終端的非易失性存儲(chǔ)器(如閃存Flash)中,如果升級(jí)成功則才巴 該版本號(hào)寫(xiě)入設(shè)備版本號(hào)。設(shè)備版本號(hào)作為設(shè)備版本標(biāo)識(shí),用于提供給升級(jí)服 務(wù)器,升級(jí)服務(wù)器根據(jù)設(shè)備版本號(hào),獲取版本信息,進(jìn)而決定本次是否對(duì)設(shè)備進(jìn)行升級(jí)以及下發(fā)哪個(gè)升級(jí)包用于升級(jí)。
終端升級(jí)包長(zhǎng)度字段4字節(jié),用于存放終端升級(jí)包的長(zhǎng)度值,取值只能
為0或正整數(shù);
無(wú)線模塊升級(jí)包長(zhǎng)度字段4字節(jié),存放相連無(wú)線模塊升級(jí)包的長(zhǎng)度值, 取值只能為0或正整數(shù);
終端升級(jí)包字段第40字節(jié)到第(終端升級(jí)包長(zhǎng)度值+39)字節(jié)為終端升 級(jí)包;
無(wú)線模塊升級(jí)包字段第(終端升級(jí)包長(zhǎng)度值+40)字節(jié)到第(終端升級(jí) 包長(zhǎng)度值+無(wú)線模塊升級(jí)包長(zhǎng)度值+39)字節(jié)為無(wú)線模塊的升級(jí)包。 升級(jí)服務(wù)器在制作上述升級(jí)包時(shí)需要注意,終端升級(jí)包長(zhǎng)度字段和無(wú)線模塊升 級(jí)包長(zhǎng)度字段的取值不能同時(shí)為0,否則升級(jí)沒(méi)有意義。下載到終端的升級(jí) 包會(huì)基于這個(gè)條件,也就是至少有一個(gè)設(shè)備(如終端或無(wú)線模塊)需要升級(jí), 其升級(jí)包長(zhǎng)度不為0;
升級(jí)服務(wù)器在對(duì)升級(jí)包打包時(shí),需要先把終端升級(jí)包長(zhǎng)度值和無(wú)線模塊升 級(jí)包長(zhǎng)度值從主機(jī)字序轉(zhuǎn)化為網(wǎng)絡(luò)字序再分別寫(xiě)入終端升級(jí)包長(zhǎng)度字段和無(wú) 線模塊升級(jí)包長(zhǎng)度字段。在終端側(cè)解包時(shí),需要將這兩個(gè)長(zhǎng)度值從網(wǎng)絡(luò)字序轉(zhuǎn) 化成主機(jī)字序。
本實(shí)施例中的校驗(yàn)升級(jí)采用校驗(yàn)終端- >校驗(yàn)升級(jí)無(wú)線模塊- >升級(jí)終
端的先后順序。本實(shí)施例中設(shè)置幾個(gè)關(guān)鍵的狀態(tài)機(jī)變量,用于記錄升級(jí)進(jìn)行到 了哪個(gè)階段。由于整個(gè)升級(jí)過(guò)程需要反復(fù)重啟設(shè)備,并在終端的啟動(dòng)模式下進(jìn) 行校驗(yàn)和升級(jí),因此,這幾個(gè)變量必須保存在非易失性存儲(chǔ)器(如Flash)中。 本實(shí)施例中定義的狀態(tài)機(jī)變量有
升級(jí)狀態(tài)機(jī),用于指示終端當(dāng)前所處的操作階段。該升級(jí)狀態(tài)機(jī)可能的狀 態(tài)包括
作為初始狀態(tài)的無(wú)升級(jí)狀態(tài),在不需要升級(jí)操作時(shí),升級(jí)狀態(tài)機(jī)的默認(rèn)狀 態(tài)為無(wú)升級(jí)狀態(tài);
對(duì)應(yīng)于下載升級(jí)數(shù)據(jù)操作的升級(jí)數(shù)據(jù)下載狀態(tài);
對(duì)應(yīng)于各個(gè)升級(jí)文件的校驗(yàn)操作的校驗(yàn)狀態(tài),具體包括校驗(yàn)終端狀態(tài)(對(duì) 應(yīng)于終端升級(jí)文件的校驗(yàn)操作)和校驗(yàn)無(wú)線模塊狀態(tài)(對(duì)應(yīng)于無(wú)線模塊升級(jí)文件的校驗(yàn)操作)等;
對(duì)應(yīng)于所述終端或無(wú)線模塊的升級(jí)操作的升級(jí)狀態(tài),又具體可以包括升 級(jí)終端狀態(tài)和升級(jí)無(wú)線模塊狀態(tài)等;
對(duì)應(yīng)于上報(bào)操作(如上報(bào)升級(jí)成功消息或升級(jí)失敗消息的)的升級(jí)上報(bào)狀
太
心o
另外,本實(shí)施例在校驗(yàn)無(wú)線模塊升級(jí)文件后直接對(duì)無(wú)線模塊進(jìn)行升級(jí),因 此可以將校驗(yàn)無(wú)線模塊狀態(tài)和升級(jí)無(wú)線模塊狀態(tài)合并成校驗(yàn)升級(jí)無(wú)線模塊狀 態(tài)。并且由于無(wú)線模塊處理升級(jí)過(guò)程中時(shí),終端需要判斷無(wú)線模塊何時(shí)升級(jí)完 畢,因此還可以設(shè)置一個(gè)校驗(yàn)升級(jí)無(wú)線模塊且升級(jí)標(biāo)志已打開(kāi)狀態(tài),在該狀態(tài) 中終端將判斷無(wú)線模塊是否升級(jí)完畢。
另外考慮到有時(shí)候可能僅升級(jí)終端和無(wú)線模塊中的一個(gè),因此上述升級(jí)狀
態(tài)機(jī)還可以包括僅升級(jí)無(wú)線模塊狀態(tài)、僅升級(jí)無(wú)線模塊且升級(jí)標(biāo)志已打開(kāi)狀 太
升級(jí)上報(bào)標(biāo)志,用于指示上報(bào)狀態(tài)的升級(jí)上報(bào)標(biāo)志,該標(biāo)志指示終端是否 需要向升級(jí)服務(wù)器上報(bào)消息、以及上報(bào)升級(jí)成功消息還是上報(bào)升級(jí)失敗消息。 該標(biāo)志的初始狀態(tài)為不上報(bào),即不向所述升級(jí)服務(wù)器上報(bào)任何消息。該標(biāo)志還 包括上報(bào)成功或上報(bào)失敗狀態(tài),分別用于指示終端在進(jìn)入正常模式后向升級(jí)服 務(wù)器上報(bào)升級(jí)成功消息或上報(bào)升級(jí)失敗消息。
終端操作標(biāo)志,用于指示針對(duì)終端自身的操作,具體可以包括終端無(wú)操作、 校驗(yàn)終端、升級(jí)終端、校驗(yàn)且升級(jí)終端等。該標(biāo)志的初始值指示終端無(wú)操作。
上述三個(gè)狀態(tài)機(jī)變量,可以預(yù)先設(shè)定好各個(gè)狀態(tài)對(duì)應(yīng)的具體數(shù)值,從而在 終端升級(jí)過(guò)程中,可以根據(jù)該變量的當(dāng)前數(shù)值,確定該變量當(dāng)前指示的狀態(tài)。
如圖3所示,本實(shí)施例中按照校驗(yàn)終端-〉校驗(yàn)升級(jí)無(wú)線模塊->升級(jí)終
端的升級(jí)過(guò)程實(shí)現(xiàn)對(duì)終端和無(wú)線模塊的校驗(yàn)升級(jí),整個(gè)升級(jí)步驟描述如下
1、終端將升級(jí)狀態(tài)機(jī)置為升級(jí)數(shù)據(jù)下載狀態(tài),升級(jí)上報(bào)標(biāo)志置為上報(bào)升 級(jí)失敗(即升級(jí)上報(bào)標(biāo)志的數(shù)值指示上報(bào)升級(jí)失敗消息)后,從空中接口接收
升級(jí)服務(wù)器發(fā)送的升級(jí)數(shù)據(jù)并保存在RAM中,然后解析升級(jí)數(shù)據(jù),從中提取 版本號(hào)域并暫存在終端Flash中,并得到終端和無(wú)線模塊的升級(jí)包長(zhǎng)度,進(jìn)而 提取并生成對(duì)應(yīng)于終端的終端升級(jí)包和對(duì)應(yīng)于無(wú)線模塊的無(wú)線模塊升級(jí)包共兩個(gè)升級(jí)文件。當(dāng)然,如果終端或無(wú)線模塊的升級(jí)包長(zhǎng)度為0,則不必提取生 成相應(yīng)的升級(jí)文件。
2、 判斷無(wú)線模塊升級(jí)包長(zhǎng)度是否為0,若是則將終端升級(jí)包寫(xiě)入終端 Flash,置升級(jí)狀態(tài)機(jī)為升級(jí)終端狀態(tài),置終端操作標(biāo)志為校驗(yàn)且升級(jí)終端, 然后跳到第11步執(zhí)行;否則繼續(xù)執(zhí)行第3步。
3、 終端將提取出的無(wú)線模塊升級(jí)包寫(xiě)入無(wú)線模塊的Flash,然后進(jìn)入第4步。
4、 終端判斷終端升級(jí)包的長(zhǎng)度是否為0,若是則跳到第12步執(zhí)行,否則 執(zhí)行第5步。
5、 終端將終端升級(jí)包寫(xiě)入終端的Flash中,設(shè)置升級(jí)狀態(tài)機(jī)為校驗(yàn)終端
息),設(shè)置終端操作標(biāo)志為校驗(yàn)終端,然后執(zhí)行第6步。
6、 重啟終端,在啟動(dòng)模式下校驗(yàn)終端,對(duì)終端升級(jí)包進(jìn)行校驗(yàn);校驗(yàn)完 成后得到校驗(yàn)結(jié)果,將升級(jí)狀態(tài)機(jī)置為校驗(yàn)升級(jí)無(wú)線模塊狀態(tài),并根據(jù)校驗(yàn)結(jié)
上報(bào)升級(jí)失敗消息),校驗(yàn)成功不置該升級(jí)上報(bào)標(biāo)志,保持初始的不上報(bào)狀態(tài)。
7、 終端繼續(xù)啟動(dòng),進(jìn)入終端操作系統(tǒng)后,終端查看升級(jí)上報(bào)標(biāo)志判斷終 端校驗(yàn)是否成功若校驗(yàn)成功(升級(jí)上報(bào)標(biāo)志位為不上報(bào))則執(zhí)行第8步,否 則置升級(jí)狀態(tài)機(jī)位為升級(jí)上報(bào)狀態(tài),并跳至第15步。
8、 置升級(jí)狀態(tài)機(jī)為校驗(yàn)升級(jí)無(wú)線模塊狀態(tài),通過(guò)終端和無(wú)線模塊的交互 命令,打開(kāi)無(wú)線模塊的升級(jí)標(biāo)志。
9、 置升級(jí)狀態(tài)機(jī)為校驗(yàn)升級(jí)無(wú)線模塊且升級(jí)標(biāo)志已打開(kāi)狀態(tài),然后開(kāi)始 校驗(yàn)并升級(jí)無(wú)線模塊。
10、 本實(shí)施例中終端通過(guò)串口與無(wú)線模塊連接,因此終端可以通過(guò)輪詢串 口,根據(jù)該串口是否可以打開(kāi),判斷無(wú)線模塊是否升級(jí)完成;當(dāng)終端輪詢窗口 直到串口可以打開(kāi)時(shí),終端設(shè)置升級(jí)狀態(tài)機(jī)為升級(jí)終端,并通過(guò)與無(wú)線模塊之
間的交互命令,查看無(wú)線模塊是否升級(jí)成功若成功,則設(shè)置終端操作標(biāo)志為 升級(jí)終端,執(zhí)行第11步;否則設(shè)置升級(jí)狀態(tài)機(jī)為升級(jí)上報(bào)狀態(tài),并設(shè)置升級(jí) 上報(bào)標(biāo)志為上報(bào)失敗,執(zhí)行第15步。這里,本實(shí)施例通過(guò)輪詢串口以判斷無(wú)線模塊升級(jí)是否完成。終端在打開(kāi) 無(wú)線模塊升級(jí)標(biāo)志后需要重新啟動(dòng)無(wú)線模塊,在啟動(dòng)模式下升級(jí)無(wú)線模塊。一 般是先打開(kāi)無(wú)線模塊的升級(jí)標(biāo)志,再發(fā)送重啟指令讓無(wú)線模塊重啟,在啟動(dòng)模
式下升級(jí)無(wú)線模塊。但重啟之后需要判斷何時(shí)設(shè)備已經(jīng)完成了 FOTA升級(jí)。如 圖4所示,并實(shí)施例在這里采用了輪詢串口的方法。由于FOTA升級(jí)時(shí)無(wú)線模 塊正處于啟動(dòng)模式,這時(shí)是沒(méi)有串口是激活的,如果終端試圖打開(kāi)串口必然返 回打開(kāi)失敗的結(jié)果。只要打開(kāi)失敗就等一段時(shí)間再試圖打開(kāi)一次串口,直到某 次打開(kāi)串口成功,證明此時(shí)無(wú)線模塊已完成啟動(dòng)并枚舉出串口,說(shuō)明無(wú)線模塊 的FOTA升級(jí)已經(jīng)結(jié)束。這時(shí)可以在打開(kāi)串口后繼續(xù)向無(wú)線模塊發(fā)送指令,查 詢無(wú)線模塊是否升級(jí)成功。
11、 重啟終端,啟動(dòng)模式下按照終端操作標(biāo)志升級(jí)或校驗(yàn)升級(jí)終端。在終 端升級(jí)成功后,將升級(jí)上報(bào)標(biāo)志置為上報(bào)成功,將升級(jí)狀態(tài)機(jī)置為升級(jí)上報(bào)狀 態(tài),執(zhí)行第15步。
12、 終端將無(wú)線模塊升級(jí)包寫(xiě)入無(wú)線模塊的Flash,執(zhí)行步驟13。
13、 終端置升級(jí)狀態(tài)機(jī)為僅升級(jí)無(wú)線模塊狀態(tài),通過(guò)與無(wú)線模塊交互命令, 打開(kāi)無(wú)線模塊的升級(jí)標(biāo)志。
14、 置升級(jí)狀態(tài)機(jī)為僅升級(jí)無(wú)線模塊且升級(jí)標(biāo)志已打開(kāi)狀態(tài),此后無(wú)線才莫 塊將進(jìn)行升級(jí);終端輪詢串口直到串口可以打開(kāi),然后置升級(jí)狀態(tài)機(jī)為升級(jí)上 報(bào)狀態(tài),并通過(guò)與無(wú)線模塊之間的交互命令,查看無(wú)線模塊是否升級(jí)成功若成 功若成功,則設(shè)置升級(jí)上報(bào)標(biāo)志為上報(bào)成功;否則設(shè)置升級(jí)上報(bào)標(biāo)志為上報(bào) 失敗;然后重啟終端,終端重啟后執(zhí)行第15步。
15、 終端查看升級(jí)上報(bào)標(biāo)志,若為上報(bào)成功,則將暫存的版本號(hào)寫(xiě)入終端 版本號(hào),并向升級(jí)服務(wù)器上報(bào)升級(jí)成功消息;若為上報(bào)失敗,則將暫存的版本 號(hào)清空,并向升級(jí)服務(wù)器上報(bào)升級(jí)失敗消息。然后終端將升級(jí)狀態(tài)機(jī)、升級(jí)上 報(bào)標(biāo)志和終端操作標(biāo)志都恢復(fù)為初始值。
上述過(guò)程中,終端在任何一次啟動(dòng)后,都需要先判斷升級(jí)上報(bào)標(biāo)志,如果 升級(jí)上報(bào)標(biāo)志不是不上報(bào),就將升級(jí)狀態(tài)機(jī)置為升級(jí)上報(bào)狀態(tài),跳到第15步 繼續(xù)執(zhí)行。
由于一次升級(jí)過(guò)程其實(shí)是一個(gè)先校驗(yàn)升級(jí)包再進(jìn)行升級(jí)的過(guò)程,所以本實(shí)施例采用先對(duì)曱進(jìn)行校驗(yàn),再對(duì)乙進(jìn)行校驗(yàn)升級(jí),最后對(duì)曱直接進(jìn)行升級(jí)的流 程,從而能夠保證在升級(jí)完成前任何一個(gè)步驟出了問(wèn)題,都能恢復(fù)到升級(jí)前的 版本。
從以上步驟可以看出,本實(shí)施例不僅實(shí)現(xiàn)了終端和無(wú)線^^塊的升級(jí),并且 還根據(jù)升級(jí)狀態(tài)機(jī)進(jìn)行升級(jí)控制,提高了升級(jí)的安全性。例如,在升級(jí)過(guò)程中, 除升級(jí)數(shù)據(jù)下載狀態(tài)外,其他狀態(tài)下如果遇到設(shè)備掉電的情況,本實(shí)施例的升 級(jí)過(guò)程在重新上電后仍然可以獲得成功。以下是處于各種升級(jí)狀態(tài)機(jī)的情況下
的掉電處理的i兌明
一、 在升級(jí)數(shù)據(jù)下載時(shí)發(fā)生掉電時(shí),重新上電后首先會(huì)判斷升級(jí)上報(bào)標(biāo)志,
由于此時(shí)為上報(bào)失敗,則跳到第15步執(zhí)行,向服務(wù)器上報(bào)升級(jí)失敗消息,整 個(gè)升級(jí)過(guò)程失敗。
二、 在校驗(yàn)終端升級(jí)文件時(shí)發(fā)生掉電時(shí),重新上電后從升級(jí)過(guò)程的第6 步起繼續(xù)執(zhí)行,重新校驗(yàn)終端。
三、 在校驗(yàn)升級(jí)無(wú)線模塊狀態(tài)掉電時(shí),重新上電后會(huì)執(zhí)行第8步,繼續(xù)通 過(guò)和無(wú)線模塊的交互命令通知無(wú)線模塊校驗(yàn)并升級(jí)。
四、 在校驗(yàn)升級(jí)無(wú)線模塊且升級(jí)標(biāo)志已打開(kāi)狀態(tài)掉電時(shí),重新上電后無(wú)線 模塊仍在重新執(zhí)行校驗(yàn)并升級(jí),這時(shí)執(zhí)行第9步,終端通過(guò)輪詢串口的方法能 判斷出何時(shí)無(wú)線模塊升級(jí)完成。
五、 在升級(jí)終端狀態(tài)掉電時(shí),重新上電后執(zhí)行第ll步,終端繼續(xù)升級(jí)。
六、 在僅升級(jí)無(wú)線模塊狀態(tài)時(shí)掉電,重新上電后會(huì)繼續(xù)執(zhí)行第13步,繼 續(xù)打開(kāi)無(wú)線模塊升級(jí)標(biāo)志。
七、 在僅升級(jí)無(wú)線模塊且升級(jí)標(biāo)志已打開(kāi)狀態(tài)時(shí)掉電,重新上電后執(zhí)行第 14步,輪詢直到無(wú)線模塊升級(jí)完成。
八、 在升級(jí)上報(bào)狀態(tài)掉電,重新上電后繼續(xù)進(jìn)入升級(jí)上報(bào)狀態(tài)。 <實(shí)施例2>
本實(shí)施例的校驗(yàn)升級(jí),采用校驗(yàn)無(wú)線模塊->校驗(yàn)升級(jí)終端->升級(jí)無(wú)線模塊
的順序進(jìn)行。
本實(shí)施例中的升級(jí)狀態(tài)機(jī)的狀態(tài)包括無(wú)升級(jí)狀態(tài)、升級(jí)數(shù)據(jù)下載狀態(tài)、 校驗(yàn)無(wú)線模塊狀態(tài)、校驗(yàn)無(wú)線模塊且校驗(yàn)標(biāo)志已打開(kāi)狀態(tài)、校驗(yàn)升級(jí)終端狀態(tài)、升級(jí)無(wú)線模塊狀態(tài)、升級(jí)無(wú)線模塊且升級(jí)標(biāo)志已打開(kāi)狀態(tài)、僅升級(jí)終端狀態(tài)、 升級(jí)上報(bào)狀態(tài)。無(wú)升級(jí)時(shí)的默認(rèn)狀態(tài)為無(wú)升級(jí)狀態(tài)。
本實(shí)施例中的升級(jí)上報(bào)標(biāo)志,可能為不上報(bào)、上報(bào)成功、上報(bào)失敗。每次 系統(tǒng)啟動(dòng)后都會(huì)檢測(cè)該狀態(tài)標(biāo)志,若該標(biāo)志不是不上報(bào)狀態(tài)就需要上報(bào)給升級(jí) 服務(wù)器并結(jié)束升級(jí)過(guò)程。無(wú)升級(jí)時(shí)的默認(rèn)值是不上報(bào)。
本實(shí)施例另外設(shè)置了一個(gè)無(wú)線模塊操作標(biāo)志的狀態(tài)機(jī)變量,與實(shí)施例1
中的終端操作標(biāo)志類似,用于指示針對(duì)無(wú)線模塊的操作,具體可以包括校驗(yàn) 無(wú)線模塊、升級(jí)無(wú)線模塊、校驗(yàn)升級(jí)無(wú)線模塊等。
如圖5所示,本實(shí)施例中按照校驗(yàn)無(wú)線模塊->校驗(yàn)升級(jí)終端->升級(jí)無(wú)線模 塊的升級(jí)過(guò)程,整個(gè)升級(jí)步驟描述如下
1、 終端將升級(jí)狀態(tài)機(jī)置為升級(jí)數(shù)據(jù)下載狀態(tài),升級(jí)上報(bào)標(biāo)志置為上報(bào)升 級(jí)失敗(即升級(jí)上報(bào)標(biāo)志的數(shù)值指示上報(bào)升級(jí)失敗消息)后,從空中接口接收 升級(jí)服務(wù)器發(fā)送的升級(jí)數(shù)據(jù)并保存在RAM中,然后解析升級(jí)數(shù)據(jù),從中提取 版本號(hào)域并暫存在終端Flash中,并得到終端和無(wú)線模塊的升級(jí)包長(zhǎng)度,進(jìn)而 提取并生成對(duì)應(yīng)于終端的終端升級(jí)包和對(duì)應(yīng)于無(wú)線模塊的無(wú)線模塊升級(jí)包共 兩個(gè)升級(jí)文件。當(dāng)然,如果終端或無(wú)線模塊的升級(jí)包長(zhǎng)度為0,則不必提取生 成相應(yīng)的升級(jí)文件。
2、 終端判斷終端升級(jí)包長(zhǎng)度是否為0:若是則跳到第14步執(zhí)行;否則執(zhí) 行第3步。
3、 終端將提取的終端升級(jí)包寫(xiě)入終端的Flash中,然后進(jìn)入第4步。
4、 終端判斷無(wú)線模塊的升級(jí)包長(zhǎng)度是否為0,若是則跳到第16步執(zhí)行, 否則執(zhí)行第5步。
5、 終端將無(wú)線模塊的升級(jí)包文件寫(xiě)入無(wú)線模塊的Flash中,設(shè)置升級(jí)狀 態(tài)機(jī)為校驗(yàn)無(wú)線模塊狀態(tài)。
6、 終端和無(wú)線模塊的交互命令,打開(kāi)無(wú)線模塊的校驗(yàn)標(biāo)志,并置升級(jí)狀 態(tài)機(jī)為校驗(yàn)無(wú)線模塊且校驗(yàn)標(biāo)志已打開(kāi)狀態(tài)。
7、 校驗(yàn)無(wú)線模塊若校驗(yàn)失敗將升級(jí)上報(bào)標(biāo)志置為上報(bào)失敗;若校驗(yàn)成 功,則升級(jí)上報(bào)標(biāo)志不變,仍為不上報(bào)。
8、 終端檢查升級(jí)上報(bào)標(biāo)志若為上報(bào)失敗則跳到第17步;否則執(zhí)行第9步。
9、 設(shè)置升級(jí)狀態(tài)機(jī)為校驗(yàn)升級(jí)終端,然后重啟終端校驗(yàn)并升級(jí)若升級(jí) 失敗,則將升級(jí)狀態(tài)機(jī)置為升級(jí)上報(bào)狀態(tài),升級(jí)上報(bào)標(biāo)志置為上報(bào)失敗;若升 級(jí)成功,則將升級(jí)狀態(tài)機(jī)置為升級(jí)無(wú)線模塊。
10、 終端進(jìn)入操作系統(tǒng)后,判斷終端升級(jí)是否成功若成功,執(zhí)行第11 步;若失敗,則跳到第17步執(zhí)行。
11 、根據(jù)無(wú)線模塊操作標(biāo)志判斷需要做的操作若為升級(jí)則升級(jí)無(wú)線模塊; 若為校驗(yàn)升級(jí)則校驗(yàn)并升級(jí)無(wú)線模塊,打開(kāi)無(wú)線模塊的升級(jí)標(biāo)志,將升級(jí)狀態(tài) 機(jī)置為升級(jí)無(wú)線模塊且升級(jí)標(biāo)志已打開(kāi)狀態(tài)。
12、 升級(jí)或校驗(yàn)升級(jí)無(wú)線模塊。
13、 根據(jù)無(wú)線模塊升級(jí)結(jié)果寫(xiě)升級(jí)上報(bào)標(biāo)志,若升級(jí)成功則將升級(jí)上報(bào)標(biāo) 志置為上報(bào)成功,若升級(jí)失敗則將升級(jí)上報(bào)標(biāo)志置為上報(bào)失??;然后跳到第 17步執(zhí)行。
14、 將無(wú)線模塊升級(jí)包寫(xiě)入無(wú)線模塊Flash。
15、 置無(wú)線模塊操作標(biāo)志為校驗(yàn)升級(jí),跳到第12步執(zhí)行。
16、 將終端升級(jí)包寫(xiě)入終端Flash,校驗(yàn)并升級(jí)終端,升級(jí)完成后,將升 級(jí)狀態(tài)機(jī)置為升級(jí)上報(bào)狀態(tài),并根據(jù)升級(jí)結(jié)果寫(xiě)入升級(jí)上報(bào)標(biāo)志若升級(jí)成功, 則將升級(jí)上報(bào)標(biāo)志置為上報(bào)成功;若升級(jí)失敗,則將升級(jí)上報(bào)標(biāo)志置為上報(bào)失 敗。
17、 終端查看升級(jí)上報(bào)標(biāo)志,若為上報(bào)成功,則將暫存的版本號(hào)寫(xiě)入終端 版本號(hào),并向升級(jí)服務(wù)器上報(bào)升級(jí)成功消息;若為上報(bào)失敗,則將暫存的版本 號(hào)清空,并向升級(jí)服務(wù)器上報(bào)升級(jí)失敗消息。然后終端將升級(jí)狀態(tài)機(jī)、升級(jí)上 報(bào)標(biāo)志和終端操作標(biāo)志都恢復(fù)為初始值。
上述過(guò)程中,終端在任何一次啟動(dòng)后,都需要先判斷升級(jí)上報(bào)標(biāo)志,如果 升級(jí)上報(bào)標(biāo)志不是不上報(bào),就將升級(jí)狀態(tài)機(jī)置為升級(jí)上報(bào)狀態(tài),跳到第17步 繼續(xù)執(zhí)行。
從以上步驟可以看出,與實(shí)施例l相類似,本實(shí)施例不僅實(shí)現(xiàn)了終端和無(wú) 線模塊的升級(jí),并且還根據(jù)升級(jí)狀態(tài)機(jī)進(jìn)行升級(jí)控制,提高了升級(jí)的安全性。 例如,在升級(jí)過(guò)程中,除升級(jí)數(shù)據(jù)下載狀態(tài)外,其他狀態(tài)下如果遇到設(shè)備掉電的情況,本實(shí)施例的升級(jí)過(guò)程在重新上電后仍然可以獲得成功。以下是處于各
種升級(jí)狀態(tài)機(jī)的情況下的掉電處理的說(shuō)明
一、 進(jìn)入升級(jí)數(shù)據(jù)下載狀態(tài)時(shí)發(fā)生掉電,已將升級(jí)狀態(tài)上報(bào)標(biāo)志置為上報(bào) 失敗,重啟會(huì)跳到第17步執(zhí)行,上報(bào)升級(jí)失敗。
二、 進(jìn)入校驗(yàn)無(wú)線模塊升級(jí)文件狀態(tài)時(shí)發(fā)生掉電,上電后執(zhí)行第6步,繼 續(xù)通過(guò)指令打開(kāi)無(wú)線模塊校驗(yàn)標(biāo)志。
三、 進(jìn)入校驗(yàn)無(wú)線模塊狀態(tài),打開(kāi)無(wú)線模塊的校驗(yàn)標(biāo)志,此時(shí)如果發(fā)生掉 電,在上電以后將重新校驗(yàn)無(wú)線模塊;
四、 進(jìn)入校驗(yàn)無(wú)線模塊且校驗(yàn)標(biāo)志已打開(kāi)狀態(tài)時(shí)發(fā)生掉電,上電后執(zhí)行第 7步,輪詢串口直到無(wú)線模塊升級(jí)完成。
五、 進(jìn)入校驗(yàn)升級(jí)終端狀態(tài)時(shí)發(fā)生掉電,上電后終端在啟動(dòng)模式下繼續(xù)校 驗(yàn),直到校驗(yàn)完成。
六、 進(jìn)入升級(jí)無(wú)線模塊狀態(tài)時(shí)發(fā)生掉電,上電后繼續(xù)打開(kāi)無(wú)線模塊升級(jí)標(biāo)
志o
七、 進(jìn)入升級(jí)無(wú)線模塊且升級(jí)標(biāo)志已打開(kāi)狀態(tài)時(shí)發(fā)生掉電,上電后無(wú)線模 塊仍在升級(jí),終端繼續(xù)輪詢串口,直到無(wú)線模塊升級(jí)完成。
八、 進(jìn)入僅升級(jí)終端狀態(tài)時(shí)發(fā)生掉電,上電后終端在啟動(dòng)模式下校驗(yàn)升級(jí), 直到校驗(yàn)升級(jí)完成。
九、 進(jìn)入升級(jí)上報(bào)狀態(tài)時(shí)發(fā)生掉電,上電后終端繼續(xù)上報(bào)升級(jí)結(jié)果。 由此可見(jiàn),本實(shí)施例對(duì)于升級(jí)的任何階段都是掉電保護(hù)的,充分保證了用
戶FOTA升級(jí)的可靠性和安全性。
最后,結(jié)合圖6,對(duì)本實(shí)施例中無(wú)線模塊啟動(dòng)模式的數(shù)據(jù)寫(xiě)入進(jìn)行說(shuō)明。 無(wú)線模塊的重啟是通過(guò)終端的命令交互來(lái)控制的。無(wú)線模塊在收到重啟命 令后,需要先做一些其他工作后再重啟,而并不是一收到重啟命令后就會(huì)馬上 重啟。本實(shí)施例中需要終端在啟動(dòng)模式下向無(wú)線模塊傳送升級(jí)包,而無(wú)線模塊 在上電一段時(shí)間后(如上電3秒后)才處于啟動(dòng)模式。并且,在無(wú)線模塊的啟 動(dòng)模式下向無(wú)線模塊進(jìn)行一次寫(xiě)操作,將使得無(wú)線模塊一直保持在啟動(dòng)模式 下,直到有新的控制命令指示無(wú)線模塊跳出啟動(dòng)模式。本實(shí)施例為保證升級(jí)包 的傳送的可靠性,終端在發(fā)送控制無(wú)線模塊的重啟的命令后,采用每隔一定時(shí)間輪詢一次無(wú)線模塊的辦法,向無(wú)線模塊寫(xiě)入任意數(shù)據(jù),直到寫(xiě)失敗,寫(xiě)失敗 表明此時(shí)無(wú)線模塊已經(jīng)重啟了 ,在這之后的一段時(shí)間后(如再等待上3秒)無(wú) 線模塊就會(huì)處于啟動(dòng)模式,此時(shí)再向無(wú)線模塊寫(xiě)入升級(jí)包,就可以保證是在無(wú) 線模塊啟動(dòng)模式向其寫(xiě)入升級(jí)包。
最后,需要說(shuō)明的是,實(shí)施例1和2中的兩種升級(jí)方案中,升級(jí)前和升級(jí)
后終端與無(wú)線模塊之間關(guān)于校驗(yàn)和升級(jí)的交互命令名稱及格式必須嚴(yán)格一致, 否則會(huì)造成當(dāng)其中一者升級(jí)完成而另一者還未升級(jí)時(shí),兩者之間的升級(jí)命令無(wú) 法互操作。
上述實(shí)施例1和2均是采用FOTA升級(jí)對(duì)無(wú)線模塊和終端同時(shí)進(jìn)行升級(jí)。 顯然,上述實(shí)施例1和2也可應(yīng)用于只升級(jí)終端或只升級(jí)無(wú)線模塊的情形。并 且,由于采用FOTA升級(jí),因此,保證了上述實(shí)施例中整個(gè)升級(jí)過(guò)程是可恢復(fù) 的。即使升級(jí)失敗也能恢復(fù)到升級(jí)前的版本,不會(huì)影響設(shè)備的使用。 <實(shí)施例3>
根據(jù)以上實(shí)施例所述的固件升級(jí)方法,本實(shí)施例還提供了一種終端,所述 終端與至少一個(gè)功能模塊連接。如圖7所示,所述終端包括
升級(jí)包獲取單元,用于通過(guò)空中接口從升級(jí)服務(wù)器下載升級(jí)數(shù)據(jù),并解析 所述升級(jí)數(shù)據(jù),得到分別對(duì)應(yīng)于所述終端和所述功能模塊的至少兩個(gè)升級(jí)文 件;
校驗(yàn)單元,用于對(duì)各個(gè)升級(jí)文件逐個(gè)進(jìn)行校驗(yàn),并在所有升級(jí)文件都校驗(yàn) 成功后觸發(fā)升級(jí)單元。
升級(jí)單元,用于在接收到所述校驗(yàn)單元的觸發(fā)后,根據(jù)各個(gè)升級(jí)文件,對(duì) 對(duì)應(yīng)的終端或功能模塊逐個(gè)進(jìn)行升級(jí)。
優(yōu)選地,上述終端還包括升級(jí)上報(bào)單元和一用于指示上報(bào)狀態(tài)的升級(jí)上 報(bào)標(biāo)志;
所述校驗(yàn)單元,還用于在所有升級(jí)文件中的任一升級(jí)文件校驗(yàn)失敗時(shí),將 所述升級(jí)上報(bào)標(biāo)志設(shè)置為上報(bào)失?。?br>
所述升級(jí)上報(bào)單元,用于在所述終端每次啟動(dòng)后,讀取所述升級(jí)上報(bào)標(biāo)志, 并在所述升級(jí)上報(bào)標(biāo)志為上報(bào)失敗時(shí),向所述升級(jí)服務(wù)器上報(bào)升級(jí)失敗消息。
優(yōu)選地,所述終端中,所述升級(jí)單元,還用于在所述對(duì)應(yīng)的終端和功能模塊中的任一個(gè)升級(jí)失敗 時(shí),將所述升級(jí)上報(bào)標(biāo)志設(shè)置為上報(bào)失敗;以及在所述對(duì)應(yīng)的終端和功能模塊
均升級(jí)成功時(shí),將所述升級(jí)上報(bào)標(biāo)志設(shè)置為上報(bào)成功;
所述上報(bào)成功單元,還用于在所述終端每次啟動(dòng)后,讀取所述升級(jí)上報(bào)標(biāo)
志,并在所述升級(jí)上報(bào)標(biāo)志為上報(bào)成功時(shí),向所述升級(jí)服務(wù)器上報(bào)升級(jí)成功消 自、
這里,優(yōu)選地,上述升級(jí)單元,還用于從最后校驗(yàn)成功的升級(jí)文件開(kāi)始, 根據(jù)各個(gè)升級(jí)文件,對(duì)對(duì)應(yīng)的終端或功能模塊逐個(gè)進(jìn)行升級(jí)。上述功能模塊的 個(gè)數(shù)為一個(gè),且所述功能模塊為無(wú)線上網(wǎng)卡。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并非用于限制本發(fā)明的保護(hù)范 圍。應(yīng)當(dāng)理解的是,對(duì)本發(fā)明技術(shù)所在領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),可以根據(jù)本 發(fā)明的技術(shù)方案及其構(gòu)思進(jìn)行相應(yīng)的等同改變或替換,而所有這些改變或替 換,都應(yīng)屬于本發(fā)明所附權(quán)利要求的保護(hù)范圍。
權(quán)利要求
1.一種固件空中升級(jí)(FOTA)的方法,應(yīng)用于對(duì)終端和與所述終端連接的至少一個(gè)功能模塊進(jìn)行固件升級(jí),其特征在于,所述方法包括步驟A,所述終端通過(guò)空中接口從升級(jí)服務(wù)器下載升級(jí)數(shù)據(jù),得到分別對(duì)應(yīng)于所述終端和所述功能模塊的升級(jí)文件;步驟B,所述終端對(duì)所述升級(jí)文件進(jìn)行校驗(yàn),并在升級(jí)文件校驗(yàn)成功后進(jìn)入步驟C;步驟C,根據(jù)所述升級(jí)文件,對(duì)對(duì)應(yīng)的終端和功能模塊進(jìn)行升級(jí)。
2. 如權(quán)利要求1所述的方法,其特征在于,所述步驟B中,如果任一升級(jí)文件校驗(yàn)失敗,則進(jìn)入步驟D;步驟D,所述終端向所述升級(jí)服務(wù)器上報(bào)升級(jí)失敗消息,并結(jié)束流程。
3. 如權(quán)利要求2所述的方法,其特征在于,所述步驟C中,如果所述對(duì)應(yīng)的終端和功能模塊中的任一個(gè)升級(jí)失敗,則進(jìn)入所述步驟D;如果所述對(duì)應(yīng)的終端和功能模塊均升級(jí)成功,則進(jìn)入步驟E;步驟E,所述終端向所述升級(jí)服務(wù)器上報(bào)升級(jí)成功消息,并結(jié)束流程。
4. 如權(quán)利要求3所述的方法,其特征在于,在所述步驟C中,所述終端從最后校驗(yàn)成功的升級(jí)文件開(kāi)始,根據(jù)各個(gè)升級(jí)文件,對(duì)對(duì)應(yīng)的終端或功能模塊逐個(gè)進(jìn)行升級(jí)。
5. 如權(quán)利要求3所述的方法,其特征在于,設(shè)置一個(gè)用于指示終端當(dāng)前所處的操作階段的升級(jí)狀態(tài)機(jī),且所述升級(jí)狀態(tài)機(jī)的初始狀態(tài)為無(wú)升級(jí)狀態(tài),所述升級(jí)狀態(tài)機(jī)還包括對(duì)應(yīng)步驟A中的下載升級(jí)數(shù)據(jù)操作的升級(jí)數(shù)據(jù)下載狀態(tài)、對(duì)應(yīng)于步驟B中各個(gè)升級(jí)文件的校驗(yàn)操作的校驗(yàn)狀態(tài)、對(duì)應(yīng)于步驟C中的所述終端或功能模塊的升級(jí)操作的升級(jí)狀態(tài)、以及對(duì)應(yīng)于步驟D或步驟E中的上報(bào)操作的升級(jí)上報(bào)狀態(tài);所述終端在執(zhí)行所述步驟A、 B、 C和D中的各個(gè)操作時(shí),進(jìn)一步在當(dāng)前操作成功執(zhí)行完畢后,將上述升級(jí)狀態(tài)機(jī)置為下一操作所對(duì)應(yīng)的狀態(tài);并且,所述終端在每次啟動(dòng)后,讀取所述升級(jí)狀態(tài)機(jī)的當(dāng)前狀態(tài),并從所述升級(jí)狀態(tài)機(jī)的當(dāng)前狀態(tài)所對(duì)應(yīng)的操作開(kāi)始繼續(xù)執(zhí)行,其中,當(dāng)所述升級(jí)狀態(tài)機(jī)的當(dāng)前狀態(tài)為無(wú)升級(jí)狀態(tài)時(shí),結(jié)束流程。
6. 如權(quán)利要求5所述的方法,其特征在于,預(yù)先設(shè)置一個(gè)用于指示上報(bào)狀態(tài)的升級(jí)上"t艮標(biāo)志,所述升級(jí)上報(bào)標(biāo)志的初始狀態(tài)為不上報(bào);所述方法還包括所述步驟C中,如果任一升級(jí)文件校驗(yàn)失敗,則將所述升級(jí)上報(bào)標(biāo)志設(shè)置為上報(bào)失敗,并將所述升級(jí)狀態(tài)機(jī)設(shè)置為升級(jí)上報(bào)狀態(tài);所述步驟C中,如果所述對(duì)應(yīng)的終端和功能模塊均升級(jí)成功,則終端將所述升級(jí)上報(bào)標(biāo)志設(shè)置為上報(bào)成功,以及將所述升級(jí)狀態(tài)機(jī)設(shè)置為升級(jí)上報(bào)狀太.心5所述終端在啟動(dòng)后,當(dāng)讀取到所述升級(jí)狀態(tài)機(jī)的當(dāng)前狀態(tài)為升級(jí)上報(bào)狀態(tài)時(shí),則根據(jù)所述升級(jí)上報(bào)標(biāo)志,向所述升級(jí)服務(wù)器上報(bào)升級(jí)成功消息或升級(jí)失敗消息,然后將所述升級(jí)上報(bào)標(biāo)志恢復(fù)為不上報(bào),將所述升級(jí)狀態(tài)機(jī)恢復(fù)為無(wú)升級(jí)狀態(tài)。
7. 如權(quán)利要求6所述的方法,其特征在于,所述功能模塊的個(gè)數(shù)為一個(gè),且所述功能模塊為無(wú)線上網(wǎng)卡。
8. —種應(yīng)用于固件空中升級(jí)(FOTA)的終端,所述終端與至少一個(gè)功能模塊連接,其特征在于,所述終端包括升級(jí)包獲取單元,用于通過(guò)空中接口從升級(jí)服務(wù)器下載升級(jí)數(shù)據(jù),得到分別對(duì)應(yīng)于所述終端和所述功能模塊的至少兩個(gè)升級(jí)文件;校驗(yàn)單元,用于對(duì)所述升級(jí)文件進(jìn)行校驗(yàn),并在升級(jí)文件都校驗(yàn)成功后觸發(fā)升級(jí)單元;升級(jí)單元,用于在接收到所述校驗(yàn)單元的觸發(fā)后,根據(jù)各個(gè)升級(jí)文件,對(duì)對(duì)應(yīng)的終端或功能模塊進(jìn)行升級(jí)。
9. 如權(quán)利要求8所述的終端,其特征在于,還包括升級(jí)上報(bào)單元和一用于指示上報(bào)狀態(tài)的升級(jí)上報(bào)標(biāo)志;所述校驗(yàn)單元,還用于在所有升級(jí)文件中的任一升級(jí)文件校驗(yàn)失敗時(shí),將所述升級(jí)上報(bào)標(biāo)志設(shè)置為上報(bào)失?。凰錾?jí)上報(bào)單元,用于在所述終端每次啟動(dòng)后,讀取所述升級(jí)上報(bào)標(biāo)志,并在所述升級(jí)上報(bào)標(biāo)志為上報(bào)失敗時(shí),向所述升級(jí)服務(wù)器上報(bào)升級(jí)失敗消息。
10. 如權(quán)利要求8所述的終端,其特征在于,所述升級(jí)單元,還用于在所述對(duì)應(yīng)的終端和功能模塊中的任一個(gè)升級(jí)失敗時(shí),將所述升級(jí)上報(bào)標(biāo)志設(shè)置為上報(bào)失??;以及在所述對(duì)應(yīng)的終端和功能模塊 均升級(jí)成功時(shí),將所述升級(jí)上報(bào)標(biāo)志設(shè)置為上報(bào)成功;所述上報(bào)成功單元,還用于在所述終端每次啟動(dòng)后,讀取所述升級(jí)上報(bào)標(biāo) 志,并在所述升級(jí)上報(bào)標(biāo)志為上報(bào)成功時(shí),向所述升級(jí)服務(wù)器上報(bào)升級(jí)成功消 自、<formula>formula see original document page 4</formula>
11. 如權(quán)利要求8所述的終端,其特征在于,所述升級(jí)單元,還用于從最后校驗(yàn)成功的升級(jí)文件開(kāi)始,根據(jù)各個(gè)升級(jí)文 件,對(duì)對(duì)應(yīng)的終端或功能模塊逐個(gè)進(jìn)行升級(jí)。
12. 如權(quán)利要求8所述的終端,其特征在于,所述功能^f莫塊的個(gè)數(shù)為一個(gè), 且所述功能模塊為無(wú)線上網(wǎng)卡。
全文摘要
本發(fā)明提供了一種固件空中升級(jí)的方法及終端。本發(fā)明所述方法中,終端通過(guò)空中接口從升級(jí)服務(wù)器下載升級(jí)數(shù)據(jù),并對(duì)所述升級(jí)數(shù)據(jù)進(jìn)行解析,得到對(duì)應(yīng)于終端和與終端連接的功能模塊的升級(jí)文件;然后,終端對(duì)各個(gè)升級(jí)文件逐個(gè)進(jìn)行校驗(yàn),并在所有升級(jí)文件都校驗(yàn)成功后,根據(jù)各個(gè)升級(jí)文件,對(duì)對(duì)應(yīng)的終端和功能模塊逐個(gè)進(jìn)行升級(jí)。通過(guò)以上流程,本發(fā)明可以實(shí)現(xiàn)終端和相連功能模塊的同時(shí)升級(jí),并且。本發(fā)明在升級(jí)過(guò)程中即使出現(xiàn)掉電等情況,也仍能夠在設(shè)備重新上電后升級(jí)成功,從而提高了升級(jí)的可靠性和安全性。
文檔編號(hào)H04W8/22GK101656949SQ20091009381
公開(kāi)日2010年2月24日 申請(qǐng)日期2009年9月21日 優(yōu)先權(quán)日2009年9月21日
發(fā)明者劉源源 申請(qǐng)人:中興通訊股份有限公司