專利名稱:固件更新的方法、芯片以及通信終端的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信領(lǐng)域,尤其涉及固件更新的方法、芯片以及通信終端。
背景技術(shù):
隨著科技的發(fā)展,移動(dòng)終端智能化程度越來(lái)越高,隨著各版本的不斷優(yōu)化,移動(dòng)終端中的大部分固件頻繁需要升級(jí),而目前除了由操作系統(tǒng)內(nèi)核來(lái)實(shí)現(xiàn)操作系統(tǒng)的升級(jí)能直接在移動(dòng)終端上完成之外,包括操作系統(tǒng)內(nèi)核在內(nèi)的其余需要更新的固件,也只能先通過(guò)網(wǎng)絡(luò)將升級(jí)文件下載至個(gè)人電腦(PC機(jī)),再使用PC機(jī)對(duì)與移動(dòng)終端連接來(lái)實(shí)現(xiàn)更新。
發(fā)明內(nèi)容
為了使終端能夠直接對(duì)其中需升級(jí)的固件進(jìn)行更新,本發(fā)明實(shí)施例提供一種固件 更新的方法,適用于通信終端,該方法包括通信終端獲知第二固件需要更新;通信終端下載第二固件更新需要的更新數(shù)據(jù);通信終端將預(yù)定標(biāo)志位設(shè)置為第二值;通信終端再次啟動(dòng)時(shí),第一固件獲知預(yù)定標(biāo)志位為第二值后,確定更新數(shù)據(jù)在第二固件中的寫(xiě)入位置,并將第二固件更新需要的更新數(shù)據(jù)寫(xiě)入該寫(xiě)入位置,實(shí)現(xiàn)第二固件的更新;第二固件更新成功后,第一固件將預(yù)定標(biāo)志位設(shè)置為第一值;其中,第一固件為固件更新模塊,第二固件包括操作系統(tǒng)內(nèi)核。較優(yōu)的,通信終端下載第二固件更新需要的更新數(shù)據(jù)包括通信終端對(duì)第二固件更新需要的更新數(shù)據(jù)進(jìn)行驗(yàn)證,并將通過(guò)驗(yàn)證的更新數(shù)據(jù)存入預(yù)定位置;將第二固件更新需要的更新數(shù)據(jù)寫(xiě)入該寫(xiě)入位置包括從預(yù)定位置獲得第二固件更新需要的更新數(shù)據(jù),并將第二固件更新需要的更新數(shù)據(jù)寫(xiě)入該寫(xiě)入位置。較優(yōu)的,通信終端下載第二固件更新需要的更新數(shù)據(jù)包括通信終端下載第二固件更新需要的差分包;第一固件將第二固件更新需要的更新數(shù)據(jù)寫(xiě)入該寫(xiě)入位置包括第一固件使用預(yù)定算法將差分包寫(xiě)入該寫(xiě)入位置。較優(yōu)的,通信終端下載第二固件更新需要的更新數(shù)據(jù)包括通信終端對(duì)第二固件更新需要的更新數(shù)據(jù)進(jìn)行驗(yàn)證,并將通過(guò)驗(yàn)證的更新數(shù)據(jù)存入預(yù)定位置;將第二固件更新需要的更新數(shù)據(jù)寫(xiě)入該寫(xiě)入位置包括從預(yù)定位置獲得第二固件更新需要的更新數(shù)據(jù),并將第二固件更新需要的更新數(shù)據(jù)寫(xiě)入該寫(xiě)入位置。較優(yōu)的,通信終端再次啟動(dòng)時(shí),第一固件獲知預(yù)定標(biāo)志位為第二值包括通信終端再次啟動(dòng)時(shí),由第三固件獲知預(yù)定標(biāo)志位設(shè)置為第二值后,加載第一固件,使第一固件獲知預(yù)定標(biāo)志位為第二值;其中,第三固件為,在通信終端啟動(dòng)過(guò)程中,直接加載第一固件的固件。
進(jìn)一步的,通信終端包括處理器,處理器包括第一核和第二核,第一固件位于第二核,操作系統(tǒng)內(nèi)核位于第二核;第二固件進(jìn)一步包括位于第一核的固件。更進(jìn)一步的,第二值用于指示第二固件中任一個(gè)固件的狀態(tài)為需要更新。較優(yōu)的,第二固件更新成功后,第一固件將預(yù)定標(biāo)志位設(shè)置為第一值具體包括第二固件更新成功后,將預(yù)定標(biāo)志位設(shè)置為第三值;操作系統(tǒng)內(nèi)核判斷操作系統(tǒng)內(nèi)核對(duì)應(yīng)的操作系統(tǒng)是否需要更新;如果需要更新,操作系統(tǒng)內(nèi)核對(duì)操作系統(tǒng)進(jìn)行更新,在更新成功后,通知第一固件;第一固件將預(yù)定標(biāo)志位設(shè)置為第一值。
更優(yōu)的,在將預(yù)定標(biāo)志位設(shè)置為第三值后,在第一固件將預(yù)定標(biāo)志位設(shè)置為第一值前,方法進(jìn)一步包括如果通信終端再次啟動(dòng)時(shí),第二固件獲知預(yù)定標(biāo)志位為第三值,返回對(duì)操作系統(tǒng)進(jìn)行更新的步驟。進(jìn)一步的,在第二固件更新成功之前,第一固件確定更新數(shù)據(jù)在第二固件中的寫(xiě)入位置之后,方法進(jìn)一步包括將第二固件更新需要的更新數(shù)據(jù)寫(xiě)入該寫(xiě)入位置,實(shí)現(xiàn)第二固件的更新。本發(fā)明實(shí)施例同時(shí)提供了另一種固件更新的方法,適用于通信終端,包括通信終端獲知第五固件需要更新;通信終端下載第五固件更新需要的更新數(shù)據(jù);通信終端將預(yù)定標(biāo)志位設(shè)置為第四值;通信終端再次啟動(dòng)時(shí),第四固件獲知預(yù)定標(biāo)志位為第四值后,形成第五固件的備份固件,確定第五固件更新需要的更新數(shù)據(jù)在第五固件的備份固件中的第一寫(xiě)入位置,并將第五固件更新需要的更新數(shù)據(jù)寫(xiě)入第一寫(xiě)入位置,形成第五固件的備份更新固件;第四固件確定第五固件中的第二寫(xiě)入位置,將第五固件的備份更新固件中的數(shù)據(jù),寫(xiě)入第二寫(xiě)入位置,實(shí)現(xiàn)第五固件的更新;第五固件更新成功后,第四固件將預(yù)定標(biāo)志位設(shè)置為第五值;其中,第四固件為固件更新模塊,第五固件為第四固件,和/或通信終端啟動(dòng)過(guò)程中,需要先行加載才能使第四固件加載的固件。較優(yōu)的,通信終端下載第五固件更新需要的更新數(shù)據(jù)具體為,通信終端對(duì)第五固件更新需要的更新數(shù)據(jù)進(jìn)行驗(yàn)證,并將通過(guò)驗(yàn)證的第五固件更新需要的更新數(shù)據(jù)存入預(yù)定位置;將第五固件更新需要的更新數(shù)據(jù)寫(xiě)入第一寫(xiě)入位置包括從預(yù)定位置獲得第五固件更新需要的更新數(shù)據(jù),并將第五固件更新需要的更新數(shù)據(jù)寫(xiě)入第一寫(xiě)入位置。較優(yōu)的,第五固件更新需要的更新數(shù)據(jù)為第五固件更新需要的差分包;第四固件將第五固件更新需要的更新數(shù)據(jù)寫(xiě)入第一寫(xiě)入位置包括第四固件使用預(yù)定算法將第五固件更新需要的差分包寫(xiě)入第一寫(xiě)入位置。較優(yōu)的,第四固件形成第五固件的備份固件之后,方法進(jìn)一步包括第四固件將預(yù)定標(biāo)志位設(shè)置為第六值;
在第五固件更新成功之前,方法進(jìn)一步包括如果通信終端再次啟動(dòng)時(shí),第四固件獲知預(yù)定標(biāo)志位為第六值,返回確定第五固件更新需要的更新數(shù)據(jù)在第五固件的備份固件中的第一寫(xiě)入位置的步驟。較優(yōu)的,第四固件形成第五固件的備份更新固件之后,方法進(jìn)一步包括第四固件將預(yù)定標(biāo)志位設(shè)置為第七值;在第五固件更新成功之前,方法進(jìn)一步包括如果通信終端再次啟動(dòng)時(shí),第四固件獲知預(yù)定標(biāo)志位為第七值,則返回確定第五固件中的第二寫(xiě)入位置的步驟。更優(yōu)的,通信終端再次啟動(dòng)時(shí),在第四固件獲知預(yù)定標(biāo)志位為第七值之前進(jìn)一步包括
第六固件獲知預(yù)定標(biāo)志位為第七值后,將對(duì)第五固件的加載替換為對(duì)第五固件的備份更新固件的加載。較優(yōu)的,該方法進(jìn)一步包括通信終端獲知第七固件需要更新;通信終端下載第七固件更新需要的更新數(shù)據(jù);通信終端將預(yù)定標(biāo)志位設(shè)置為第八值;通信終端再次啟動(dòng)時(shí),第四固件獲知預(yù)定標(biāo)志位為第八值后,確定第七固件更新需要的更新數(shù)據(jù)在第七固件中的寫(xiě)入位置,并將第七固件更新需要的更新數(shù)據(jù)寫(xiě)入該寫(xiě)入位置,實(shí)現(xiàn)第七固件的更新;第七固件更新成功后,第四固件將預(yù)定標(biāo)志位設(shè)置為第五值;其中,第七固件包括操作系統(tǒng)內(nèi)核。更優(yōu)的,通信終端包括處理器,處理器包括第三核和第四核,第四固件位于第四核,操作系統(tǒng)內(nèi)核位于第四核,第七固件進(jìn)一步包括位于第三核的固件。較優(yōu)的,第七固件更新成功后,第四固件將預(yù)定標(biāo)志位設(shè)置為第五值具體包括第七固件更新成功后,將預(yù)定標(biāo)志位設(shè)置為第九值;操作系統(tǒng)內(nèi)核判斷操作系統(tǒng)內(nèi)核對(duì)應(yīng)的操作系統(tǒng)是否需要更新;如果需要更新,操作系統(tǒng)內(nèi)核對(duì)操作系統(tǒng)進(jìn)行更新,在更新成功后,通知第四固件;第四固件將預(yù)定標(biāo)志位設(shè)置為第五值。更優(yōu)的,在將預(yù)定標(biāo)志位設(shè)置為第九值后,在第四固件將預(yù)定標(biāo)志位設(shè)置為第五值之前,方法進(jìn)一步包括如果通信終端再次啟動(dòng)時(shí),操作系統(tǒng)內(nèi)核獲知預(yù)定標(biāo)志位為第九值,返回對(duì)操作系統(tǒng)進(jìn)行更新的步驟。較優(yōu)的,在第七固件更新成功之前,第四固件確定第七固件更新需要的更新數(shù)據(jù)在第七固件中的寫(xiě)入位置之后,方法進(jìn)一步包括將第七固件更新需要的更新數(shù)據(jù)寫(xiě)入該寫(xiě)入位置,實(shí)現(xiàn)第七固件的更新。本發(fā)明實(shí)施例同時(shí)還提供一種芯片,應(yīng)用于通信終端中,芯片包含第一固件和第二固件,其中,第一固件包含預(yù)定標(biāo)志位讀取模塊,用于獲知通信終端上的預(yù)定標(biāo)志位為第二值后,獲知第二固件需要更新;
寫(xiě)入位置確定模塊,用于預(yù)定標(biāo)志位讀取模塊獲知第二固件需要更新后,確定第二固件更新需要的更新數(shù)據(jù)在第二固件中的寫(xiě)入位置;更新寫(xiě)入模塊,用于寫(xiě)入位置確定模塊確定第二固件更新需要的更新數(shù)據(jù)在第二固件中的寫(xiě)入位置后,將第二固件更新需要的更新數(shù)據(jù)寫(xiě)入第二固件中的寫(xiě)入位置;預(yù)定標(biāo)志位設(shè)置模塊,用于在第二固件更新成功后,將預(yù)定標(biāo)志位設(shè)置為第一值;其中,第一固件為固件更新模塊,第二固件包括操作系統(tǒng)內(nèi)核。較優(yōu)的,芯片包括第一核與第二核,第一固件以及操作系統(tǒng)內(nèi)核位于第二核;第二固件進(jìn)一步包括位于第一核的固件。
較優(yōu)的,預(yù)定標(biāo)志位設(shè)置模塊進(jìn)一步用于,第二固件更新成功后,將預(yù)定標(biāo)志位設(shè)置為第三值,并通知操作系統(tǒng)內(nèi)核;并在接到操作系統(tǒng)內(nèi)核的更新成功通知后,將預(yù)定標(biāo)志位設(shè)置為第一值;操作系統(tǒng)內(nèi)核進(jìn)一步用于,判斷自身對(duì)應(yīng)的操作系統(tǒng)是否需要更新,如果需要更新,則對(duì)操作系統(tǒng)進(jìn)行更新,并在更新成功后向第一固件發(fā)送更新成功通知。本發(fā)明實(shí)施例同時(shí)提供另一種芯片,應(yīng)用于通信終端中,芯片包含第四固件和第五固件,第四固件包含預(yù)定標(biāo)志位讀取模塊,用于獲知通信終端上的預(yù)定標(biāo)志位為第四值后,獲知第五固件需要更新;固件備份模塊,用于獲知所述預(yù)定標(biāo)志位為第四值后,形成所述第五固件的備份固件;第一寫(xiě)入位置確定模塊,用于形成所述第五固件的備份固件后,確定第五固件更新需要的更新數(shù)據(jù)在第五固件的備份固件中的第一寫(xiě)入位置;備份固件更新模塊,用于將第五固件更新需要的更新數(shù)據(jù)寫(xiě)入第一寫(xiě)入位置,形成第五固件的備份更新固件;第二寫(xiě)入位置確定模塊,用于備份固件更新模塊形成第五固件的備份更新固件之后,確定第五固件中的第二寫(xiě)入位置;備份更新固件寫(xiě)入模塊,用于第二寫(xiě)入位置確定后,將第五固件的備份更新固件中的數(shù)據(jù),寫(xiě)入第二寫(xiě)入位置,實(shí)現(xiàn)第五固件的更新;預(yù)定標(biāo)志位設(shè)置模塊,用于在第五固件更新成功后,將預(yù)定標(biāo)志位設(shè)置為第五值;其中,第四固件為固件更新模塊,第五固件為第四固件,和/或通信終端啟動(dòng)過(guò)程中,需要先行加載才能使第四固件加載的固件。更優(yōu)的,預(yù)定標(biāo)志位設(shè)置模塊進(jìn)一步用于,在所述固件備份模塊形成所述第五固件的備份固件之后,將所述預(yù)定標(biāo)志位設(shè)置為第六值;所述預(yù)定標(biāo)志位讀取模塊進(jìn)一步用于,當(dāng)所述通信終端再次啟動(dòng)時(shí),在獲知通信終端上的預(yù)定標(biāo)志位為第六值后,通知所述備份固件更新模塊形成所述第五固件的備份更新固件。較優(yōu)的,預(yù)定標(biāo)志位設(shè)置模塊進(jìn)一步用于,在備份固件更新模塊形成第五固件的備份更新固件之后,將預(yù)定標(biāo)志位設(shè)置為第七值;
預(yù)定標(biāo)志位讀取模塊進(jìn)一步用于,當(dāng)通信終端再次啟動(dòng)時(shí),在獲知通信終端上的預(yù)定標(biāo)志位為第七值后,通知備份更新固件寫(xiě)入模塊實(shí)現(xiàn)第五固件的更新。更優(yōu)的,芯片進(jìn)一步包含第六固件,用于當(dāng)通信終端再次啟動(dòng)時(shí),在獲知預(yù)定標(biāo)志位為第七值后,將對(duì)第五固件的加載替換為對(duì)第五固件的備份更新固件的加載。較優(yōu)的,芯片進(jìn)一步包含第七固件;預(yù)定標(biāo)志位讀取模塊進(jìn)一步用于,當(dāng)預(yù)定標(biāo)志位設(shè)置為第八值時(shí),獲知第七固件需要更新; 第四固件進(jìn)一步包含寫(xiě)入位置確定模塊,用于所述預(yù)定標(biāo)志位讀取模塊獲知所述第七固件需要更新后,確定所述第七固件更新需要的更新數(shù)據(jù)在所述第七固件中的寫(xiě)入位置;以及更新寫(xiě)入模塊,用于所述寫(xiě)入位置確定模塊確定所述第七固件更新需要的更新數(shù)據(jù)在所述第七固件中的寫(xiě)入位置后,將所述第七固件更新需要的更新數(shù)據(jù)寫(xiě)入第七固件中的寫(xiě)入位置,實(shí)現(xiàn)第七固件的更新;預(yù)定標(biāo)志位設(shè)置模塊進(jìn)一步用于,在第七固件更新成功后,將預(yù)定標(biāo)志位設(shè)置為第五值;第七固件包括操作系統(tǒng)內(nèi)核。本發(fā)明實(shí)施例還提供一種通信終端,包含第一固件和第二固件,通信終端進(jìn)一步包含更新?tīng)顟B(tài)獲知模塊,用于獲知第二固件需要更新;下載模塊,用于下載第二固件更新需要的更新數(shù)據(jù);以及標(biāo)志位設(shè)置模塊,用于更新?tīng)顟B(tài)獲知模塊獲知第二固件需要更新后,將預(yù)定標(biāo)志位設(shè)置為第二值;第一固件用于,當(dāng)通信終端再次啟動(dòng)時(shí),在獲知預(yù)定標(biāo)志位為第二值后,確定更新數(shù)據(jù)在第二固件中的寫(xiě)入位置,并將第二固件更新需要的更新數(shù)據(jù)寫(xiě)入該寫(xiě)入位置,實(shí)現(xiàn)第二固件的更新;并當(dāng)?shù)诙碳鲁晒螅瑢㈩A(yù)定標(biāo)志位設(shè)置為第一值;其中,第一固件為固件更新模塊,第二固件包括操作系統(tǒng)內(nèi)核。本發(fā)明實(shí)施例還提供另一種通信終端,包含第四固件和第五固件,通信終端進(jìn)一步包含更新?tīng)顟B(tài)獲知模塊,用于獲知第五固件需要更新;下載模塊,用于下載第五固件更新需要的更新數(shù)據(jù);以及標(biāo)志位設(shè)置模塊,用于更新?tīng)顟B(tài)獲知模塊獲知第五固件需要更新后,將預(yù)定標(biāo)志位設(shè)置為第四值;第四固件用于,當(dāng)通信終端再次啟動(dòng)時(shí),在獲知預(yù)定標(biāo)志位為第四值后,形成第五固件的備份固件,確定第五固件更新需要的更新數(shù)據(jù)在第五固件的備份固件中的第一寫(xiě)入位置,并將第五固件更新需要的更新數(shù)據(jù)寫(xiě)入第一寫(xiě)入位置,形成第五固件的備份更新固件;然后確定第五固件中的第二寫(xiě)入位置,將備份更新固件中的數(shù)據(jù),寫(xiě)入第二寫(xiě)入位置,實(shí)現(xiàn)第五固件的更新;當(dāng)?shù)谖骞碳鲁晒螅瑢㈩A(yù)定標(biāo)志位設(shè)置為第五值;其中,第四固件為固件更新模塊,第五固件為第四固件,和/或通信終端啟動(dòng)過(guò)程中,需要先行加載才能使第四固件加載的固件。本發(fā)明實(shí)施例提供的固件的更新方法、芯片以及通信終端,能使通信終端依靠自身和網(wǎng)絡(luò)端的交互即能實(shí)現(xiàn)自身固件的更新,擺脫通過(guò)PC機(jī)升級(jí)來(lái)終端內(nèi)需要升級(jí)的固件的依賴,同時(shí)增加了更新或升級(jí)的安全性以及可靠性。
圖I為本發(fā)明一實(shí)施例的方法流程示意圖;圖2為本發(fā)明一實(shí)施例的雙核固件構(gòu)架示意圖;圖3為本發(fā)明一實(shí)施例的方法流程示意圖;圖4為本發(fā)明一實(shí)施例芯片結(jié)構(gòu)示意圖;
圖5本發(fā)明一實(shí)施例芯片結(jié)構(gòu)示意圖;圖6為本發(fā)明一實(shí)施例芯片結(jié)構(gòu)示意圖。
具體實(shí)施例方式為了使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,下面結(jié)合實(shí)施例和附圖,對(duì)本發(fā)明實(shí)施例做進(jìn)一步詳細(xì)地說(shuō)明。在此,本發(fā)明的示意性實(shí)施例及說(shuō)明用于解釋本發(fā)明,但并不作為對(duì)本發(fā)明的限定。本發(fā)明主要提供一種通信終端尤其是智能終端的固件升級(jí)方法,以及采用這種方法的終端,減少對(duì)個(gè)人計(jì)算機(jī)來(lái)進(jìn)行智能終端固件升級(jí)的依賴,加速終端的新功能新服務(wù)的采用,提高修理、服務(wù)以及解決故障的效率,同時(shí)能延長(zhǎng)終端的使用壽命,提高用戶的使用滿意度。參見(jiàn)圖1,本發(fā)明提供了一種固件更新的方法實(shí)施方式,適用于通信終端,包括通信終端獲知第二固件需要更新;通信終端下載所述第二固件更新需要的更新數(shù)據(jù);通信終端將預(yù)定標(biāo)志位設(shè)置為第二值;通信終端再次啟動(dòng)時(shí),第一固件獲知預(yù)定標(biāo)志位為第二值后,確定更新數(shù)據(jù)在第二固件中的寫(xiě)入位置,并將第二固件更新需要的更新數(shù)據(jù)寫(xiě)入位置,實(shí)現(xiàn)第二固件的更新;第二固件更新成功后,第一固件將預(yù)定標(biāo)志位設(shè)置為第一值;其中,第一固件為固件更新模塊,第二固件包括操作系統(tǒng)內(nèi)核。下面以智能移動(dòng)終端采用的高通雙處理器芯片QSD7XXX和QSD8XXX系列芯片舉例說(shuō)明本發(fā)明提供的下述實(shí)施例。該芯片為雙處理器(簡(jiǎn)稱為雙核)芯片,由基帶處理器(Baseband Processor, BP)與應(yīng)用處理器(Application Processor, AP)雙處理器構(gòu)成。如圖2所示,芯片由ARM9 (BP)和ARMll(AP)兩個(gè)處理器構(gòu)成,這兩個(gè)處理器通過(guò)共享內(nèi)存(Shared Memory)來(lái)實(shí)現(xiàn)交互。ARM9負(fù)責(zé)處理通信協(xié)議、射頻、通用輸入/輸出(GPIO)等。ARMll負(fù)責(zé)常見(jiàn)任務(wù),運(yùn)行的操作系統(tǒng)內(nèi)核為L(zhǎng)inux,裝載在ARMlI的LINUX固件上,操作系統(tǒng)Android由LINUX固件調(diào)用,裝載在ANDROID固件上。ARMll由ARM9調(diào)用而加載,ARM9即通常意義上的主控芯片。下面對(duì)照?qǐng)D2,將高通QSD8系芯片的主要固件大致介紹如下PBL(Primary Boot Loader)即基本啟動(dòng)加載器位于ARM9,處于板載只讀內(nèi)存(Read-Only Memory, ROM)中,存有終端啟動(dòng)的最初代碼,負(fù)責(zé)加載下述DBL,一般無(wú)需更新。DBL(Device Boot Loader)即設(shè)備啟動(dòng)加載器位于ARM9,采用通過(guò)讀取閃存flash將下述OSBL、FSBL加載到隨機(jī)存取存儲(chǔ)器(random access memory,RAM)中的方式,進(jìn)行終端初始化的基本設(shè)備配置,一般無(wú)需更新。FSBL(Fai 1-safe Boot Loader)即啟動(dòng)出錯(cuò)恢復(fù)加載器位于ARM9,用于對(duì)終端啟動(dòng)中的出錯(cuò)的恢復(fù),并加載下述0SBL,一般無(wú)需更新。有些廠商的處理器芯片沒(méi)有單獨(dú)的FSBL,其功能由DBL來(lái)完成。OSBL(Operating System Boot Loader)即操作系統(tǒng)啟動(dòng)加載器位于 ARM9,用于加載下述ADSP,AMSS, APPSBL,以及實(shí)現(xiàn)ARM9處理器端SD卡升級(jí),驗(yàn)證校驗(yàn)和以及調(diào)用開(kāi)機(jī)logo的顯示等。APPSBL(Application system boot loader)應(yīng)用系統(tǒng)啟動(dòng)加載器位于 ARM11,是ARMll處理器的加載器,用來(lái)實(shí)現(xiàn)ARMll處理器端SD卡升級(jí),以及加載操作系統(tǒng)內(nèi)核(KERNEL)等。在本處理器芯片中,操作系統(tǒng)內(nèi)核為L(zhǎng)INUX。ADSP :位于 ARM9 端,是 ARM9 端的數(shù)字信號(hào)處理器(Digital Signal Processing, DSP),終端啟動(dòng)時(shí)受上述OSBL的加載。AMSS (Advanced Mobile Subscriber Software):位于 ARM9 端,是處理器 ARM9 的操作系統(tǒng)(Operating System, OS),終端啟動(dòng)時(shí)受上述OSBL的加載。LINUXdinux kernel):位于ARMll端,是處理器ARMll的操作系統(tǒng)內(nèi)核,終端啟動(dòng)時(shí)受上述APPSBL的加載。ANDROID (android system) :ARM11核的操作系統(tǒng),終端啟動(dòng)時(shí)受上述LINUX的加載。各固件在終端啟動(dòng)過(guò)程中的調(diào)用順序如圖2中的箭頭線所示,基帶處理器(BP)上的OSBL加載與之同核的ADSP、AMSS,以及應(yīng)用處理器(AP)的APPSBL,實(shí)現(xiàn)跨核(處理器)加載。圖2還包含一個(gè)名為Fota_ua的固件更新模塊,即固件無(wú)線更新(FirmwareOver-the-Air, F0TA)的更新代理(update agent),位于ARMll端的LINUX上,用于對(duì)固件進(jìn)行更新,在終端啟動(dòng)時(shí)受上述APPSBL的加載。在現(xiàn)有技術(shù)中,由于固件更新模塊本身位于LINUX上,所以只能由LINUX實(shí)現(xiàn)對(duì)其加載的ANDROID的更新,而其他需要更新的固件,如AMSS、ADSP,以及LINUX本身等固件,因并非由LINUX加載(LINUX也無(wú)法實(shí)現(xiàn)自身更新,只能借助PC機(jī)實(shí)現(xiàn)其更新),所以則無(wú)法通過(guò)LINUX對(duì)其進(jìn)行更新,即無(wú)法實(shí)現(xiàn)直接通過(guò)移動(dòng)終端完成這些固件的更新。在本發(fā)明的一個(gè)實(shí)施例中,將固件更新模塊單獨(dú)作為一固件來(lái)實(shí)現(xiàn)對(duì)其他固件的更新,第一固件即固件更新模塊為Fota_ua(以下簡(jiǎn)稱Fota),操作系統(tǒng)內(nèi)核為L(zhǎng)INUX,其加載的操作系統(tǒng)固件為ANDROID (對(duì)應(yīng)的操作系統(tǒng)為Android軟件系統(tǒng))。通信終端獲知LINUX需要更新,則下載LINUX需要更新所需要的更新數(shù)據(jù),并將預(yù)定標(biāo)志位設(shè)置為某一特定值,用于表示LINUX需要更新。在終端再次啟動(dòng)過(guò)程中,加載至Fota處,F(xiàn)ota讀取該預(yù)定標(biāo)志位的值,獲知LINUX需要更新,于是確定上述更新數(shù)據(jù)在LINUX中的寫(xiě)入位置,并將上述更新數(shù)據(jù)寫(xiě)入該位置來(lái)實(shí)現(xiàn)對(duì)LINUX的更新。如果寫(xiě)入成功,F(xiàn)ota將該預(yù)定標(biāo)志位設(shè)置為另一特定值,標(biāo)識(shí)LINUX的更新成功。上述通信終端獲知LINUX需要更新,是當(dāng)LINUX有了更新版本時(shí),由服務(wù)器端得到最新版本并以無(wú)線廣播的方式通知所有通信終端(如果是固定連接方式的通信終端,則通過(guò)固網(wǎng)線路進(jìn)行通知)而獲知。服務(wù)器端可以將LINUX的最新版本以及其之前版本分別的鏡像或數(shù)據(jù),利用預(yù)定算法制作兩個(gè)版本的鏡像或數(shù)據(jù)的差分包,并進(jìn)行保存。最新版本較之前的版本相比,可能是升級(jí)版本,也可能因之前版本的某些錯(cuò)誤而需要還原成的舊版本,所以上述更新可以是升級(jí)或是還原。而利用預(yù)定算法制作出的兩個(gè)版本的差分包即增量數(shù)據(jù),可以是直接增加的數(shù)據(jù)或者覆蓋至部分原數(shù)據(jù)所在位置的數(shù)據(jù),或者兩者都包含。使用的預(yù)定算法上述不同的更新情況,可以為任何已知的增量數(shù)據(jù)算法或還原算法等,比如服務(wù)器端可使用Redband提供的算法及工具來(lái)制作鏡像差分包。服務(wù)器端也可以不制作差分包,而是直接保存新版本的全部?jī)?nèi)容,以供通信終端直接下載新版本的全部數(shù)據(jù),確定LINUX上的覆蓋位置,將新版本的數(shù)據(jù)直接覆蓋在LINUX上。但此方式使終端下載的數(shù)據(jù)量較大,更新的速度也較慢,尤其對(duì)使用無(wú)線網(wǎng)絡(luò)的移動(dòng)終端和內(nèi)存較小的終端,使用差分包的寫(xiě)入方式更具優(yōu)勢(shì)。上述通信終端獲知LINUX需要更新,是通過(guò)操作系統(tǒng)固件(即ANDROID)中的文件系統(tǒng)(File System,FS)單元檢測(cè)到服務(wù)器端有固件(此例中為L(zhǎng)INUX)需要更新,F(xiàn)S單元于是下載上述鏡像差分包(此例中以服務(wù)器端存有鏡像差分包為例),并將其存入通信終 端的預(yù)定區(qū)域中,預(yù)定區(qū)域如nand(—種閃存)的特定分區(qū)內(nèi),或者emmc卡(一種內(nèi)嵌式存儲(chǔ)器,常用于移動(dòng)終端)上?;蛘咭部梢杂葾NDROID上運(yùn)行的一軟件來(lái)檢測(cè)服務(wù)器端是否有固件更新的差分包,檢測(cè)到有差分包之后通知FS單元進(jìn)行下載,或該軟件直接下載至通信終端。FS單元下載了 LINUX更新需要的鏡像差分包后,在一狀態(tài)信息文件中寫(xiě)入LINUX需要更新的標(biāo)識(shí),然后重啟終端;該狀態(tài)信息文件可以為固件更新?tīng)顟B(tài)標(biāo)識(shí),此處稱為標(biāo)志位F0TA_FLAG,可被DBL、FSBL(該固件存在時(shí))以及Fota以及LINUX所讀取。LINUX需要更新的標(biāo)識(shí)即為上述第二值,這里假設(shè)為2(此處僅為舉例,比如可用二進(jìn)制數(shù)0010代表)。標(biāo)志位F0TA_FLAG的初始值假設(shè)為I ( 二進(jìn)制數(shù)0001,即上述第一值),初始值表示終端中各固件均無(wú)需進(jìn)行更新。在終端再次啟動(dòng)的過(guò)程中,DBL讀取標(biāo)志位F0TA_FLAG的值,獲知需要更新的固件為L(zhǎng)INUX,于是無(wú)需進(jìn)行特別處理,對(duì)基本設(shè)備配置進(jìn)行加載,維持正常的加載順序,使終端逐步加載至APPSBL。上述DBL讀取標(biāo)志位F0TA_FLAG的值也可由FSBL來(lái)進(jìn)行,只是由于一些芯片產(chǎn)品不具有單獨(dú)的FSBL,本處僅以DBL來(lái)讀取標(biāo)志位F0TA_FLAG的值進(jìn)行描述。由于無(wú)需在終端再次啟動(dòng)的過(guò)程中作特別處理,所以DBL和FSBL對(duì)標(biāo)志位F0TA_FLAG的讀取并非實(shí)現(xiàn)由Fota對(duì)LINUX進(jìn)行更新的必要步驟。APPSBL加載Fota后,F(xiàn)ota讀取標(biāo)志位F0TA_FLAG的值,即獲知LINUX需要更新,于是首先確認(rèn)上述鏡像差分包中的數(shù)據(jù)在LINUX中的寫(xiě)入位置,然后利用RedBend算法寫(xiě)入該位置來(lái)實(shí)現(xiàn)對(duì)LINUX的更新。完成上述與入后,即更新成功后,F(xiàn)ota在標(biāo)志似F0TA_FLAG中與入完成標(biāo)志,該完成標(biāo)志可以專門(mén)標(biāo)識(shí)對(duì)LINUX的更新成功(即其他固件的更新成功使用其他值),也可以直接恢復(fù)到初始值I (上述第一值),因初始值標(biāo)識(shí)沒(méi)有固件需要更新,而LINUX的更新已經(jīng)完成,且沒(méi)有其他固件同時(shí)需要更新時(shí)(一般很少出現(xiàn)幾個(gè)固件同時(shí)需要更新的情況),亦可用初始值表示LINUX已經(jīng)更新完成。Fota不只可進(jìn)行固件的無(wú)線更新,在有線更新時(shí)Fota同樣可使用本申請(qǐng)中描述的更新方式,實(shí)現(xiàn)對(duì)固件的更新。在一個(gè)具體實(shí)施例中,通信終端下載上述第二固件更新需要的更新數(shù)據(jù)包括通信終端對(duì)第二固件更新需要的更新數(shù)據(jù)進(jìn)行驗(yàn)證,并將通過(guò)驗(yàn)證的更新數(shù)據(jù)存入預(yù)定位置;將所述第二固件更新需要的更新數(shù)據(jù)寫(xiě)入所述寫(xiě)入位置包括從所述預(yù)定位置獲得第二固件更新需要的更新數(shù)據(jù),并將第二固件更新需要的更新數(shù)據(jù)寫(xiě)入所述寫(xiě)入位置。終端ANDROID上的FS單元下載了鏡像差分包之后,可以直接存入預(yù)定區(qū)域,也可以下載后先緩存并進(jìn)行驗(yàn)證,比如對(duì)服務(wù)器端即信息發(fā)布者進(jìn)行識(shí)別,是否是偽造身份的信息發(fā)布者(比如LINUX鏡像差分包并非由官方發(fā)布)。當(dāng)驗(yàn)證通過(guò)后,再將鏡像差分包寫(xiě)入預(yù)定區(qū)域。而后續(xù)的更新步驟中,F(xiàn)ota將通過(guò)驗(yàn)證,并保存在該預(yù)定區(qū)域中的LINUX更新需要的差分包進(jìn)行讀取和寫(xiě)入。在另一個(gè)具體實(shí)施例中,F(xiàn)S單元將LINUX的鏡像差分包寫(xiě)入nand的特定分區(qū),并對(duì)F0TA_FLAG設(shè)置LINUX需要更新的標(biāo)識(shí)值后,可以直接引導(dǎo)終端進(jìn)入再次啟動(dòng)狀態(tài),也可先通過(guò)顯示提示消息,詢問(wèn)是否重啟終端,如果用戶選擇跳過(guò)更新環(huán)節(jié),則標(biāo)志位F0TA_FLAG標(biāo)識(shí)LINUX需要更新的標(biāo)志位的值保留為2,LINUX更新需要的鏡像差分包也保留在 nand的特定分區(qū)中,繼續(xù)使用終端中當(dāng)前版本的LINUX,直至終端下次啟動(dòng)時(shí),由Fota讀取該標(biāo)志位時(shí),再進(jìn)行LINUX的更新。在另一個(gè)實(shí)施例中,F(xiàn)ota自己本身不直接讀取標(biāo)志位F0TA_FLAG的值。接上述FS下載完LINUX更新需要的差分包,并將通信終端再次啟動(dòng)時(shí),第一固件獲知預(yù)定標(biāo)志位為第二值包括由第三固件獲知預(yù)定標(biāo)志位設(shè)置為第二值后,調(diào)用所述第一固件,使所述第一固件獲知所述預(yù)定標(biāo)志位為第二值;其中,所述第三固件為,在所述通信終端啟動(dòng)過(guò)程中,直接加載所述第一固件的固件。上述的第三固件為APPSBL,它在終端啟動(dòng)過(guò)程中對(duì)Fota進(jìn)行加載。APPSBL加載后,讀取標(biāo)志位F0TA_FLAG的值為2,即獲知LINUX需要更新,于是加載Fota時(shí)通知標(biāo)志位F0TA_FLAG的值為2 (在Fota中存有標(biāo)志位F0TA_FLAG的值與其標(biāo)識(shí)內(nèi)容的對(duì)照表),或直接通知LINUX需要更新,使得Fota通過(guò)確定LINUX的更新數(shù)據(jù)寫(xiě)入位置并在該位置進(jìn)行更新數(shù)據(jù)的寫(xiě)入,來(lái)完成對(duì)LINUX的更新。在另一個(gè)實(shí)施例中,通信終端包括含有第一核和第二核的處理器,第一固件位于第二核,操作系統(tǒng)內(nèi)核位于第二核;而第二固件進(jìn)一步包括位于第一核的固件。在這個(gè)實(shí)施例中,第二固件還包含ADSP和AMSS。第一固件Fota和操作系統(tǒng)內(nèi)核LINUX位于第二核即ARMll中,而ADSP和AMSS均位于第一核即ARM9中。Fota不但能更新與其同核(即位于同一個(gè)處理器,以下簡(jiǎn)稱同核)的固件LINUX,還能跨核更新ARM9中的固件ADSP和AMSS。因?yàn)閮珊酥g通過(guò)共享內(nèi)存來(lái)進(jìn)行交互,所以由ANDROID的FS單元下載的ADSP或者AMSS更新需要的差分包(為方便描述,下文均以寫(xiě)入差分?jǐn)?shù)據(jù)為例來(lái)實(shí)現(xiàn)固件更新)存入nand的特定分區(qū),是可以被Fota用于向與其處在不同核的ADSP或AMSS進(jìn)行寫(xiě)入來(lái)實(shí)現(xiàn)更新的。此例中nand的特定分區(qū),與前例中nand的特定分區(qū)可以共用同一個(gè)特定分區(qū),通過(guò)差分包上的標(biāo)識(shí)信息來(lái)區(qū)別分區(qū)中的差分包屬于哪一個(gè)固件,也可以使LINUX、ADSP以及AMSS更新需要的差分包分別存入不同的nand的特定分區(qū),從分區(qū)的位置即能識(shí)別存入的差分包屬于哪一固件。在Fota對(duì)ADSP或AMSS的相應(yīng)位置成功寫(xiě)入差分包之后,反饋給OSBL,讓OSBL重新調(diào)用更新后的ADSP或AMSS進(jìn)入內(nèi)存。上述實(shí)施例中的標(biāo)志位F0TA_FLAG的值為2僅標(biāo)識(shí)LINUX需要更新(即一具體固件需要更新),ADSP和AMSS需要更新的標(biāo)志位可以設(shè)置為其他值(比如二進(jìn)制數(shù)0011和0100),使得Fota讀取標(biāo)志位F0TA_FLAG時(shí)即獲知哪一具體固件需要更新。在一個(gè)可替代的實(shí)施例中,標(biāo)志位F0TA_FLAG的值為2也可標(biāo)識(shí)LINUX、ADSP或AMSS中的任一個(gè)或多個(gè)固件需要更新,因?yàn)檫@幾種固件的更新方式大致相同,可歸位一類(lèi)固件。由于更新數(shù)據(jù)(差分包)中攜帶了不同固件的標(biāo)識(shí)信息,F(xiàn)ota在讀取標(biāo)志位F0TA_FLAG獲知是哪一類(lèi)固件需要更新后,可根據(jù)更新數(shù)據(jù)中的這些標(biāo)識(shí)信息,來(lái)判斷是哪個(gè)具體固件需要更新,這樣使標(biāo)志位變得簡(jiǎn)單,比如僅需8位二進(jìn)制即I個(gè)Byte來(lái)設(shè)置標(biāo)志位的長(zhǎng)即可,本文后續(xù)的實(shí)施例均以此方式來(lái)舉例描述。LINUX、ADSP與AMSS中兩個(gè)或三個(gè)固件同時(shí)需要更新的場(chǎng)景很少,即使遇到此種場(chǎng)景,F(xiàn)ota從差分包中的標(biāo)識(shí)信息中獲知所有需要更新的此類(lèi)固件,只有在所有需要更新的此類(lèi)固件都成功獲得更新后,F(xiàn)ota才會(huì)將標(biāo)志位F0TA_FLAG的值設(shè)置為第一值(如初始值I)。在另一個(gè)實(shí)施例中,上述第二固件更新成功后,第一固件將預(yù)定標(biāo)志位設(shè)置為第一值具體包括 第二固件更新成功后,將預(yù)定標(biāo)志位設(shè)置為第三值;操作系統(tǒng)內(nèi)核判斷操作系統(tǒng)內(nèi)核對(duì)應(yīng)的操作系統(tǒng)是否需要更新;如果需要更新,操作系統(tǒng)內(nèi)核對(duì)操作系統(tǒng)進(jìn)行更新,在更新成功后,通知第一固件;第一固件將預(yù)定標(biāo)志位設(shè)置為第一值。在一個(gè)具體實(shí)施例中,F(xiàn)S單元從服務(wù)器端下載的固件更新數(shù)據(jù)包含LINUX、ADSP和/或AMSS更新需要的差分包,以及ANDROID更新需要的差分包。當(dāng)然,ADSP和/或AMSS與ANDROID同時(shí)需要更新的場(chǎng)景很少,只在個(gè)別情況下,LINUX與ANDROID同時(shí)需要更新。在只有一個(gè)標(biāo)志位F0TA_FLAG的情況下,標(biāo)志位F0TA_FLAG的值被設(shè)置為2,用來(lái)指示LINUX、ADSP和/或AMSS需要更新,此時(shí)Fota無(wú)法獲知ANDROID是否也需要更新。在這個(gè)實(shí)施例中,LINUX、ADSP和/或AMSS更新成功后,F(xiàn)ota先將標(biāo)志位F0TA_FLAG由2改為3,然后通知LINUX,由LINUX判斷ANDROID是否需要更新。如果ANDROID不需要更新,則LINUX將標(biāo)志位F0TA_FLAG改為I (0001)。I為初始狀態(tài),即沒(méi)有任何固件需要更新或所有固件更新成功。如果ANDROID需要更新,則LINUX確定差分包在ANDROID中的寫(xiě)入位置,并將差分包寫(xiě)入這個(gè)位置,完成對(duì)ANDROID的更新。在上述實(shí)施例基礎(chǔ)上的一個(gè)較優(yōu)實(shí)施例中,在將預(yù)定標(biāo)志位設(shè)置為第三值后,在第一固件將預(yù)定標(biāo)志位設(shè)置為第一值前,該固件更新方法進(jìn)一步包括如果通信終端再次啟動(dòng)時(shí),第二固件獲知預(yù)定標(biāo)志位為第三值,返回對(duì)操作系統(tǒng)進(jìn)行更新的步驟。通過(guò)標(biāo)志位F0TA_FLAG來(lái)獲知終端的哪個(gè)或哪類(lèi)固件需要更新,能在本次更新失敗的情況下,在下次啟動(dòng)過(guò)程中迅速定位到需要更新的固件并再次進(jìn)行該固件的更新。在上述這些實(shí)施例中,在Fota對(duì)LINUX、ADSP或AMSS進(jìn)行更新時(shí),F(xiàn)ota確定差分包在LINUX、ADSP或AMSS中的寫(xiě)入位置后,將差分包在該位置進(jìn)行寫(xiě)入時(shí)出現(xiàn)故障(包括終端掉電),致使終端再次啟動(dòng),由于標(biāo)志位F0TA_FLAG的值仍為2,終端再次啟動(dòng)過(guò)程中,F(xiàn)ota從標(biāo)志位F0TA_FLAG的值獲知LINUX、ADSP或AMSS的此類(lèi)固件需要更新,則將在上次更新過(guò)程中已經(jīng)確定的LINUX、ADSP或AMSS更新數(shù)據(jù)的寫(xiě)入位置中,再次寫(xiě)入相應(yīng)的更新數(shù)據(jù),實(shí)現(xiàn)對(duì)LINUX、ADSP或AMSS的更新。更新成功后,F(xiàn)ota將標(biāo)志位F0TA_FLAG的值設(shè)置回初始值。如果本次更新仍遇到故障,則在下一次啟動(dòng)過(guò)程中,繼續(xù)上述對(duì)LINUX、ADSP或AMSS的更新。在上述Fota將標(biāo)志位F0TA_FLAG設(shè)置為3之后,如果LINUX判斷,ANDROID需要更新,于是對(duì)ANDROID進(jìn)行更新。當(dāng)LINUX對(duì)ANDROID的更新過(guò)程出現(xiàn)故障,所以LINUX還未將標(biāo)志位F0TA_FLAG的值設(shè)置為I時(shí),終端因更新故障而再次啟動(dòng),標(biāo)志位F0TA_FLAG的值被保留為3。在再次啟動(dòng)的過(guò)程中,F(xiàn)ota讀到標(biāo)志位F0TA_FLAG的值為3,則獲知ANDROID 需要更新,于是直接通知LINUX對(duì)ANDROID進(jìn)行更新。在LINUX對(duì)ANDROID更新成功后,標(biāo)志位FOTA_FLAG的值被設(shè)置為1,如果LINUX對(duì)ANDROID的更新再次失敗,仍會(huì)繼續(xù)上述終端再次啟動(dòng)、以及Fota讀到標(biāo)志位FOTA_FLAG的值為3,并通知LINUX對(duì)ANDROID進(jìn)行更新的步驟。前文描述中提到,通信終端需要更新的固件還包括OSBL、APPSBL以及Fota自身,針對(duì)于OSBL、APPSBL以及Fota自身需要更新時(shí),如果僅采用上述實(shí)施例中的方法來(lái)實(shí)現(xiàn)終端自身對(duì)這些固件進(jìn)行更新,在Fota對(duì)OSBL、APPSBL進(jìn)行更新的過(guò)程中,如果出現(xiàn)故障致使OSBL、APPSBL損壞,由于OSBL、APPSBL加載成功后Fota才能加載,所以終端再次啟動(dòng)時(shí)無(wú)法恢復(fù)OSBL或APPSBL,則無(wú)法加載Fota來(lái)繼續(xù)上次未完成的更新。另外,F(xiàn)ota對(duì)自身也無(wú)法進(jìn)行更新。如圖3所示,本發(fā)明實(shí)施例采用如下方式進(jìn)行固件更新通信終端獲知第五固件需要更新;通信終端下載第五固件更新需要的更新數(shù)據(jù);通信終端將預(yù)定標(biāo)志位設(shè)置為第四值;通信終端再次啟動(dòng)時(shí),第四固件獲知預(yù)定標(biāo)志位為第三值后,形成第五固件的備份固件,確定第五固件更新需要的更新數(shù)據(jù)在第五固件的備份固件中的第一寫(xiě)入位置,并將第五固件更新需要的更新數(shù)據(jù)寫(xiě)入第一寫(xiě)入位置,形成第五固件的備份更新固件;第四固件確定第五固件中的第二寫(xiě)入位置,將備份更新固件中的數(shù)據(jù),寫(xiě)入第二寫(xiě)入位置,實(shí)現(xiàn)第五固件的更新;第五固件更新成功后,第四固件將預(yù)定標(biāo)志位設(shè)置為第五值;其中,第四固件為固件更新模塊,第五固件為第四固件,和/或通信終端啟動(dòng)過(guò)程中,早于第四固件被調(diào)用的固件。上述第五固件包括OSBL、APPSBL以及Fota自身,當(dāng)然也可包含ADSP、AMSS以及LINUX,但對(duì)后三者的更新采用前文提到的多種實(shí)施例均可實(shí)現(xiàn),所以下面僅描述0SBL、APPSBL以及Fota自身的更新方法。下面仍以服務(wù)器端制作鏡像或數(shù)據(jù)的差分包并廣播通知通信終端為例進(jìn)行描述。在一個(gè)具體實(shí)施例中,通信終端通過(guò)FS單元或者ANDROID上運(yùn)行一檢測(cè)軟件獲知OSBL即上述第五固件需要升級(jí)(本例以固件升級(jí)為例),F(xiàn)S單元或檢測(cè)軟件(下文以FS單元為例)將OSBL更新需要的差分包下載至emmc卡上(當(dāng)然也可存于nand的特定分區(qū)),將預(yù)定標(biāo)志位(下以標(biāo)志位F0TA_FLAG為例進(jìn)行描述)的值設(shè)置為2 (此處只為舉例,比如2即二進(jìn)制數(shù)0010,標(biāo)識(shí)OSBL需要更新),即上述第四值。
當(dāng)終端再次啟動(dòng)時(shí),上述第四固件即Fota通過(guò)讀取標(biāo)志位F0TA_FLAG的值為2而獲知第五固件(OSBL)需要更新,遂在終端的預(yù)定區(qū)域內(nèi)(比如RAM內(nèi))形成OSBL的備份固件,然后確定OSBL更新需要的差分包在OSBL的備份固件上的寫(xiě)入位置即第一寫(xiě)入位置,并將OSBL更新需要的差分包寫(xiě)入第一寫(xiě)入位置,對(duì)OSBL的備份固件進(jìn)行升級(jí)。升級(jí)成功后即生成OSBL的備份更新固件。此時(shí)Fota先確定OSBL的第二寫(xiě)入位置,將OSBL的備份更新固件寫(xiě)入該第二寫(xiě)入位置。一般來(lái)說(shuō),在該第二位置的寫(xiě)入,是對(duì)OSBL原始版本的覆蓋,當(dāng)覆蓋成功時(shí)也就實(shí)現(xiàn)了 OSBL的更新。覆蓋成功后,F(xiàn)ota將標(biāo)志位F0TA_FLAG的值恢復(fù)為I (初始值),即沒(méi)有固件需要更新。因?yàn)镺SBL已經(jīng)成功更新,所以“沒(méi)有固件需要更新”也可用來(lái)標(biāo)識(shí)OSBL更新成功。在另一個(gè)實(shí)施例中,通信終端獲知Fota本身需要更新,在上述FS單元將Fota更新需要的差分包下載至emmc卡上,并將標(biāo)志位F0TA_FLAG設(shè)置為2,此例中2標(biāo)識(shí)0SBL、APPSBL以及Fota這一類(lèi)固件需要更新,而具體哪一個(gè)固件需要更新,則可從差分包上的標(biāo)識(shí)信息中獲知。終端再次啟動(dòng)后,F(xiàn)ota從標(biāo)志位F0TA_FLAG處獲知自身需要更新,則在預(yù)定 區(qū)域內(nèi)(比如RAM內(nèi))形成Fota的備份固件,然后確定Fota更新需要的差分包在Fota的備份固件上的寫(xiě)入位置即第一寫(xiě)入位置,并將Fota更新需要的差分包寫(xiě)入第一寫(xiě)入位置,對(duì)Fota的備份固件進(jìn)行升級(jí),生成Fota的備份更新固件。然后,F(xiàn)ota確定自身的第二寫(xiě)入位置,使Fota的備份更新固件寫(xiě)入該第二寫(xiě)入位置。寫(xiě)入成功后,F(xiàn)ota將標(biāo)志位F0TA_FLAG的值恢復(fù)為初始值I。在一個(gè)較優(yōu)實(shí)施例中,上述通信終端下載第五固件更新需要的更新數(shù)據(jù)具體為,通信終端對(duì)第五固件更新需要的更新數(shù)據(jù)進(jìn)行驗(yàn)證,并將通過(guò)驗(yàn)證的第五固件更新需要的更新數(shù)據(jù)存入預(yù)定位置;將第五固件更新需要的更新數(shù)據(jù)寫(xiě)入第一寫(xiě)入位置包括從預(yù)定位置獲得第五固件更新需要的更新數(shù)據(jù),并將第五固件更新需要的更新數(shù)據(jù)寫(xiě)入第一寫(xiě)入位置。通信終端ANDROID上的FS單元下載了第五固件的鏡像或數(shù)據(jù)差分包之后,可以直接存入預(yù)定區(qū)域,也可以下載后先緩存并進(jìn)行驗(yàn)證,比如對(duì)服務(wù)器端即信息發(fā)布者進(jìn)行識(shí)另IJ,是否是偽造身份的信息發(fā)布者(比如OSBL的鏡像或數(shù)據(jù)差分包并非由官方發(fā)布)。當(dāng)驗(yàn)證通過(guò)后,再將上述鏡像或數(shù)據(jù)差分包寫(xiě)入預(yù)定區(qū)域。而后續(xù)的更新步驟中,F(xiàn)ota將通過(guò)驗(yàn)證,并保存在該預(yù)定區(qū)域中的第五固件(比如0SBL)更新需要的差分包進(jìn)行讀取和寫(xiě)入。在一個(gè)具體實(shí)施例中,對(duì)標(biāo)志位F0TA_FLAG進(jìn)行設(shè)置之后,F(xiàn)S單元可以引導(dǎo)終端進(jìn)入再次啟動(dòng)狀態(tài),也可先通過(guò)顯示提示消息,詢問(wèn)是否重啟終端,如果用戶選擇跳過(guò)更新環(huán)節(jié),則標(biāo)志位F0TA_FLAG的值保留為2,OSBL更新需要的鏡像或數(shù)據(jù)差分包也保留在emmc卡上,直至終端下次啟動(dòng)時(shí),由Fota讀取到該標(biāo)志位的值為2時(shí),再行對(duì)OSBL進(jìn)行升級(jí)。在另一個(gè)實(shí)施例中,上述第五固件更新需要的更新數(shù)據(jù)為第五固件更新需要的差分包;第四固件將第五固件更新需要的更新數(shù)據(jù)寫(xiě)入第一寫(xiě)入位置包括第四固件使用預(yù)定算法將第五固件更新需要的差分包寫(xiě)入第一寫(xiě)入位置。在一個(gè)具體實(shí)施例中,更新數(shù)據(jù)為第五固件(比如APPSBL)新舊兩個(gè)版本的鏡像差分包(下述簡(jiǎn)稱差分包),操作系統(tǒng)中的FS單元將差分包存入終端的預(yù)定區(qū)域后,F(xiàn)ota即第四固件先形成APPSBL的備份固件,利用預(yù)定算法確定APPSBL更新需要的固件在APPSBL的備份固件上的第一寫(xiě)入位置,來(lái)對(duì)差分包進(jìn)行寫(xiě)入,形成APPSBL的備份更新固件。預(yù)定算法可以是任何已知的增量數(shù)據(jù)和對(duì)應(yīng)的增量數(shù)據(jù)還原算法,如使用Redband提供的算法及工具。與之可替代的實(shí)施例也可以是,終端直接下載APPSBL最新版本的全部?jī)?nèi)容,在對(duì)APPSBL的備份固件進(jìn)行更新時(shí),將最新版本完全覆蓋在舊版本之上即可,即無(wú)需使用差分算法來(lái)確定差分包的寫(xiě)入位置和進(jìn)行差分寫(xiě)入。在上述更新過(guò)程中,第五固件經(jīng)歷了備份-更新-覆蓋的環(huán)節(jié),而其中任一環(huán)節(jié)如果出現(xiàn)故障,可使用標(biāo)志位F0TA_FLAG來(lái)標(biāo)明固件更新所處的狀態(tài),以便能在下一次啟動(dòng)過(guò)程中迅速定位到出現(xiàn)故障的環(huán)節(jié)來(lái)進(jìn)行接續(xù)處理。即在更新(多數(shù)為升級(jí))過(guò)程中出現(xiàn)任何失敗或掉電等意外,F(xiàn)ota都能夠根據(jù)F0TA_FLAG獲知終端上次更新過(guò)程中停止在何種狀態(tài)。在另一具體實(shí)施例中,第四固件形成第五固件的備份固件之后,進(jìn)一步包括如下 步驟第四固件將預(yù)定標(biāo)志位設(shè)置為第六值;在第五固件更新成功之前,該方法進(jìn)一步包括如果通信終端再次啟動(dòng)時(shí),第四固件獲知預(yù)定標(biāo)志位為第六值,返回確定第五固件更新需要的更新數(shù)據(jù)在第五固件的備份固件中的第一寫(xiě)入位置的步驟。仍以O(shè)SBL需要更新為例,在第四固件Fota形成第五固件OSBL的備份固件之后,F(xiàn)ota將預(yù)定標(biāo)志位即標(biāo)志位F0TA_FLAG記錄為上述第六值,比如為3 (此例中下載更新差分包后該標(biāo)志位的值仍被設(shè)置為2),于是進(jìn)行對(duì)OSBL的備份固件的升級(jí)。如果對(duì)OSBL的備份固件的升級(jí)出現(xiàn)故障而再次重啟時(shí),F(xiàn)ota從F0TA_FLAG標(biāo)志位的值為3即可獲知OSBL的備份固件已經(jīng)形成,并且對(duì)OSBL的備份固件的升級(jí)并未完成(即OSBL的備份更新固件并未成功生成),所以Fota可直接在上次更新中確定的第一寫(xiě)入位置處,進(jìn)行OSBL更新需要的差分包在OSBL的備份固件上的寫(xiě)入,也可以重新確定第一寫(xiě)入位置,再進(jìn)行OSBL的備份固件的更新。在上述實(shí)施例的基礎(chǔ)上,或者在另一單獨(dú)的實(shí)施例中,第四固件形成第五固件的備份更新固件之后,該方法進(jìn)一步包括第四固件將預(yù)定標(biāo)志位設(shè)置為第七值;在第五固件更新成功之前,該方法進(jìn)一步包括如果通信終端再次啟動(dòng)時(shí),第四固件獲知預(yù)定標(biāo)志位為第七值,則返回確定所述第五固件中的第二寫(xiě)入位置的步驟。在一具體實(shí)施例中,如果對(duì)OSBL的備份固件的升級(jí)成功,則Fota將標(biāo)志位F0TA_FLAG的值設(shè)置為第七值(比如為4),然后繼續(xù)進(jìn)行OSBL的備份更新固件對(duì)原OSBL的覆蓋。在F0TA_FLAG的值被設(shè)置為4之前,其值可以為3,標(biāo)識(shí)OSBL的備份固件已經(jīng)形成而OSBL的備份更新固件還未生成,也可以為2,即僅標(biāo)識(shí)OSBL需要進(jìn)行更新,而未在OSBL的備份固件已經(jīng)形成時(shí)調(diào)整標(biāo)志位F0TA_FLAG的值。在后一種情況下,如果覆蓋失敗,則終端再次啟動(dòng)過(guò)程中,將無(wú)法獲知OSBL的備份固件已經(jīng)形成,F(xiàn)ota還需再次生成OSBL的備份固件。在上述兩個(gè)實(shí)施例的基礎(chǔ)上,或者在另一單獨(dú)的實(shí)施例中,第四固件形成第五固件的備份更新固件之后,該方法進(jìn)一步包括第四固件將預(yù)定標(biāo)志位設(shè)置為第七值;
在第五固件更新成功之前,該方法進(jìn)一步包括如果通信終端再次啟動(dòng)時(shí),第四固件獲知預(yù)定標(biāo)志位為第七值,則返回確定第五固件中的第二寫(xiě)入位置的步驟。在一個(gè)具體實(shí)施例中,如果OSBL的備份更新固件對(duì)OSBL的覆蓋成功,F(xiàn)ota將標(biāo)志位F0TA_FLAG的值(由4,接續(xù)上述實(shí)施例)再次設(shè)置為初始值1,表明OSBL更新完畢。如果覆蓋過(guò)程出現(xiàn)故障,標(biāo)志位F0TA_FLAG的值保留為4,終端再次啟動(dòng)至Fota時(shí),F(xiàn)ota讀取到F0TA_FLAG的值為4,獲知OSBL的備份更新固件已經(jīng)生成,而由于覆蓋過(guò)程出現(xiàn)了故障,則Fota直接使OSBL的備份更新固件覆蓋在OSBL上的第二寫(xiě)入位置,或者重新確定第二寫(xiě)入位置,再對(duì)OSBL進(jìn)行覆蓋。由于OSBL、APPSBL或Fota備份更新固件在原固件上的覆蓋過(guò)程出現(xiàn)故障,可能致使終端再次啟動(dòng)時(shí)無(wú)法正常加載Fota,所以終端再次啟動(dòng)的過(guò)程中,第六固件(包括DBL或FSBL)也會(huì)讀取標(biāo)志位F0TA_FLAG的值。本例以DBL為例,當(dāng)DBL讀取到標(biāo)志位F0TA_FLAG的值為4時(shí),則會(huì)改變固件的加載順序。本例中,標(biāo)志位F0TA_FLAG的值為4僅標(biāo)識(shí)0SBL、 APPSBL或Fota這一類(lèi)固件的更新中的覆蓋環(huán)節(jié)出現(xiàn)問(wèn)題,而不具體標(biāo)明其中的哪一個(gè)固件的更新過(guò)程中,備份更新固件對(duì)原固件的覆蓋出現(xiàn)問(wèn)題,所以DBL讀取到標(biāo)志位F0TA_FLAG的值為4時(shí),還需結(jié)合固件更新需要的差分包上的標(biāo)識(shí)信息,對(duì)哪一個(gè)具體固件進(jìn)行確認(rèn)。比如當(dāng)標(biāo)志位F0TA_FLAG的值為4時(shí),DBL判斷出備份更新固件的覆蓋過(guò)程出現(xiàn)故障的是 0SBL,則 DBL 將固件加載順序由 FSBL-OSBL-APPSBL 改為 FSBL-OSBL’ APPSBL, OSBLj即OSBL的備份更新固件。加載至Fota時(shí),F(xiàn)ota獲知標(biāo)志位F0TA_FLAG的值為4,并且也通過(guò)差分包上的標(biāo)識(shí)信息獲知是OSBL的更新過(guò)程中出現(xiàn)的故障,則對(duì)OSBL的備份更新固件在OSBL上的第二寫(xiě)入位置進(jìn)行覆蓋。當(dāng)DBL判斷出備份更新固件的覆蓋過(guò)程出現(xiàn)故障的是APPSBL時(shí),將加載順序由FSBL-OSBL-APPSBL 改為 FSBL-OSBL-APPSBL’,APPSBL’ 即 APPSBL 的備份更新固件。當(dāng) DBL判斷出備份更新固件的覆蓋過(guò)程出現(xiàn)故障的是Fota時(shí),將加載順序由OSBL-APPSBL-Fota改為OSBL-APPSBL-Fota’,F(xiàn)ota’即Fota的備份更新固件。需要說(shuō)明的是,DBL在終端的每次啟動(dòng)過(guò)程中都將讀取標(biāo)志位F0TA_FLAG的值,當(dāng)不需要其改變固件加載順序時(shí),按正常順序加載至Fota,由Fota讀取標(biāo)志位F0TA_FLAG的值來(lái)判斷終端目前的更新?tīng)顟B(tài),再繼續(xù)相應(yīng)的處理;而在需要其改變固件加載順序時(shí),對(duì)加載順序進(jìn)行調(diào)整,從而避免出現(xiàn)上述無(wú)法重啟的情形。上述不需要改變固件加載順序的情形包括需要先行加載,F(xiàn)ota才能加載的固件(如OSBL、APPSBL)或者Fota自身需要更新時(shí),并非由于備份更新固件的覆蓋出現(xiàn)故障使終端需要再次啟動(dòng)的情形;以及早于、晚于或與Fota同時(shí)加載,但其是否成功加載不會(huì)影響到Fota的加載的固件(如ADSP、AMSS, LINUX以及ANDROID)需要更新時(shí)的情形。在一個(gè)具體實(shí)施例中,該固件更新方法進(jìn)一步包括通信終端獲知第七固件需要更新;通信終端下載第七固件更新需要的更新數(shù)據(jù);通信終端將預(yù)定標(biāo)志位設(shè)置為第八值;通信終端再次啟動(dòng)時(shí),第四固件獲知預(yù)定標(biāo)志位為第八值后,確定第七固件更新需要的更新數(shù)據(jù)在第七固件中的寫(xiě)入位置,并將第七固件更新需要的更新數(shù)據(jù)寫(xiě)入該寫(xiě)入位置,實(shí)現(xiàn)第七固件的更新;第七固件更新成功后,第四固件將預(yù)定標(biāo)志位設(shè)置為第一值;其中,所述第七固件包括操作系統(tǒng)內(nèi)核。上述第七固件包括LINUX,當(dāng)通信終端通過(guò)FS單元獲知LINUX需要更新后,F(xiàn)S單元下載差分包之后將標(biāo)志位F0TA_FLAG改寫(xiě)為第八值(比如為5),并引導(dǎo)終端再次啟動(dòng)。在終端重啟過(guò)程中,F(xiàn)ota讀取標(biāo)志位F0TA_FLAG的值為5后,無(wú)需生成LINUX的備份固件,所以直接確定LINUX的更新數(shù)據(jù)的寫(xiě)入位置,并在LINUX上的該寫(xiě)入位置,寫(xiě)入上述差分包。在另一個(gè)實(shí)施例中,通信終端包括處理器,處理器包括第三核和第四核,第四固件位于第四核,操作系統(tǒng)內(nèi)核位于第四核,第七固件進(jìn)一步包括位于第三核的固件。在一個(gè)具體實(shí)施例中,終端采用的處理器為雙核即基帶處理器(BP)和應(yīng)用處理器(AP),第三核為BP,第四核為AP。Fota以及LINUX位于AP上,而第七固件進(jìn)一步包含位 于BP上的ADSP或者AMSS。兩核之間通過(guò)共享內(nèi)存來(lái)進(jìn)行交互,所以由ANDROID的FS單元下載的ADSP或者AMSS更新需要的差分包存入預(yù)定區(qū)域,是可以被Fota用于向與其處在不同核的ADSP或AMSS進(jìn)行寫(xiě)入來(lái)實(shí)現(xiàn)更新的。在上述實(shí)施例的基礎(chǔ)上,在第七固件更新成功后,所述第四固件將預(yù)定標(biāo)志位設(shè)置為第五值具體包括第七固件更新成功后,將預(yù)定標(biāo)志位設(shè)置為第九值;操作系統(tǒng)內(nèi)核判斷操作系統(tǒng)內(nèi)核對(duì)應(yīng)的操作系統(tǒng)是否需要更新;如果需要更新,操作系統(tǒng)內(nèi)核對(duì)操作系統(tǒng)進(jìn)行更新,在更新成功后,通知第四固件;第四固件將所述預(yù)定標(biāo)志位設(shè)置為第五值。在對(duì)第七固件的更新成功后,F(xiàn)ota將標(biāo)志位F0TA_FLAG設(shè)置為第九值(比如為6),并通知LINUX判斷是否需要對(duì)ANDROID進(jìn)行更新,如果判斷結(jié)果為ANDROID不需要更新,則LINUX將標(biāo)志位F0TA_FLAG設(shè)置為第五值即I ( 二進(jìn)制數(shù)0001),或者LINUX通知Fota,由Fota將標(biāo)志位F0TA_FLAG設(shè)置為I。如果判斷結(jié)果為ANDROID需要更新,則LINUX確定差分包在ANDROID中的寫(xiě)入位置,并將差分包寫(xiě)入這個(gè)位置,實(shí)現(xiàn)對(duì)ANDROID的更新。需要說(shuō)明的是,如果整個(gè)更新過(guò)程只有ANDROID需要更新,F(xiàn)S開(kāi)始即將標(biāo)志位F0TA_FLAG設(shè)置為6,F(xiàn)ota獲取標(biāo)志位F0TA_FLAG的值后可以直接調(diào)用LINUX來(lái)對(duì)ANDROID進(jìn)行更新,所以上述更新方式多為L(zhǎng)INUX和ANDROID同時(shí)發(fā)布了新版本因而同時(shí)需要更新的場(chǎng)合所推薦。進(jìn)一步的,在將預(yù)定標(biāo)志位設(shè)置為第九值后,在第四固件將預(yù)定標(biāo)志位設(shè)置為第五值之前,該方法進(jìn)一步包括如果通信終端再次啟動(dòng)時(shí),操作系統(tǒng)內(nèi)核獲知預(yù)定標(biāo)志位為第九值,則返回對(duì)操作系統(tǒng)進(jìn)行更新的步驟。具體的,如果LINUX在對(duì)ANDROID的更新過(guò)程中出現(xiàn)故障致使更新失敗(比如更新過(guò)程中斷電),則標(biāo)志位F0TA_FLAG的值仍保持為6 (第九值),在終端的下一次啟動(dòng)過(guò)程中,F(xiàn)ota識(shí)別出標(biāo)志位F0TA_FLAG為6,則通知LINUX對(duì)ANDROID進(jìn)行更新,直到ANDROID更新成功后,LINUX通知Fota,F(xiàn)ota將標(biāo)志位F0TA_FLAG設(shè)置為第五值(即初始值I),完成整個(gè)更新過(guò)程。
在一個(gè)實(shí)施例中,在第七固件更新成功之前,第四固件確定第七固件更新需要的更新數(shù)據(jù)在第七固件中的寫(xiě)入位置之后,該方法進(jìn)一步包括將第七固件更新需要的更新數(shù)據(jù)寫(xiě)入該寫(xiě)入位置,實(shí)現(xiàn)第七固件的更新。如果第七固件(比如ADSP)在更新過(guò)程中出現(xiàn)故障,導(dǎo)致終端再次啟動(dòng),至Fota被加載時(shí),從標(biāo)志位F0TA_FLAG的值為第八值(5)識(shí)別出第七固件需要進(jìn)行更新,則將ADSP更新需要的差分包寫(xiě)入上次更新過(guò)程中確定的在ADSP上的寫(xiě)入位置,實(shí)現(xiàn)對(duì)ADSP的更新。本發(fā)明還提供了一種芯片,如圖4所示,應(yīng)用于通信終端中,芯片包含第一固件和第二固件,其中,第一固件包含預(yù)定標(biāo)志位讀取模塊,用于獲知通信終端上的預(yù)定標(biāo)志位為第二值后,獲知第二固件需要更新;寫(xiě)入位置確定模塊,用于所述預(yù)定標(biāo)志位讀取模塊獲知所述第二固件需要更新后,確定所述第二固件更新需要的更新數(shù)據(jù)在所述第二固件中的寫(xiě)入位置;
更新寫(xiě)入模塊,用于所述寫(xiě)入位置確定模塊確定所述第二固件更新需要的更新數(shù)據(jù)在所述第二固件中的寫(xiě)入位置后,將所述第二固件更新需要的更新數(shù)據(jù)寫(xiě)入所述第二固件中的寫(xiě)入位置;預(yù)定標(biāo)志位設(shè)置模塊,用于在所述第二固件更新成功后,將所述預(yù)定標(biāo)志位設(shè)置為第一值;其中,所述第一固件為固件更新模塊,所述第二固件包括操作系統(tǒng)內(nèi)核。上述第一固件與操作系統(tǒng)內(nèi)核,分別與上述方法實(shí)施例中的第一固件(Fota)與操作系統(tǒng)內(nèi)核(LINUX)相對(duì)應(yīng),都包含在上述提供的芯片中。預(yù)定標(biāo)志位讀取模塊在獲知通信終端上的預(yù)定標(biāo)志位即標(biāo)志位F0TA_FLAG為第二值(比如2)后,獲知LINUX需要更新;寫(xiě)入位置確定模塊則在預(yù)定標(biāo)志位讀取模塊獲知LINUX需要更新后,確定LINUX更新需要的更新數(shù)據(jù)在LINUX中的寫(xiě)入位置;更新寫(xiě)入模塊在寫(xiě)入位置確定模塊確定LINUX更新需要的更新數(shù)據(jù)在LINUX中的寫(xiě)入位置后,將LINUX更新需要的更新數(shù)據(jù)寫(xiě)入該寫(xiě)入位置;預(yù)定標(biāo)志位設(shè)置模塊在LINUX更新成功后,將標(biāo)志位F0TA_FLAG設(shè)置為第一值(比如初始值1,用于標(biāo)識(shí)現(xiàn)在狀態(tài)為沒(méi)有固件需要更新,也就指示出本次更新成功)。進(jìn)一步的,上述芯片包括第一核與第二核,所述第一固件以及所述操作系統(tǒng)內(nèi)核位于所述第二核;所述第二固件進(jìn)一步包括位于所述第一核的固件。見(jiàn)上述方法實(shí)施例中,對(duì)于雙核芯片,F(xiàn)ota以及LINUX皆位于第二核(ARM11也即AP)上,ADSP以及AMSS都位于第一核(ARM9也即BP)上,F(xiàn)ota亦可通過(guò)上述各模塊來(lái)實(shí)現(xiàn)對(duì)ADSP以及AMSS的跨核更新。進(jìn)一步的,上述預(yù)定標(biāo)志位設(shè)置模塊進(jìn)一步用于,所述第二固件更新成功后,將所述預(yù)定標(biāo)志位設(shè)置為第三值,并通知所述操作系統(tǒng)內(nèi)核;并在接到所述操作系統(tǒng)內(nèi)核的更新成功通知后,將所述預(yù)定標(biāo)志位設(shè)置為第一值;所述操作系統(tǒng)內(nèi)核進(jìn)一步用于,判斷自身對(duì)應(yīng)的操作系統(tǒng)是否需要更新,如果需要更新,則對(duì)所述操作系統(tǒng)進(jìn)行更新,并在更新成功后向所述第一固件發(fā)送所述更新成功通知。在標(biāo)志位F0TA_FLAG —次只能設(shè)置一個(gè)值的情況下,可能出現(xiàn)LINUX與ANDROID同時(shí)需要更新的場(chǎng)景(ADSP以及AMSS與ANDROID同時(shí)需要更新的場(chǎng)景幾乎不會(huì)出現(xiàn)),所以如果出現(xiàn)LINUX與ANDROID同時(shí)需要更新的場(chǎng)景,標(biāo)志位F0TA_FLAG會(huì)被ANDROID的FS單元設(shè)置為第二值,也即指示LINUX需要更新,當(dāng)LINUX更新成功后,LINUX(或者其通知Fota,由Fota)將標(biāo)志位FOTA_FLAG設(shè)置為第三值(比如3),然后由LINUX去判斷ANDROID是否需要更新。如果LINUX判斷出ANDROID需要更新,則LINUX對(duì)ANDROID進(jìn)行更新,并在更新成功后(或者其通知Fota,由Fota)將標(biāo)志位FOTA_FLAG設(shè)置回初始值(I);如果LINUX判斷出ANDROID不需要更新,則(或者其通知Fota,由Fota)將標(biāo)志位FOTA_FLAG設(shè)置回初始值(I)。同樣的,如果在更新LINUX、ADSP或者AMSS的過(guò)程中出現(xiàn)故障,在終端再次開(kāi)始啟動(dòng)時(shí),標(biāo)志位FOTA_FLAG仍保留為2,則Fota讀到標(biāo)志位FOTA_FLAG的值時(shí),便可獲知是LINUX、ADSP或者AMSS的更新過(guò)程出現(xiàn)了故障,于是繼續(xù)進(jìn)行對(duì)LINUX、ADSP或者AMSS的更新。
本發(fā)明同時(shí)還提供了一種芯片,應(yīng)用于通信終端中,該芯片包含第四固件和第五固件,其中第四固件包含預(yù)定標(biāo)志位讀取模塊,用于獲知通信終端上的預(yù)定標(biāo)志位為第四值后,獲知第五固件需要更新;固件備份模塊,用于獲知所述預(yù)定標(biāo)志位為第四值后,形成所述第五固件的備份固件;第一寫(xiě)入位置確定模塊,用于形成所述第五固件的備份固件后,確定所述第五固件更新需要的更新數(shù)據(jù)在所述第五固件的備份固件中的第一寫(xiě)入位置;備份固件更新模塊,用于將所述第五固件更新需要的更新數(shù)據(jù)寫(xiě)入所述第一寫(xiě)入位置,形成所述第五固件的備份更新固件;第二寫(xiě)入位置確定模塊,用于備份固件更新模塊形成所述第五固件的備份更新固件之后,確定所述第五固件中的第二寫(xiě)入位置;備份更新固件寫(xiě)入模塊,用于所述第二寫(xiě)入位置確定后,將所述第五固件的備份更新固件中的數(shù)據(jù),寫(xiě)入所述第二寫(xiě)入位置,實(shí)現(xiàn)所述第五固件的更新;預(yù)定標(biāo)志位設(shè)置模塊,用于在所述第五固件更新成功后,將所述預(yù)定標(biāo)志位設(shè)置為第五值;其中,所述第四固件為固件更新模塊,所述第五固件為所述第四固件,和/或所述通信終端啟動(dòng)過(guò)程中,需要先行加載才能使第四固件加載的固件。上述第四固件與操作系統(tǒng)內(nèi)核,分別與上述方法實(shí)施例中的第四固件(Fota)與第五固件(可包含OSBL、APPSBL以及Fota自身)相對(duì)應(yīng),都包含在上述提供的芯片中。預(yù)定標(biāo)志位讀取模塊在獲知通信終端上的預(yù)定標(biāo)志位即標(biāo)志位F0TA_FLAG為第四值(比如2)后,獲知第五固件(比如0SBL)需要更新;固件備份模塊在獲知所述預(yù)定標(biāo)志位為2后,形成OSBL的備份固件;第一寫(xiě)入位置確定模塊在固件備份模塊形成OSBL的備份固件后,確定OSBL更新需要的更新數(shù)據(jù)在OSBL的備份固件中的第一寫(xiě)入位置;備份固件更新模塊于是將OSBL更新需要的更新數(shù)據(jù)寫(xiě)入第一寫(xiě)入位置,形成OSBL的備份更新固件;第二寫(xiě)入位置確定模塊在備份固件更新模塊形成OSBL的備份更新固件之后,確定OSBL中的第二寫(xiě)入位置;備份更新固件寫(xiě)入模塊在第二寫(xiě)入位置確定后,將OSBL的備份更新固件中的數(shù)據(jù),寫(xiě)入第二寫(xiě)入位置,實(shí)現(xiàn)OSBL的更新;預(yù)定標(biāo)志位設(shè)置模塊在OSBL更新成功后,將預(yù)定標(biāo)志位即標(biāo)志位F0TA_FLAG設(shè)置為第五值(比如初始值1,用于標(biāo)識(shí)現(xiàn)在狀態(tài)為沒(méi)有固件需要更新,也就指示出本次更新成功)。進(jìn)一步的,預(yù)定標(biāo)志位設(shè)置模塊進(jìn)一步用于,在所述固件備份模塊形成所述第五固件的備份固件之后,將所述預(yù)定標(biāo)志位設(shè)置為第六值;所述預(yù)定標(biāo)志位讀取模塊進(jìn)一步用于,當(dāng)所述通信終端再次啟動(dòng)時(shí),在獲知通信終端上的預(yù)定標(biāo)志位為第六值后,通知所述備份固件更新模塊形成所述第五固件的備份更新固件。在Fota中的固件備份模塊形成OSBL的備份固件之后,F(xiàn)ota中的預(yù)定標(biāo)志位設(shè)置模塊將標(biāo)志位F0TA_FLAG設(shè)置為第六值(比如3),這樣,當(dāng)在下一個(gè)更新環(huán)節(jié)即對(duì)OSBL的備份固件進(jìn)行更新時(shí)出現(xiàn)故障,通信終端再次啟動(dòng)時(shí),F(xiàn)ota中的預(yù)定標(biāo)志位讀取模塊獲知標(biāo)志位F0TA_FLAG為3后,通知備份固件更新模塊形成OSBL的備份更新固件。
進(jìn)一步的,所述預(yù)定標(biāo)志位設(shè)置模塊進(jìn)一步用于,在所述備份固件更新模塊形成所述第五固件的備份更新固件之后,將所述預(yù)定標(biāo)志位設(shè)置為第七值;所述預(yù)定標(biāo)志位讀取模塊進(jìn)一步用于,當(dāng)所述通信終端再次啟動(dòng)時(shí),在獲知通信終端上的預(yù)定標(biāo)志位為第七值后,通知所述備份更新固件寫(xiě)入模塊實(shí)現(xiàn)所述第五固件的更新。當(dāng)預(yù)定標(biāo)志位設(shè)置模塊在備份固件更新模塊形成OSBL的備份更新固件之后,將標(biāo)志位F0TA_FLAG設(shè)置為第七值(比如4);當(dāng)所述通信終端再次啟動(dòng)時(shí),預(yù)定標(biāo)志位讀取模塊在獲知標(biāo)志位F0TA_FLAG為4后,通知備份更新固件寫(xiě)入模塊實(shí)現(xiàn)OSBL的更新。進(jìn)一步的,該芯片進(jìn)一步包含第六固件,用于當(dāng)通信終端再次啟動(dòng)時(shí),在獲知預(yù)定標(biāo)志位為第七值后,將對(duì)所述第五固件的加載替換為對(duì)所述第五固件的備份更新固件的加載。更安全的模式為,第六固件(DBL或者FSBL)在每一次終端啟動(dòng)的過(guò)程中,會(huì)讀取標(biāo)志位F0TA_FLAG的值,如果上述在OSBL的第二寫(xiě)入位置寫(xiě)入OSBL的備份更新固件的內(nèi)容時(shí)出現(xiàn)故障,標(biāo)志位F0TA_FLAG的值在終端下一次啟動(dòng)中被保留為4即第七值,DBL或者FSBL讀取標(biāo)志位F0TA_FLAG的值為4時(shí),改變芯片上固件的加載順序。仍以O(shè)SBL更新為例,DBL或者FSBL結(jié)合差分包上的標(biāo)識(shí)信息獲知在第二寫(xiě)入位置寫(xiě)入相應(yīng)的備份更新固件的內(nèi)容時(shí)出現(xiàn)故障的固件為0SBL,則將固件加載順序由FSBL-OSBL-APPSBL調(diào)整為FSBL-0SBL’ APPSBL’,OSBL’ 即 OSBL 的備份更新固件。上述在備份固件成功形成以及備份更新固件成功形成時(shí)Fota將標(biāo)志位F0TA_FLAG的值進(jìn)行設(shè)置,來(lái)標(biāo)識(shí)更新過(guò)程目前所處的環(huán)節(jié),以便在終端再次啟動(dòng)時(shí)快速定位到出現(xiàn)故障的環(huán)節(jié),該芯片的結(jié)構(gòu)圖如圖6所示,備份固件更新模塊以及備份更新固件寫(xiě)入模塊,都分別與預(yù)定標(biāo)志位讀取模塊以及預(yù)定標(biāo)志位設(shè)置模塊相連,以便狀態(tài)信息的快速送達(dá)。進(jìn)一步的,該芯片進(jìn)一步包含第七固件;所述預(yù)定標(biāo)志位讀取模塊進(jìn)一步用于,當(dāng)所述預(yù)定標(biāo)志位設(shè)置為第八值時(shí),獲知所述第七固件需要更新;所述第四固件進(jìn)一步包含寫(xiě)入位置確定模塊,用于所述預(yù)定標(biāo)志位讀取模塊獲知所述第七固件需要更新后,確定所述第七固件更新需要的更新數(shù)據(jù)在所述第七固件中的寫(xiě)入位置;以及更新寫(xiě)入模塊,用于所述寫(xiě)入位置確定模塊確定所述第七固件更新需要的更新數(shù)據(jù)在所述第七固件中的寫(xiě)入位置后,將所述第七固件更新需要的更新數(shù)據(jù)寫(xiě)入所述第七固件中的寫(xiě)入位置,實(shí)現(xiàn)所述第七固件的更新;所述預(yù)定標(biāo)志位設(shè)置模塊進(jìn)一步用于,在所述第七固件更新成功后,將所述預(yù)定標(biāo)志位設(shè)置為第五值;所述第七固件包括操作系統(tǒng)內(nèi)核。第七固件包括LINUX,也可包含與第四固件Fota以及LINUX不在同一核的OSBL和APPSBL。在上述芯片的實(shí)施例中,F(xiàn)ota在實(shí)現(xiàn)上述OSBL、APPSBL以及Fota自身的更新的功能之上,同時(shí)可以實(shí)現(xiàn)對(duì)LINUX、ADSP以及AMSS的更新,其包含的模塊與執(zhí)行的功能,與本發(fā)明提供的前述芯片的實(shí)施例中的模塊和功能相仿,在此不再贅述。同理,F(xiàn)ota通過(guò)LINUX來(lái)實(shí)現(xiàn)操作系統(tǒng)ANDROID的更新亦如前述。 本發(fā)明還提供一種通信終端,包含第一固件和第二固件,所述通信終端進(jìn)一步包含更新?tīng)顟B(tài)獲知模塊,用于獲知所述第二固件需要更新;下載模塊,用于下載所述第二固件更新需要的更新數(shù)據(jù);以及標(biāo)志位設(shè)置模塊,用于所述更新?tīng)顟B(tài)獲知模塊獲知所述第二固件需要更新后,將預(yù)定標(biāo)志位設(shè)置為第二值;所述第一固件用于,當(dāng)所述通信終端再次啟動(dòng)時(shí),在獲知所述預(yù)定標(biāo)志位為第二值后,確定所述更新數(shù)據(jù)在所述第二固件中的寫(xiě)入位置,并將所述第二固件更新需要的更新數(shù)據(jù)寫(xiě)入所述寫(xiě)入位置,實(shí)現(xiàn)所述第二固件的更新;并當(dāng)所述第二固件更新成功后,將所述預(yù)定標(biāo)志位設(shè)置為第一值;其中,所述第一固件為固件更新模塊,所述第二固件包括操作系統(tǒng)內(nèi)核。上述第一固件與操作系統(tǒng)內(nèi)核,分別與上述方法實(shí)施例中的第一固件(Fota)與操作系統(tǒng)內(nèi)核(LINUX)相對(duì)應(yīng),都包含在上述提供的芯片中。更新?tīng)顟B(tài)獲知模塊獲知LINUX需要更新時(shí),由下載模塊將LINUX更新需要的更新數(shù)據(jù)下載并保存;標(biāo)志位設(shè)置模塊,在更新?tīng)顟B(tài)獲知模塊獲知LINUX需要更新后,將預(yù)定標(biāo)志位F0TA_FLAG設(shè)置為第二值(比如2);當(dāng)通信終端再次啟動(dòng)時(shí),第一固件Fota在獲知標(biāo)志位F0TA_FLAG為2后,確定LINUX更新所需要的更新數(shù)據(jù)在LINUX中的寫(xiě)入位置,并將LINUX更新需要的更新數(shù)據(jù)寫(xiě)入該寫(xiě)入位置,實(shí)現(xiàn)對(duì)LINUX的更新;LINUX更新成功后,F(xiàn)ota將標(biāo)志位F0TA_FLAG設(shè)置為第一值(比如I)。上述方法中提到的各種優(yōu)化的實(shí)施例,比如使用差分包的形式,對(duì)被更新的固件做差分寫(xiě)入,比如第二固件還包含ADSP和/或AMSS (都與Fota處在不同的核上),F(xiàn)ota可以使用上述同樣的方式來(lái)實(shí)現(xiàn)對(duì)二者的跨核更新,再比如設(shè)置標(biāo)志位F0TA_FLAG的第三值(比如3)來(lái)指示LINUX對(duì)應(yīng)的操作系統(tǒng)ANDROID為需要更新的狀態(tài),如果在任何固件的更新過(guò)程中出現(xiàn)故障,F(xiàn)ota可以通過(guò)對(duì)標(biāo)志位F0TA_FLAG的值的讀取,了解目前更新所處的狀態(tài),從而快速定位到相應(yīng)固件以及相應(yīng)出現(xiàn)故障前的狀態(tài),實(shí)現(xiàn)對(duì)固件的更新,此處不再贅述。本發(fā)明實(shí)施例同時(shí)提供另一種通信終端,包含第四固件和第五固件,所述通信終端進(jìn)一步包含更新?tīng)顟B(tài)獲知模塊,用于獲知第五固件需要更新;下載模塊,用于下載第五固件更新需要的更新數(shù)據(jù);以及標(biāo)志位設(shè)置模塊,用于所述更新?tīng)顟B(tài)獲知模塊獲知所述第五固件需要更新后,將預(yù)定標(biāo)志位設(shè)置為第四值;所述第四固件用于,當(dāng)所述通信終端再次啟動(dòng)時(shí),在獲知所述預(yù)定標(biāo)志位為第四值后,形成所述第五固件的備份固件,確定所述第五固件更新需要的更新數(shù)據(jù)在所述第五固件的備份固件中的第一寫(xiě)入位置,并將所述第五固件更新需要的更新數(shù)據(jù)寫(xiě)入所述第一寫(xiě)入位置,形成所述第五固件的備份更新固件;然后確定所述第五固件中的第二寫(xiě)入位置,將所述備份更新固件中的數(shù)據(jù),寫(xiě)入所述第二寫(xiě)入位置,實(shí)現(xiàn)所述第五固件的更新;當(dāng)所述第五固件更新成功后,將所述預(yù)定標(biāo)志位設(shè)置為第五值;
其中,所述第四固件為固件更新模塊,所述第五固件為所述第四固件,和/或所述通信終端啟動(dòng)過(guò)程中,需要先行加載才能使第四固件加載的固件。上述第四固件與操作系統(tǒng)內(nèi)核,分別與上述方法實(shí)施例中的第四固件(Fota)與第五固件(可包含OSBL、APPSBL以及Fota)相對(duì)應(yīng),都包含在上述提供的芯片中。更新?tīng)顟B(tài)獲知模塊獲知第五固件比如OSBL需要更新時(shí),由下載模塊將OSBL更新需要的更新數(shù)據(jù)下載并保存;標(biāo)志位設(shè)置模塊在更新?tīng)顟B(tài)獲知模塊獲知OSBL需要更新后,將預(yù)定標(biāo)志位F0TA_FLAG設(shè)置為第四值(比如2);當(dāng)通信終端再次啟動(dòng)時(shí),第四固件Fota在獲知標(biāo)志位F0TA_FLAG為2后,形成OSBL的備份固件,然后確定OSBL更新需要的更新數(shù)據(jù)在OSBL的備份固件中的第一寫(xiě)入位置,并將OSBL更新需要的更新數(shù)據(jù)寫(xiě)入所述第一寫(xiě)入位置,形成OSBL的備份更新固件;然后,F(xiàn)ota確定OSBL中的第二寫(xiě)入位置,將OSBL的備份更新固件中的數(shù)據(jù),寫(xiě)入該第二寫(xiě)入位置,實(shí)現(xiàn)OSBL的更新;當(dāng)OSBL更新成功后,F(xiàn)ota將標(biāo)志位F0TA_FLAG設(shè)置為第五值(如初始值1,標(biāo)識(shí)目前沒(méi)有固件需要更新)。上述方法中提到的各種優(yōu)化的實(shí)施例,比如使用差分包的形式,對(duì)被更新的固件做差分寫(xiě)入,比如在得知有固件需要更新時(shí)詢問(wèn)是否立即重啟來(lái)進(jìn)行更新。再比如在獲得需更新固件的備份固件時(shí),設(shè)置標(biāo)志位F0TA_FLAG的值來(lái)標(biāo)識(shí)這一狀態(tài),比如在對(duì)備份固件成功更新形成備份更新固件后,設(shè)置標(biāo)志位F0TA_FLAG的值來(lái)標(biāo)識(shí)這一狀態(tài),再在將備份更新固件成功寫(xiě)入對(duì)應(yīng)的需更新的原始固件時(shí),設(shè)置標(biāo)志位F0TA_FLAG的值回到初始狀態(tài)來(lái)標(biāo)識(shí)更新已經(jīng)成功,通過(guò)在更新過(guò)程中的各環(huán)節(jié)設(shè)置標(biāo)志位F0TA_FLAG的值來(lái)進(jìn)行記錄,使得更新過(guò)程出現(xiàn)故障而終端再次啟動(dòng)時(shí),F(xiàn)ota能通過(guò)讀取標(biāo)志位F0TA_FLAG的值,了解目前更新所處的狀態(tài),從而快速定位到相應(yīng)固件以及相應(yīng)出現(xiàn)故障前的狀態(tài),實(shí)現(xiàn)對(duì)固件的更新,此處亦不再贅述。另需說(shuō)明的是,在單核芯片中(比如三星公司出廠的單核芯片),或是在多核(比如現(xiàn)有的四核芯片)中,采用本發(fā)明所公開(kāi)的Fota,均能實(shí)現(xiàn)現(xiàn)有技術(shù)中所無(wú)法實(shí)現(xiàn)的,直接通過(guò)通信終端自身,來(lái)進(jìn)行除ANDROID之外的固件的更新,此處不再贅述。以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種固件更新的方法,適用于通信終端,其特征在于,所述方法包括 所述通信終端獲知第二固件需要更新; 所述通信終端下載所述第二固件更新需要的更新數(shù)據(jù); 所述通信終端將預(yù)定標(biāo)志位設(shè)置為第二值; 所述通信終端再次啟動(dòng)時(shí),第一固件獲知所述預(yù)定標(biāo)志位為第二值后,確定所述更新數(shù)據(jù)在所述第二固件中的寫(xiě)入位置,并將所述第二固件更新需要的更新數(shù)據(jù)寫(xiě)入所述寫(xiě)入位置,實(shí)現(xiàn)所述第二固件的更新; 所述第二固件更新成功后,所述第一固件將所述預(yù)定標(biāo)志位設(shè)置為第一值; 其中,所述第一固件為固件更新模塊,所述第二固件包括操作系統(tǒng)內(nèi)核。
2.如權(quán)利要求I所述的固件更新的方法,其特征在于,所述通信終端下載所述第二固件更新需要的更新數(shù)據(jù)包括所述通信終端對(duì)所述第二固件更新需要的更新數(shù)據(jù)進(jìn)行驗(yàn)證,并將通過(guò)驗(yàn)證的所述更新數(shù)據(jù)存入預(yù)定位置; 所述將所述第二固件更新需要的更新數(shù)據(jù)寫(xiě)入所述寫(xiě)入位置包括從所述預(yù)定位置獲得所述第二固件更新需要的更新數(shù)據(jù),并將所述第二固件更新需要的更新數(shù)據(jù)寫(xiě)入所述寫(xiě)入位置。
3.如權(quán)利要求I所述的固件更新的方法,其特征在于,所述通信終端下載所述第二固件更新需要的更新數(shù)據(jù)包括所述通信終端下載所述第二固件更新需要的差分包; 所述第一固件將所述第二固件更新需要的更新數(shù)據(jù)寫(xiě)入所述寫(xiě)入位置包括所述第一固件使用預(yù)定算法將所述差分包寫(xiě)入所述寫(xiě)入位置。
4.如權(quán)利要求I所述的固件更新的方法,其特征在于,所述通信終端下載所述第二固件更新需要的更新數(shù)據(jù)包括所述通信終端對(duì)所述第二固件更新需要的更新數(shù)據(jù)進(jìn)行驗(yàn)證,并將通過(guò)驗(yàn)證的所述更新數(shù)據(jù)存入預(yù)定位置; 所述將所述第二固件更新需要的更新數(shù)據(jù)寫(xiě)入所述寫(xiě)入位置包括從所述預(yù)定位置獲得所述第二固件更新需要的更新數(shù)據(jù),并將所述第二固件更新需要的更新數(shù)據(jù)寫(xiě)入所述寫(xiě)入位置。
5.如權(quán)利要求I所述的固件更新的方法,其特征在于,所述通信終端再次啟動(dòng)時(shí),第一固件獲知所述預(yù)定標(biāo)志位為第二值包括 所述通信終端再次啟動(dòng)時(shí),由第三固件獲知預(yù)定標(biāo)志位設(shè)置為第二值后,加載所述第一固件,使所述第一固件獲知所述預(yù)定標(biāo)志位為第二值; 其中,所述第三固件為,在所述通信終端啟動(dòng)過(guò)程中,直接加載所述第一固件的固件。
6.如權(quán)利要求I 5中任一項(xiàng)所述的固件更新的方法,其特征在于,所述通信終端包括處理器,所述處理器包括第一核和第二核,所述第一固件位于所述第二核,所述操作系統(tǒng)內(nèi)核位于所述第二核; 所述第二固件進(jìn)一步包括位于所述第一核的固件。
7.如權(quán)利要求6所述的固件更新的方法,其特征在于,所述第二值,用于指示所述第二固件中任一個(gè)固件的狀態(tài)為需要更新。
8.如權(quán)利要求I所述的固件更新的方法,其特征在于,所述第二固件更新成功后,所述第一固件將所述預(yù)定標(biāo)志位設(shè)置為第一值具體包括 所述第二固件更新成功后,將所述預(yù)定標(biāo)志位設(shè)置為第三值;所述操作系統(tǒng)內(nèi)核判斷操作系統(tǒng)內(nèi)核對(duì)應(yīng)的操作系統(tǒng)是否需要更新; 如果需要更新,所述操作系統(tǒng)內(nèi)核對(duì)所述操作系統(tǒng)進(jìn)行更新,在更新成功后,通知所述第一固件; 所述第一固件將所述預(yù)定標(biāo)志位設(shè)置為第一值。
9.如權(quán)利要求8所述的固件更新的方法,其特征在于,在所述將所述預(yù)定標(biāo)志位設(shè)置為第三值后,在所述第一固件將所述預(yù)定標(biāo)志位設(shè)置為第一值前,所述方法進(jìn)一步包括 如果所述通信終端再次啟動(dòng)時(shí),所述第二固件獲知所述預(yù)定標(biāo)志位為第三值,返回所述對(duì)所述操作系統(tǒng)進(jìn)行更新的步驟。
10.如權(quán)利要求I 5、8或9中任一所述的固件更新的方法,其特征在于,在所述第二固件更新成功之前,所述第一固件確定所述更新數(shù)據(jù)在所述第二固件中的寫(xiě)入位置之后,所述方法進(jìn)一步包括 將所述第二固件更新需要的更新數(shù)據(jù)寫(xiě)入所述寫(xiě)入位置,實(shí)現(xiàn)所述第二固件的更新。
11.一種固件更新的方法,適用于通信終端,其特征在于,所述方法包括 所述通信終端獲知第五固件需要更新; 所述通信終端下載所述第五固件更新需要的更新數(shù)據(jù); 所述通信終端將預(yù)定標(biāo)志位設(shè)置為第四值; 所述通信終端再次啟動(dòng)時(shí),第四固件獲知所述預(yù)定標(biāo)志位為第四值后,形成所述第五固件的備份固件,確定所述第五固件更新需要的更新數(shù)據(jù)在所述第五固件的備份固件中的第一寫(xiě)入位置,并將所述第五固件更新需要的更新數(shù)據(jù)寫(xiě)入所述第一寫(xiě)入位置,形成所述第五固件的備份更新固件; 所述第四固件確定所述第五固件中的第二寫(xiě)入位置,將所述第五固件的備份更新固件中的數(shù)據(jù),寫(xiě)入所述第二寫(xiě)入位置,實(shí)現(xiàn)所述第五固件的更新; 所述第五固件更新成功后,所述第四固件將所述預(yù)定標(biāo)志位設(shè)置為第五值; 其中,所述第四固件為固件更新模塊,所述第五固件為所述第四固件,和/或所述通信終端啟動(dòng)過(guò)程中,需要先行加載才能使第四固件加載的固件。
12.如權(quán)利要求11所述的固件更新的方法,其特征在于,所述通信終端下載所述第五固件更新需要的更新數(shù)據(jù)具體為,所述通信終端對(duì)所述第五固件更新需要的更新數(shù)據(jù)進(jìn)行驗(yàn)證,并將通過(guò)驗(yàn)證的所述第五固件更新需要的更新數(shù)據(jù)存入預(yù)定位置; 將所述第五固件更新需要的更新數(shù)據(jù)寫(xiě)入所述第一寫(xiě)入位置包括從所述預(yù)定位置獲得所述第五固件更新需要的更新數(shù)據(jù),并將所述第五固件更新需要的更新數(shù)據(jù)寫(xiě)入所述第一寫(xiě)入位置。
13.如權(quán)利要求11所述的固件更新的方法,其特征在于,所述第五固件更新需要的更新數(shù)據(jù)為所述第五固件更新需要的差分包; 所述第四固件將所述第五固件更新需要的更新數(shù)據(jù)寫(xiě)入所述第一寫(xiě)入位置包括所述第四固件使用預(yù)定算法將所述第五固件更新需要的差分包寫(xiě)入所述第一寫(xiě)入位置。
14.如權(quán)利要求11所述的固件更新的方法,其特征在于,所述第四固件形成所述第五固件的備份固件之后,所述方法進(jìn)一步包括所述第四固件將所述預(yù)定標(biāo)志位設(shè)置為第六值; 在所述第五固件更新成功之前,所述方法進(jìn)一步包括如果所述通信終端再次啟動(dòng)時(shí),所述第四固件獲知所述預(yù)定標(biāo)志位為第六值,返回所述確定所述第五固件更新需要的更新數(shù)據(jù)在所述第五固件的備份固件中的第一寫(xiě)入位置的步驟。
15.如權(quán)利要求11所述的固件更新的方法,其特征在于,所述第四固件形成所述第五固件的備份更新固件之后,所述方法進(jìn)一步包括所述第四固件將所述預(yù)定標(biāo)志位設(shè)置為第七值; 在所述第五固件更新成功之前,所述方法進(jìn)一步包括 如果所述通信終端再次啟動(dòng)時(shí),所述第四固件獲知所述預(yù)定標(biāo)志位為第七值,則返回所述確定所述第五固件中的第二寫(xiě)入位置的步驟。
16.如權(quán)利要求15所述的固件更新的方法,其特征在于,所述通信終端再次啟動(dòng)時(shí),在所述第四固件獲知所述預(yù)定標(biāo)志位為第七值之前進(jìn)一步包括 第六固件獲知所述預(yù)定標(biāo)志位為第七值后,將對(duì)所述第五固件的加載替換為對(duì)所述第五固件的備份更新固件的加載。
17.如權(quán)利要求11所述的固件更新的方法,其特征在于,所述方法進(jìn)一步包括 所述通信終端獲知第七固件需要更新; 所述通信終端下載所述第七固件更新需要的更新數(shù)據(jù); 所述通信終端將預(yù)定標(biāo)志位設(shè)置為第八值; 所述通信終端再次啟動(dòng)時(shí),第四固件獲知所述預(yù)定標(biāo)志位為第八值后,確定所述第七固件更新需要的更新數(shù)據(jù)在所述第七固件中的寫(xiě)入位置,并將所述第七固件更新需要的更新數(shù)據(jù)寫(xiě)入所述寫(xiě)入位置,實(shí)現(xiàn)所述第七固件的更新; 所述第七固件更新成功后,所述第四固件將所述預(yù)定標(biāo)志位設(shè)置為第五值; 其中,所述第七固件包括操作系統(tǒng)內(nèi)核。
18.如權(quán)利要求17所述的固件更新的方法,其特征在于,所述通信終端包括處理器,所述處理器包括第三核和第四核,所述第四固件位于所述第四核,所述操作系統(tǒng)內(nèi)核位于所述第四核,所述第七固件進(jìn)一步包括位于所述第三核的固件。
19.如權(quán)利要求17所述的固件更新的方法,其特征在于,所述第七固件更新成功后,所述第四固件將所述預(yù)定標(biāo)志位設(shè)置為第五值具體包括 所述第七固件更新成功后,將所述預(yù)定標(biāo)志位設(shè)置為第九值; 所述操作系統(tǒng)內(nèi)核判斷操作系統(tǒng)內(nèi)核對(duì)應(yīng)的操作系統(tǒng)是否需要更新; 如果需要更新,所述操作系統(tǒng)內(nèi)核對(duì)所述操作系統(tǒng)進(jìn)行更新,在更新成功后,通知所述第四固件; 所述第四固件將所述預(yù)定標(biāo)志位設(shè)置為第五值。
20.如權(quán)利要求19所述的固件更新的方法,其特征在于,在所述將所述預(yù)定標(biāo)志位設(shè)置為第九值后,在所述第四固件將所述預(yù)定標(biāo)志位設(shè)置為第五值之前,所述方法進(jìn)一步包括如果所述通信終端再次啟動(dòng)時(shí),所述操作系統(tǒng)內(nèi)核獲知所述預(yù)定標(biāo)志位為第九值,返回所述對(duì)所述操作系統(tǒng)進(jìn)行更新的步驟。
21.如權(quán)利要求17 20中任一項(xiàng)所述的固件更新的方法,其特征在于,在所述第七固件更新成功之前,所述第四固件確定所述第七固件更新需要的更新數(shù)據(jù)在所述第七固件中的寫(xiě)入位置之后,所述方法進(jìn)一步包括將所述第七固件更新需要的更新數(shù)據(jù)寫(xiě)入所述寫(xiě)入位置,實(shí)現(xiàn)所述第七固件的更新。
22.一種芯片,應(yīng)用于通信終端中,其特征在于,所述芯片包含第一固件和第二固件,所述第一固件包含 預(yù)定標(biāo)志位讀取模塊,用于獲知通信終端上的預(yù)定標(biāo)志位為第二值后,獲知第二固件需要更新; 寫(xiě)入位置確定模塊,用于所述預(yù)定標(biāo)志位讀取模塊獲知所述第二固件需要更新后,確定所述第二固件更新需要的更新數(shù)據(jù)在所述第二固件中的寫(xiě)入位置; 更新寫(xiě)入模塊,用于所述寫(xiě)入位置確定模塊確定所述第二固件更新需要的更新數(shù)據(jù)在所述第二固件中的寫(xiě)入位置后,將所述第二固件更新需要的更新數(shù)據(jù)寫(xiě)入所述第二固件中的寫(xiě)入位置; 預(yù)定標(biāo)志位設(shè)置模塊,用于在所述第二固件更新成功后,將所述預(yù)定標(biāo)志位設(shè)置為第一值; 其中,所述第一固件為固件更新模塊,所述第二固件包括操作系統(tǒng)內(nèi)核。
23.根據(jù)權(quán)利要求22所述的芯片,其特征在于,所述芯片包括第一核與第二核,所述第一固件以及所述操作系統(tǒng)內(nèi)核位于所述第二核; 所述第二固件進(jìn)一步包括位于所述第一核的固件。
24.根據(jù)權(quán)利要求22或23所述的芯片,其特征在于,所述預(yù)定標(biāo)志位設(shè)置模塊進(jìn)一步用于,所述第二固件更新成功后,將所述預(yù)定標(biāo)志位設(shè)置為第三值,并通知所述操作系統(tǒng)內(nèi)核;并在接到所述操作系統(tǒng)內(nèi)核的更新成功通知后,將所述預(yù)定標(biāo)志位設(shè)置為第一值; 所述操作系統(tǒng)內(nèi)核進(jìn)一步用于,判斷自身對(duì)應(yīng)的操作系統(tǒng)是否需要更新,如果需要更新,則對(duì)所述操作系統(tǒng)進(jìn)行更新,并在更新成功后向所述第一固件發(fā)送所述更新成功通知。
25.一種芯片,應(yīng)用于通信終端中,其特征在于,所述芯片包含第四固件和第五固件,所述第四固件包含 預(yù)定標(biāo)志位讀取模塊,用于獲知通信終端上的預(yù)定標(biāo)志位為第四值后,獲知第五固件需要更新; 固件備份模塊,用于獲知所述預(yù)定標(biāo)志位為第四值后,形成所述第五固件的備份固件; 第一寫(xiě)入位置確定模塊,用于形成所述第五固件的備份固件后,確定所述第五固件更新需要的更新數(shù)據(jù)在所述第五固件的備份固件中的第一寫(xiě)入位置; 備份固件更新模塊,用于將所述第五固件更新需要的更新數(shù)據(jù)寫(xiě)入所述第一寫(xiě)入位置,形成所述第五固件的備份更新固件; 第二寫(xiě)入位置確定模塊,用于備份固件更新模塊形成所述第五固件的備份更新固件之后,確定所述第五固件中的第二寫(xiě)入位置; 備份更新固件寫(xiě)入模塊,用于所述第二寫(xiě)入位置確定后,將所述第五固件的備份更新固件中的數(shù)據(jù),寫(xiě)入所述第二寫(xiě)入位置,實(shí)現(xiàn)所述第五固件的更新; 預(yù)定標(biāo)志位設(shè)置模塊,用于在所述第五固件更新成功后,將所述預(yù)定標(biāo)志位設(shè)置為第五值; 其中,所述第四固件為固件更新模塊,所述第五固件為所述第四固件,和/或所述通信終端啟動(dòng)過(guò)程中,需要先行加載才能使第四固件加載的固件。
26.根據(jù)權(quán)利要求25所述的芯片,其特征在于,所述預(yù)定標(biāo)志位設(shè)置模塊進(jìn)一步用于,在所述固件備份模塊形成所述第五固件的備份固件之后,將所述預(yù)定標(biāo)志位設(shè)置為第六值; 所述預(yù)定標(biāo)志位讀取模塊進(jìn)一步用于,當(dāng)所述通信終端再次啟動(dòng)時(shí),在獲知通信終端上的預(yù)定標(biāo)志位為第六值后,通知所述備份固件更新模塊形成所述第五固件的備份更新固件。
27.根據(jù)權(quán)利要求25所述的芯片,其特征在于,所述預(yù)定標(biāo)志位設(shè)置模塊進(jìn)一步用于,在所述備份固件更新模塊形成所述第五固件的備份更新固件之后,將所述預(yù)定標(biāo)志位設(shè)置為第七值; 所述預(yù)定標(biāo)志位讀取模塊進(jìn)一步用于,當(dāng)所述通信終端再次啟動(dòng)時(shí),在獲知通信終端上的預(yù)定標(biāo)志位為第七值后,通知所述備份更新固件寫(xiě)入模塊實(shí)現(xiàn)所述第五固件的更新。
28.根據(jù)權(quán)利要求27所述的芯片,其特征在于,所述芯片進(jìn)一步包含第六固件,用于當(dāng)所述通信終端再次啟動(dòng)時(shí),在獲知所述預(yù)定標(biāo)志位為第七值后,將對(duì)所述第五固件的加載替換為對(duì)所述第五固件的備份更新固件的加載。
29.根據(jù)權(quán)利要求25所述的芯片,其特征在于,所述芯片進(jìn)一步包含第七固件;所述預(yù)定標(biāo)志位讀取模塊進(jìn)一步用于,當(dāng)所述預(yù)定標(biāo)志位設(shè)置為第八值時(shí),獲知所述第七固件需要更新; 所述第四固件進(jìn)一步包含 寫(xiě)入位置確定模塊,用于所述預(yù)定標(biāo)志位讀取模塊獲知所述第七固件需要更新后,確定所述第七固件更新需要的更新數(shù)據(jù)在所述第七固件中的寫(xiě)入位置;以及 更新寫(xiě)入模塊,用于所述寫(xiě)入位置確定模塊確定所述第七固件更新需要的更新數(shù)據(jù)在所述第七固件中的寫(xiě)入位置后,將所述第七固件更新需要的更新數(shù)據(jù)寫(xiě)入所述第七固件中的寫(xiě)入位置,實(shí)現(xiàn)所述第七固件的更新; 所述預(yù)定標(biāo)志位設(shè)置模塊進(jìn)一步用于,在所述第七固件更新成功后,將所述預(yù)定標(biāo)志位設(shè)置為第五值; 所述第七固件包括操作系統(tǒng)內(nèi)核。
30.一種通信終端,其特征在于,包含第一固件和第二固件,所述通信終端進(jìn)一步包含 更新?tīng)顟B(tài)獲知模塊,用于獲知所述第二固件需要更新; 下載模塊,用于下載所述第二固件更新需要的更新數(shù)據(jù);以及標(biāo)志位設(shè)置模塊,用于所述更新?tīng)顟B(tài)獲知模塊獲知所述第二固件需要更新后,將預(yù)定標(biāo)志位設(shè)置為第二值; 所述第一固件用于,當(dāng)所述通信終端再次啟動(dòng)時(shí),在獲知所述預(yù)定標(biāo)志位為第二值后,確定所述更新數(shù)據(jù)在所述第二固件中的寫(xiě)入位置,并將所述第二固件更新需要的更新數(shù)據(jù)寫(xiě)入所述寫(xiě)入位置,實(shí)現(xiàn)所述第二固件的更新;并當(dāng)所述第二固件更新成功后,將所述預(yù)定標(biāo)志位設(shè)置為第一值; 其中,所述第一固件為固件更新模塊,所述第二固件包括操作系統(tǒng)內(nèi)核。
31.一種通信終端,其特征在于,包含第四固件和第五固件,所述通信終端進(jìn)一步包含更新?tīng)顟B(tài)獲知模塊,用于獲知所述第五固件需要更新; 下載模塊,用于下載所述第五固件更新需要的更新數(shù)據(jù);以及標(biāo)志位設(shè)置模塊,用于所述更新?tīng)顟B(tài)獲知模塊獲知所述第五固件需要更新后,將預(yù)定標(biāo)志位設(shè)置為第四值; 所述第四固件用于,當(dāng)所述通信終端再次啟動(dòng)時(shí),在獲知所述預(yù)定標(biāo)志位為第四值后,形成所述第五固件的備份固件,確定所述第五固件更新需要的更新數(shù)據(jù)在所述第五固件的備份固件中的第一寫(xiě)入位置,并將所述第五固件更新需要的更新數(shù)據(jù)寫(xiě)入所述第一寫(xiě)入位置,形成所述第五固件的備份更新固件;然后確定所述第五固件中的第二寫(xiě)入位置,將所述備份更新固件中的數(shù)據(jù),寫(xiě)入所述第二寫(xiě)入位置,實(shí)現(xiàn)所述第五固件的更新;當(dāng)所述第五固件更新成功后,將所述預(yù)定標(biāo)志位設(shè)置為第五值; 其中,所述第四固件為固件更新模塊,所述第五固件為所述第四固件,和/或所述通信終端啟動(dòng)過(guò)程中,需要先行加載才能使第四固件加載的固件。
全文摘要
本發(fā)明的實(shí)施例提供固件更新的方法、芯片以及通信終端,其中,固件更新的方法包括通信終端獲知第二固件需要更新;通信終端下載第二固件更新需要的更新數(shù)據(jù);通信終端將預(yù)定標(biāo)志位設(shè)置為第二值;通信終端再次啟動(dòng)時(shí),第一固件獲知預(yù)定標(biāo)志位為第二值后,確定更新數(shù)據(jù)在第二固件中的寫(xiě)入位置,并將第二固件更新需要的更新數(shù)據(jù)寫(xiě)入該寫(xiě)入位置,實(shí)現(xiàn)第二固件的更新;第二固件更新成功后,第一固件將預(yù)定標(biāo)志位設(shè)置為第一值;其中,第一固件為固件更新模塊,第二固件包括操作系統(tǒng)內(nèi)核。通過(guò)本發(fā)明實(shí)施例提供的固件更新的方法、芯片以及通信終端,可實(shí)現(xiàn)直接由終端完成固件的更新。
文檔編號(hào)G06F9/445GK102830984SQ201110159548
公開(kāi)日2012年12月19日 申請(qǐng)日期2011年6月14日 優(yōu)先權(quán)日2011年6月14日
發(fā)明者宋祎斐, 席振新, 彭紹平 申請(qǐng)人:聯(lián)想(北京)有限公司