本發(fā)明涉及通信技術(shù)領(lǐng)域,特別涉及一種機(jī)頂盒升級方法。本發(fā)明同時(shí)還涉及一種機(jī)頂盒。
背景技術(shù):
數(shù)字視頻變換盒通常稱作機(jī)頂盒或機(jī)上盒,是一個(gè)連接電視機(jī)與外部信號源的設(shè)備。它可以將壓縮的數(shù)字信號轉(zhuǎn)成電視內(nèi)容,并在電視機(jī)上顯示出來。信號可以來自有線電纜、衛(wèi)星天線、寬帶網(wǎng)絡(luò)以及地面廣播。機(jī)頂盒接收的內(nèi)容除了模擬電視可以提供的圖像、聲音之外,更在于能夠接收數(shù)字內(nèi)容,包括電子節(jié)目指南、因特網(wǎng)網(wǎng)頁、字幕等等。使用戶能在現(xiàn)有電視機(jī)上觀看數(shù)字電視節(jié)目,并可通過網(wǎng)絡(luò)進(jìn)行交互式數(shù)字化娛樂、教育和商業(yè)化活動(dòng)。
安卓是一種基于linux的自由及開放源代碼的操作系統(tǒng),由于其具有豐富的擴(kuò)展性以及貼近用戶的易用性,越來越多的機(jī)頂盒選擇搭載安卓系統(tǒng),并據(jù)此向用戶提供多樣性的便捷服務(wù)。為了保證機(jī)頂盒中能夠與當(dāng)前最新版本的安卓系統(tǒng)保持一致,機(jī)頂盒中的安卓系統(tǒng)都會(huì)設(shè)置有相應(yīng)的升級功能。
目前,搭載安卓系統(tǒng)的機(jī)頂盒的在需要升級時(shí),均是在通過boot啟動(dòng)后根據(jù)存儲(chǔ)的標(biāo)識或特定按鍵來引導(dǎo)和啟動(dòng)存儲(chǔ)在緩存flash中的recovery程序,再由recovery讀取存儲(chǔ)在u盤或者其他分區(qū)(通常為cache分區(qū))的升級包完成升級功能。然而,發(fā)明人在實(shí)現(xiàn)本發(fā)明的過程中發(fā)現(xiàn),當(dāng)recovery程序由于客觀因素出現(xiàn)損壞(例如壞塊所導(dǎo)致的損壞或升級recovery過程中出現(xiàn)掉電而導(dǎo)致的損壞)或是recovery程序本身存在功能缺陷(如新驅(qū)動(dòng)設(shè)備不支持原有的recovery程序)時(shí),即無法通過該方式完成機(jī)頂盒的升級操作,技術(shù)人員此時(shí)需要通過其他方式(例如刷機(jī))來完成針對機(jī)頂盒的升級,從而給技術(shù)人員帶來了不必要的操作上的麻煩。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供一種機(jī)頂盒升級方法以及機(jī)頂盒,通過將升級鏡像預(yù)置在升級包中,然后利用該升級鏡像引導(dǎo)升級包對機(jī)頂盒進(jìn)行升級,用以解決現(xiàn)有技術(shù)中的因自身的recovery程序故障以及無法根據(jù)用戶的指令進(jìn)行操作而導(dǎo)致升級失敗的問題,提高了機(jī)頂盒升級成功的概率,進(jìn)而提高用戶的使用體驗(yàn)。
為了達(dá)到上述技術(shù)目的,本發(fā)明實(shí)施例提出了一種機(jī)頂盒升級方法,該方法包括:
機(jī)頂盒對已存儲(chǔ)的第一恢復(fù)鏡像進(jìn)行校驗(yàn);
當(dāng)所述第一恢復(fù)鏡像的校驗(yàn)值與預(yù)設(shè)值不同時(shí),解壓升級包并獲取所述升級包中包含的第二恢復(fù)鏡像;
引導(dǎo)所述第二恢復(fù)鏡像啟動(dòng)所述機(jī)頂盒,以使所述第二恢復(fù)鏡像通過所述升級包對所述機(jī)頂盒進(jìn)行升級。
相應(yīng)的,本發(fā)明實(shí)施例還提出了一種機(jī)頂盒,包括:
校驗(yàn)?zāi)K,用于機(jī)頂盒對已存儲(chǔ)的第一恢復(fù)鏡像進(jìn)行校驗(yàn);
處理模塊,用于當(dāng)所述第一恢復(fù)鏡像的校驗(yàn)值與預(yù)設(shè)值不同時(shí),解壓升級包并獲取所述升級包中包含的第二恢復(fù)鏡像;
升級模塊,用于引導(dǎo)所述第二恢復(fù)鏡像啟動(dòng)所述機(jī)頂盒,以使所述第二恢復(fù)鏡像通過所述升級包對所述機(jī)頂盒進(jìn)行升級。
綜上所述,與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例所提出的技術(shù)方案的有益技術(shù)效果包括:
本發(fā)明公開了一種機(jī)頂盒升級方法以及機(jī)頂盒,機(jī)頂盒對已存儲(chǔ)的第一恢復(fù)鏡像進(jìn)行校驗(yàn),當(dāng)?shù)谝换謴?fù)鏡像的校驗(yàn)值與預(yù)設(shè)值不同時(shí),解壓升級包并獲取升級包中包含的第二恢復(fù)鏡像,引導(dǎo)第二恢復(fù)鏡像啟動(dòng)機(jī)頂盒,以使第二恢復(fù)鏡像通過升級包對機(jī)頂盒進(jìn)行升級。本發(fā)明在機(jī)頂盒自身的recovery程序出現(xiàn)故障以及無法根據(jù)用戶的指令直接進(jìn)行升級或更新時(shí),可以根據(jù)升級包中預(yù)置的恢復(fù)鏡像來引導(dǎo)升級包對機(jī)頂盒進(jìn)行更新或升級,提高了機(jī)頂盒升級成功的概率,有效的避免了因自身的recovery程序故障以及無法根據(jù)用戶的指令進(jìn)行操作而導(dǎo)致升級失敗的問題。
本發(fā)明的其它特征和優(yōu)點(diǎn)將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實(shí)施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點(diǎn)可通過在所寫的說明書、權(quán)利要求書、以及附圖中所特別指出的結(jié)構(gòu)來實(shí)現(xiàn)和獲得。
下面通過附圖和實(shí)施例,對本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)描述。
附圖說明
為了更清楚地說明本發(fā)明的技術(shù)方案,下面將對實(shí)施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例所提出的一種機(jī)頂盒升級方法的流程示意圖;
圖2為本發(fā)明具體實(shí)施例所提出的一種機(jī)頂盒升級方法的流程示意圖;
圖3為本發(fā)明實(shí)施例所提出的一種機(jī)頂盒的結(jié)構(gòu)示意圖。
具體實(shí)施方式
如背景技術(shù)所述,由于現(xiàn)有的機(jī)頂盒在需要升級時(shí),均是在通過boot啟動(dòng)后根據(jù)存儲(chǔ)的標(biāo)識或特定按鍵來引導(dǎo)和啟動(dòng)存儲(chǔ)在flash中的recovery程序,再由recovery讀取存儲(chǔ)在u盤或者其他分區(qū)(通常為cache分區(qū))的升級包完成升級功能。這樣一來,當(dāng)recovery程序由于客觀因素出現(xiàn)損壞或是recovery程序本身存在功能缺陷時(shí),也即無法通過該方式完成機(jī)頂盒的升級操作,技術(shù)人員此時(shí)便需要通過其他方式(例如刷機(jī))來完成針對機(jī)頂盒的升級,從而給技術(shù)人員帶來了不必要的操作上的麻煩,降低了用戶體驗(yàn)。
有鑒于以上現(xiàn)有技術(shù)中的問題,本申請?zhí)岢隽艘环N機(jī)頂盒升級方法。該方法通過將升級鏡像預(yù)置在升級包中,然后利用該鏡像引導(dǎo)升級包對機(jī)頂盒進(jìn)行升級,用以解決現(xiàn)有技術(shù)中的recovery程序出現(xiàn)故障而導(dǎo)致升級失敗,從而降低了用戶體驗(yàn)的問題。
如圖1所示,為本發(fā)明實(shí)施例所提出的一種機(jī)頂盒升級方法的流程示意圖,包括以下步驟:
步驟s101、機(jī)頂盒對已存儲(chǔ)的第一恢復(fù)鏡像進(jìn)行校驗(yàn)。
如背景技術(shù)所述,現(xiàn)有技術(shù)中使用的機(jī)頂盒,在更新或升級時(shí),均是利用boot啟動(dòng)后再根據(jù)存儲(chǔ)的標(biāo)識或特定按鍵來引導(dǎo)和啟動(dòng)存儲(chǔ)的recovery程序,最后再由recovery讀取升級包中的數(shù)據(jù)來完成升級的。由于recovery程序是存儲(chǔ)在緩存flash中的,當(dāng)緩存flash不可用亦或是recovery程序本身故障時(shí),就會(huì)造成升級失敗的問題,因此,本發(fā)明的核心技術(shù)思想是將recovery程序預(yù)置在升級包中,當(dāng)需要進(jìn)行升級時(shí),便可以直接從升級包中調(diào)用,可以有效的避免因緩存flash不可用或recovery程序本身故障導(dǎo)致升級失敗的情況出現(xiàn),具體的實(shí)現(xiàn)過程將在后續(xù)的論述中詳盡闡述。
在本發(fā)明的優(yōu)選實(shí)施方式中,在當(dāng)檢測到機(jī)頂盒已存儲(chǔ)的第一恢復(fù)鏡像發(fā)生損壞或接收到用戶的跳過指示時(shí),在機(jī)頂盒的內(nèi)存中掛載并讀取升級包,具體為:判斷時(shí)間閾值內(nèi)是否接收到與指定操作匹配的用戶操作;若判斷結(jié)果為否,對第一恢復(fù)鏡像進(jìn)行校驗(yàn),并在校驗(yàn)結(jié)果為不同時(shí)確認(rèn)第一恢復(fù)鏡像發(fā)生損壞,以在機(jī)頂盒的內(nèi)存中掛載并讀取升級包;若判斷結(jié)果為是,根據(jù)用戶操作生成跳過指示,以在機(jī)頂盒的內(nèi)存中掛載并讀取升級包。這樣一來,本發(fā)明首先判斷是否存在用戶的指定操作指令,當(dāng)存在制定操作指令時(shí),以使程序跳過對第一恢復(fù)鏡像的驗(yàn)證,而直接執(zhí)行對升級包中預(yù)置的第二恢復(fù)鏡像進(jìn)行讀取操作;然后在判斷第一恢復(fù)鏡像是否存在故障,來確定是否執(zhí)行對升級包中預(yù)置的第二恢復(fù)鏡像進(jìn)行讀取操作。可見,本發(fā)明通過兩次有效的判斷來確定是否對升級包中預(yù)置的第二恢復(fù)鏡像進(jìn)行解壓和讀取操作,使得對第一恢復(fù)鏡像的故障判斷更加可靠。
需要注意的是,在具體的實(shí)施方式中,本申請?jiān)跈z測第一恢復(fù)鏡像是否發(fā)生損壞時(shí),是通過將第一恢復(fù)鏡像讀取至內(nèi)存,然后對第一恢復(fù)鏡像進(jìn)行校驗(yàn)并得到校驗(yàn)值,當(dāng)該校驗(yàn)值與預(yù)設(shè)值不同時(shí)(這里的不同表示的是該第一恢復(fù)鏡像讀取錯(cuò)誤、出錯(cuò)、失敗或無法使用的意思;當(dāng)校驗(yàn)值與預(yù)設(shè)值相同時(shí),這里的相同表示的是該第一恢復(fù)鏡像讀取正確、準(zhǔn)確,可以進(jìn)行后續(xù)的升級操作),對預(yù)設(shè)的升級包進(jìn)行解壓,并從解壓得到的文件中找到目標(biāo)文件(當(dāng)然,文件名是可自定義的,目標(biāo)文件就是申請中的第二恢復(fù)鏡像),然后將目標(biāo)文件讀取至內(nèi)存;進(jìn)一步的重復(fù)上述檢測過程,即對目標(biāo)文件進(jìn)行校驗(yàn),當(dāng)校驗(yàn)值與預(yù)設(shè)值相同時(shí),采用第二恢復(fù)鏡像進(jìn)行升級。
還需要說明的是,本發(fā)明采用的先判斷是否存在用戶的指定操作指令,僅是本發(fā)明的一個(gè)優(yōu)選實(shí)施方案,在一些具體使用場景中,也可以是先針對第一恢復(fù)鏡像進(jìn)行驗(yàn)證,這些變化都在本發(fā)明的保護(hù)范圍之內(nèi)。
在這里,本領(lǐng)域的技術(shù)人員所熟知的是,機(jī)頂盒的緩存flash中有多個(gè)存儲(chǔ)位置,例如:boot/bootargs/cfg/recovery/kernel/system/data/cache等分區(qū)來存儲(chǔ)不同的模塊。其中,分區(qū)boot是機(jī)頂盒啟動(dòng)的第一個(gè)運(yùn)行程序,用來加載基本設(shè)備驅(qū)動(dòng),然后讀取bootargs分區(qū)的內(nèi)容,并根據(jù)cfg分區(qū)內(nèi)的標(biāo)記信息,來完成啟動(dòng)內(nèi)核或者啟動(dòng)recovery程序的操作。因此,在本發(fā)明的優(yōu)選實(shí)施方式中,在判斷出需要對升級包中預(yù)置的第二恢復(fù)鏡像進(jìn)行讀取操作后,需要在機(jī)頂盒的內(nèi)存中掛載并讀取升級包,具體為:在機(jī)頂盒的指定分區(qū)內(nèi)獲取升級包的標(biāo)記信息;根據(jù)標(biāo)記信息確定升級包的存儲(chǔ)位置,并在機(jī)頂盒的內(nèi)存中設(shè)置第一空間以及第二空間;將升級包從存儲(chǔ)位置掛載至第一空間;在第一空間對升級包進(jìn)行讀取。這里,主要是獲取升級包的具體位置信息,并將升級包掛載到機(jī)頂盒的內(nèi)存中,后續(xù)的操作便都是在機(jī)頂盒的內(nèi)存中進(jìn)行的,可以保證操作不會(huì)被背景技術(shù)中所提到的客觀因素干擾。
步驟s102、當(dāng)所述第一恢復(fù)鏡像的校驗(yàn)值與預(yù)設(shè)值不同時(shí),解壓升級包并獲取所述升級包中包含的第二恢復(fù)鏡像。
通過步驟s101,針對已存儲(chǔ)的第一恢復(fù)鏡像進(jìn)行校驗(yàn),會(huì)得到關(guān)于第一恢復(fù)鏡像的校驗(yàn)值,然后將該校驗(yàn)值與系統(tǒng)預(yù)設(shè)的預(yù)設(shè)值進(jìn)行對比,當(dāng)對比結(jié)果不同時(shí),確定需要對預(yù)置升級包中的第二恢復(fù)鏡像進(jìn)行解壓和讀取操作,并進(jìn)一步的將包含第二恢復(fù)鏡像的升級包掛載到機(jī)頂盒的內(nèi)存中,本步驟則主要是對掛載之后的升級包進(jìn)行解壓和讀取操作。由上可知,本發(fā)明在機(jī)頂盒的內(nèi)存中設(shè)置了第一空間和第二空間,分別用于存儲(chǔ)升級包和從升級包中讀取的升級程序,具體的解壓和讀取方式將在后續(xù)的說明中詳盡闡述。
具體的,從升級包中提取第二恢復(fù)鏡像的方式為:將第一空間中的數(shù)據(jù)進(jìn)行解壓;判斷是否能根據(jù)指定路徑在解壓后的文件目錄中加載第二恢復(fù)鏡像;若加載成功,將第二恢復(fù)鏡像讀取到第二空間,并在第二恢復(fù)鏡像的完整性校驗(yàn)通過之后將第二空間內(nèi)的數(shù)據(jù)傳入指定的引導(dǎo)接口,以引導(dǎo)第二恢復(fù)鏡像啟動(dòng);若加載失敗,終止升級機(jī)頂盒。
需要說明的是,本發(fā)明在機(jī)頂盒的內(nèi)存中設(shè)置了兩個(gè)分別用于存儲(chǔ)的空間,主要是考慮到讀取到的第二恢復(fù)鏡像的重要性,所以要將其單獨(dú)進(jìn)行存儲(chǔ),當(dāng)然,在另一些實(shí)施場景中,也可以不設(shè)置單獨(dú)的存儲(chǔ)空間,而將讀取到的第二恢復(fù)鏡像與升級包存儲(chǔ)在同一個(gè)空間內(nèi)。
步驟s103、引導(dǎo)所述第二恢復(fù)鏡像啟動(dòng)所述機(jī)頂盒,以使所述第二恢復(fù)鏡像通過所述升級包對所述機(jī)頂盒進(jìn)行升級。
該步驟中,主要是利用讀取到的第二恢復(fù)鏡像來引導(dǎo)升級包對機(jī)頂盒進(jìn)行更新和升級,從而解決因recovery程序出現(xiàn)故障而導(dǎo)致升級失敗的問題,進(jìn)而提高了用戶體驗(yàn)。
具體的,根據(jù)步驟s102中,在第二恢復(fù)鏡像的完整性校驗(yàn)通過之后將第二空間內(nèi)的數(shù)據(jù)傳入指定的引導(dǎo)接口,具體為:根據(jù)第二恢復(fù)鏡像中完整性校驗(yàn)值的位置確定起始位置;根據(jù)起始位置以及第二恢復(fù)鏡像的鏡像長度在第二空間內(nèi)獲取對比數(shù)據(jù);對對比數(shù)據(jù)進(jìn)行完整性校驗(yàn);若對比數(shù)據(jù)的完整性校驗(yàn)值與第二恢復(fù)鏡像中完整性校驗(yàn)值一致,確認(rèn)第二恢復(fù)鏡像的完整性校驗(yàn)通過,并將第二空間內(nèi)的數(shù)據(jù)傳入引導(dǎo)接口;若對比數(shù)據(jù)的完整性校驗(yàn)值與第二恢復(fù)鏡像中完整性校驗(yàn)值不一致,終止升級機(jī)頂盒。這里,主要是對讀取的第二恢復(fù)鏡像進(jìn)行校驗(yàn),判斷其完整性以及正確性,只有完整且正確的第二恢復(fù)鏡像才能夠?qū)C(jī)頂盒進(jìn)行升級,從而保證機(jī)頂盒在更新或升級的過程中不會(huì)因第二恢復(fù)鏡像的問題而導(dǎo)致失敗。
由此可見,與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例所提出的技術(shù)方案的有益技術(shù)效果包括:
本發(fā)明公開了一種機(jī)頂盒升級方法以及機(jī)頂盒,機(jī)頂盒對已存儲(chǔ)的第一恢復(fù)鏡像進(jìn)行校驗(yàn),當(dāng)?shù)谝换謴?fù)鏡像的校驗(yàn)值與預(yù)設(shè)值不同時(shí),解壓升級包并獲取升級包中包含的第二恢復(fù)鏡像,引導(dǎo)第二恢復(fù)鏡像啟動(dòng)機(jī)頂盒,以使第二恢復(fù)鏡像通過升級包對機(jī)頂盒進(jìn)行升級。本發(fā)明在機(jī)頂盒自身的recovery程序出現(xiàn)故障以及無法根據(jù)用戶的指令直接進(jìn)行升級或更新時(shí),可以根據(jù)升級包中預(yù)置的恢復(fù)鏡像來引導(dǎo)升級包對機(jī)頂盒進(jìn)行更新或升級,提高了機(jī)頂盒升級成功的概率,有效的避免了因自身的recovery程序故障以及無法根據(jù)用戶的指令進(jìn)行操作而導(dǎo)致升級失敗的問題。
為了進(jìn)一步闡述本發(fā)明的技術(shù)思想,下面將結(jié)合本發(fā)明中的附圖,對本發(fā)明中的技術(shù)方案進(jìn)行清楚、完整的描述,顯然,所描述的實(shí)施例是本發(fā)明的一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)的前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
如上所述,現(xiàn)有技術(shù)中對機(jī)頂盒的升級或更新方法均是利用緩存flsh中的recovery程序來實(shí)現(xiàn)的,具體為:boot啟動(dòng)時(shí),根據(jù)存儲(chǔ)的標(biāo)識或特定按鍵,來引導(dǎo)和啟動(dòng)存儲(chǔ)在flash中的recovery程序,再由recovery讀取存儲(chǔ)在u盤或者其他分區(qū)(通常為cache分區(qū))的升級包完成升級功能。但是在某些情況下,可能出現(xiàn)recovey損壞(比如壞塊導(dǎo)致?lián)p壞或升級ecovery過程中出現(xiàn)掉電損壞時(shí)),或recvoery本身存在功能缺陷(如新驅(qū)動(dòng)設(shè)備的支持),這樣就無法再完成升級功能。
因此,本發(fā)明針對該技術(shù)問題,通過將升級鏡像預(yù)置在升級包中,然后利用該鏡像引導(dǎo)升級包對機(jī)頂盒進(jìn)行升級,用以解決recovery程序出現(xiàn)故障而導(dǎo)致升級失敗的問題,從而提高了用戶體驗(yàn)。
在介紹本發(fā)明的技術(shù)方案之前,還需要先介紹一下現(xiàn)有技術(shù)中利用recovery程序?qū)C(jī)頂盒進(jìn)行升級或更新的步驟,通常情況下,機(jī)頂盒的flash中存儲(chǔ)boot/bootargs/cfg/recovery/kernel/system/data/cache等分區(qū)來存儲(chǔ)不同的模塊。其中boot是機(jī)頂盒啟動(dòng)的第一個(gè)運(yùn)行程序,用來加載基本設(shè)備驅(qū)動(dòng),讀取bootargs(啟動(dòng)系統(tǒng)的環(huán)境變量信息)內(nèi)容,并根據(jù)cfg分區(qū)(通常存儲(chǔ)升級文件路徑,升級標(biāo)識等。原生android里面命名為misc分區(qū)。我們自己的系統(tǒng)中,擴(kuò)展了很多內(nèi)容,格式也有所不同)內(nèi)的標(biāo)記信息,來完成啟動(dòng)內(nèi)核,或者啟動(dòng)recovery。
當(dāng)cfg分區(qū)內(nèi)有標(biāo)記為啟動(dòng)recovery時(shí),則boot會(huì)先讀取bootargs分區(qū)內(nèi)的數(shù)據(jù),并根據(jù)bootargs內(nèi)存儲(chǔ)的信息(例如recovery存儲(chǔ)在flash中的位置,大小。)來把flash中的recovery鏡像讀取到內(nèi)存,并引導(dǎo)recovery啟動(dòng)。
recovery啟動(dòng)后,會(huì)讀取cfg分區(qū)內(nèi)標(biāo)記,找到升級包所在位置,完成升級功能。
如圖2所示,為本發(fā)明具體實(shí)施例所提出的一種機(jī)頂盒升級方法的流程示意圖,本發(fā)明的方案提出了一種從升級包中取出recovery鏡像的方法,并利用一系列有效措施,使boot能直接引導(dǎo)并啟動(dòng)升級包中的recovery來完成升級的方法,具體如下:
(1)boot讀取cfg分區(qū)內(nèi)的信息,查找升級包所在位置。升級包通常在u盤或者catch目錄。在boot中開辟兩塊內(nèi)存空間a和b。
(2)在boot內(nèi),按照升級包目錄,掛載并讀取升級包到內(nèi)存a。
(3)boot內(nèi)使用zip解壓算法,對內(nèi)存a中的數(shù)據(jù)進(jìn)行解壓,并直接嘗試加載其中指定路徑內(nèi)(通常為system/recovery.bin)的recovery鏡像,如果成功,則將recovery鏡像讀取到內(nèi)存b。
(4)recovery鏡像是使用mkimgs制作的標(biāo)準(zhǔn)linux鏡像,在鏡像前部有64字節(jié)頭信息,包含了鏡像長度l和其crc校驗(yàn)值等。將boot中內(nèi)存b+64為其實(shí)位置,總長度為l的數(shù)據(jù)做crc校驗(yàn),結(jié)果與鏡像頭中的crc值比對,判斷鏡像是否獲取、解壓成功。
(5)釋放a區(qū)域內(nèi)存。將內(nèi)存中b的數(shù)據(jù),以及有效數(shù)據(jù)長度l,傳入到boot中的引導(dǎo)鏡像函數(shù)接口,boot引導(dǎo)此recovery啟動(dòng),recovery開始接管機(jī)頂盒運(yùn)行狀態(tài),并完成升級功能
基于以上論述可知,圍繞本發(fā)明所提供的技術(shù)方案在結(jié)合產(chǎn)品的具體使用場景,還針對boot啟動(dòng)的流程做出了改進(jìn),具體如下:
(1)在boot根據(jù)cfg值,準(zhǔn)備啟動(dòng)recovery時(shí),先讀取存儲(chǔ)在flash中的recovery,通過recovery鏡像本身的格式來是否有損壞。如果損壞,則執(zhí)行本方案,從升級包中取出最新的recovery。這樣可以避免flash中的recovery損壞導(dǎo)致升級功能無法執(zhí)行。
(2)在boot啟動(dòng)時(shí),判斷特定按鍵輸入,如果有特定按鍵,則會(huì)跳過讀取flash中的recovery的步驟,直接執(zhí)行本方案的方法,從升級包中取出最新的recovery。這樣可以避免flash中的recovery有功能缺陷或兼容問題,直接使用升級包中最新版本完成升級
由此可見,與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例所提出的技術(shù)方案的有益技術(shù)效果包括:
本發(fā)明公開了一種機(jī)頂盒升級方法以及機(jī)頂盒,機(jī)頂盒對已存儲(chǔ)的第一恢復(fù)鏡像進(jìn)行校驗(yàn),當(dāng)?shù)谝换謴?fù)鏡像的校驗(yàn)值與預(yù)設(shè)值不同時(shí),解壓升級包并獲取升級包中包含的第二恢復(fù)鏡像,引導(dǎo)第二恢復(fù)鏡像啟動(dòng)機(jī)頂盒,以使第二恢復(fù)鏡像通過升級包對機(jī)頂盒進(jìn)行升級。本發(fā)明在機(jī)頂盒自身的recovery程序出現(xiàn)故障以及無法根據(jù)用戶的指令直接進(jìn)行升級或更新時(shí),可以根據(jù)升級包中預(yù)置的恢復(fù)鏡像來引導(dǎo)升級包對機(jī)頂盒進(jìn)行更新或升級,提高了機(jī)頂盒升級成功的概率,有效的避免了因自身的recovery程序故障以及無法根據(jù)用戶的指令進(jìn)行操作而導(dǎo)致升級失敗的問題。
相應(yīng)的,本發(fā)明還提出了一種機(jī)頂盒,如圖3所示,為本發(fā)明實(shí)施例所提出的一種機(jī)頂盒的結(jié)構(gòu)示意圖,該機(jī)頂盒至少包括:
校驗(yàn)?zāi)K31,用于機(jī)頂盒對已存儲(chǔ)的第一恢復(fù)鏡像進(jìn)行校驗(yàn);
處理模塊32,用于當(dāng)所述第一恢復(fù)鏡像的校驗(yàn)值與預(yù)設(shè)值不同時(shí),解壓升級包并獲取所述升級包中包含的第二恢復(fù)鏡像;
升級模塊33,用于引導(dǎo)所述第二恢復(fù)鏡像啟動(dòng)所述機(jī)頂盒,以使所述第二恢復(fù)鏡像通過所述升級包對所述機(jī)頂盒進(jìn)行升級。
在一些實(shí)施方式中,本發(fā)明的所述處理模塊32還用于在所述機(jī)頂盒對已存儲(chǔ)的第一恢復(fù)鏡像進(jìn)行讀取之前,判斷是否接收到跳過指示,并在存儲(chǔ)空間中掛載并解壓升級包,具體為:
判斷時(shí)間閾值內(nèi)是否接收到與指定操作匹配的用戶操作;
若判斷結(jié)果為否,對所述第一恢復(fù)鏡像進(jìn)行校驗(yàn),并在校驗(yàn)結(jié)果為不同時(shí)確認(rèn)所述第一恢復(fù)鏡像不可用,以在所述機(jī)頂盒的存儲(chǔ)空間中掛載并解壓升級包;
若判斷結(jié)果為是,根據(jù)所述用戶操作生成所述跳過指示,以在所述機(jī)頂盒的存儲(chǔ)空間中掛載并解壓升級包。
在一些實(shí)施方式中,本發(fā)明的所述處理模塊32解壓升級包,具體為:
在所述機(jī)頂盒的指定分區(qū)內(nèi)獲取所述升級包的標(biāo)記信息;
根據(jù)所述標(biāo)記信息確定所述升級包的存儲(chǔ)位置,并在所述機(jī)頂盒的內(nèi)存中設(shè)置第一空間以及第二空間;
將所述升級包從所述存儲(chǔ)位置掛載至所述第一空間;
在所述第一空間對所述升級包進(jìn)行解壓。
在一些實(shí)施方式中,本發(fā)明的所述處理模塊32從所述升級包中提取所述第二恢復(fù)鏡像,具體為:
將所述第一空間中的數(shù)據(jù)進(jìn)行解壓;
判斷是否能根據(jù)指定路徑在解壓后的文件目錄中加載所述第二恢復(fù)鏡像;
若加載成功,將所述第二恢復(fù)鏡像讀取到所述第二空間,并在所述第二恢復(fù)鏡像的完整性校驗(yàn)通過之后將所述第二空間內(nèi)的數(shù)據(jù)傳入指定的引導(dǎo)接口,以引導(dǎo)所述第二恢復(fù)鏡像啟動(dòng);
若加載失敗,終止升級所述機(jī)頂盒。
在一些實(shí)施方式中,本發(fā)明的所述升級模塊33在所述第二恢復(fù)鏡像的完整性校驗(yàn)通過之后將所述第二空間內(nèi)的數(shù)據(jù)傳入指定的引導(dǎo)接口,具體為:
根據(jù)所述第二恢復(fù)鏡像中完整性校驗(yàn)值的位置確定起始位置;
根據(jù)所述起始位置以及所述第二恢復(fù)鏡像的鏡像長度在所述第二空間內(nèi)獲取對比數(shù)據(jù);
對所述對比數(shù)據(jù)進(jìn)行完整性校驗(yàn);
若所述對比數(shù)據(jù)的完整性校驗(yàn)值與所述第二恢復(fù)鏡像中完整性校驗(yàn)值一致,確認(rèn)所述第二恢復(fù)鏡像的完整性校驗(yàn)通過,并將所述第二空間內(nèi)的數(shù)據(jù)傳入所述引導(dǎo)接口;
若所述對比數(shù)據(jù)的完整性校驗(yàn)值與所述第二恢復(fù)鏡像中完整性校驗(yàn)值不一致,終止升級所述機(jī)頂盒。
由此可見,與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例所提出的技術(shù)方案的有益技術(shù)效果包括:
本發(fā)明公開了一種機(jī)頂盒升級方法以及機(jī)頂盒,機(jī)頂盒對已存儲(chǔ)的第一恢復(fù)鏡像進(jìn)行校驗(yàn),當(dāng)?shù)谝换謴?fù)鏡像的校驗(yàn)值與預(yù)設(shè)值不同時(shí),解壓升級包并獲取升級包中包含的第二恢復(fù)鏡像,引導(dǎo)第二恢復(fù)鏡像啟動(dòng)機(jī)頂盒,以使第二恢復(fù)鏡像通過升級包對機(jī)頂盒進(jìn)行升級。本發(fā)明在機(jī)頂盒自身的recovery程序出現(xiàn)故障以及無法根據(jù)用戶的指令直接進(jìn)行升級或更新時(shí),可以根據(jù)升級包中預(yù)置的恢復(fù)鏡像來引導(dǎo)升級包對機(jī)頂盒進(jìn)行更新或升級,提高了機(jī)頂盒升級成功的概率,有效的避免了因自身的recovery程序故障以及無法根據(jù)用戶的指令進(jìn)行操作而導(dǎo)致升級失敗的問題。
通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明可以通過硬件實(shí)現(xiàn),也可以借助軟件加必要的通用硬件平臺的方式來實(shí)現(xiàn)?;谶@樣的理解,本發(fā)明的技術(shù)方案可以以軟件產(chǎn)品的形式體現(xiàn)出來,該軟件產(chǎn)品可以存儲(chǔ)在一個(gè)非易失性存儲(chǔ)介質(zhì)(可以是cd-rom,u盤,移動(dòng)硬盤等)中,包括若干指令用以使得一臺計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施場景所述的方法。
本領(lǐng)域技術(shù)人員可以理解附圖只是一個(gè)優(yōu)選實(shí)施場景的示意圖,附圖中的模塊或流程并不一定是實(shí)施本發(fā)明所必須的。
本領(lǐng)域技術(shù)人員可以理解實(shí)施場景中的裝置中的模塊可以按照實(shí)施場景描述進(jìn)行分布于實(shí)施場景的裝置中,也可以進(jìn)行相應(yīng)變化位于不同于本實(shí)施場景的一個(gè)或多個(gè)裝置中。上述實(shí)施場景的模塊可以合并為一個(gè)模塊,也可以進(jìn)一步拆分成多個(gè)子模塊。
上述本發(fā)明序號僅僅為了描述,不代表實(shí)施場景的優(yōu)劣。
以上公開的僅為本發(fā)明的幾個(gè)具體實(shí)施場景,但是,本發(fā)明并非局限于此,任何本領(lǐng)域的技術(shù)人員能思之的變化都應(yīng)落入本發(fā)明的保護(hù)范圍。