專利名稱:一種機(jī)頂盒升級(jí)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及機(jī)頂盒技術(shù)領(lǐng)域,更具體的說(shuō),涉及一種基于Linux平臺(tái)的機(jī)頂盒在應(yīng)用程序中同時(shí)支持文件升級(jí)和分區(qū)升級(jí)的方法。
背景技術(shù):
機(jī)頂盒,也稱為數(shù)字視頻變換盒(Set Top Box,簡(jiǎn)稱STB),是一個(gè)連接電視機(jī)與外部信號(hào)源的設(shè)備。它可以將壓縮的數(shù)字信號(hào)轉(zhuǎn)成電視內(nèi)容,并在電視機(jī)上顯示出來(lái)。信號(hào)可以來(lái)自有線電纜、衛(wèi)星天線、寬帶網(wǎng)絡(luò)以及地面廣播。對(duì)于數(shù)字電視的播放來(lái)說(shuō),是必不可少的設(shè)備。為了滿足人們?nèi)找嬖鲩L(zhǎng)的生活水平,修正原有機(jī)頂盒中的bug,增加更多更強(qiáng)大的 的功能,對(duì)機(jī)頂盒中的程序進(jìn)行升級(jí)已經(jīng)顯得特別重要。然而現(xiàn)有的針對(duì)Linux的機(jī)頂盒在應(yīng)用程序中進(jìn)行升級(jí)的時(shí)候卻無(wú)法同時(shí)支持對(duì)文件和分區(qū)進(jìn)行升級(jí),導(dǎo)致整個(gè)升級(jí)過(guò)程冗長(zhǎng)、繁瑣。大多數(shù)機(jī)頂盒在升級(jí)的時(shí)候都是通過(guò)LOADER實(shí)現(xiàn)升級(jí),在嵌入式的Linux系統(tǒng)中都會(huì)采用分區(qū)升級(jí)的方式,在手動(dòng)觸發(fā)升級(jí)模式下如果要升級(jí)都要重新啟動(dòng)機(jī)頂盒,從uboot跳到LOADER去檢測(cè)升級(jí),這樣的話過(guò)程較為麻煩。因此現(xiàn)在急需一種能同時(shí)支持對(duì)文件和分區(qū)進(jìn)行升級(jí)的方法,在手動(dòng)觸發(fā)升級(jí)方式下可以直接在應(yīng)用程序菜單中去檢測(cè),在沒(méi)有升級(jí)的時(shí)候退出升級(jí)應(yīng)用程序菜單即可,不需重啟,使得機(jī)頂盒的檢測(cè)升級(jí)和升級(jí)過(guò)程變得簡(jiǎn)單、方便,不影響用戶觀看節(jié)目。
發(fā)明內(nèi)容
本發(fā)明的目的是,針對(duì)現(xiàn)有的機(jī)頂盒在應(yīng)用程序中升級(jí)無(wú)法同時(shí)支持對(duì)文件和對(duì)分區(qū)進(jìn)行升級(jí)的缺陷,提供一種能克服此缺陷的機(jī)頂盒升級(jí)方法。本發(fā)明解決上述問(wèn)題的方案是提供一種機(jī)頂盒升級(jí)方法,包括以下步驟S100、在應(yīng)用程序升級(jí)菜單中檢測(cè)機(jī)頂盒有無(wú)升級(jí)所需的機(jī)頂盒升級(jí)文件,若有,則進(jìn)入步驟S200,否則退出升級(jí)應(yīng)用程序;S200、檢測(cè)機(jī)頂盒升級(jí)模式,若機(jī)頂盒升級(jí)模式為文件升級(jí)文件模式則進(jìn)入步驟S300 ;否則該機(jī)頂盒升級(jí)模式為分區(qū)升級(jí)模式,進(jìn)入步驟S400 ;S300、在機(jī)頂盒的根文件系統(tǒng)下新建升級(jí)臨時(shí)目錄,并將文件升級(jí)模式所需的文件寫入到升級(jí)臨時(shí)目錄,升級(jí)臨時(shí)目錄還包括一個(gè)用于替換原文件的腳本文件,成功后寫入后重啟機(jī)頂盒;S400、用分區(qū)升級(jí)文件改寫rootfs分區(qū),改寫成功后重啟機(jī)頂盒。本發(fā)明的機(jī)頂盒升級(jí)方法,其中S200的機(jī)頂盒升級(jí)文件為在升級(jí)前端加入數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)簽名后的機(jī)頂盒升級(jí)文件。本發(fā)明的機(jī)頂盒升級(jí)方法,其中S200還包括,在檢測(cè)到機(jī)頂盒有可用的升級(jí)文件時(shí),讀取機(jī)頂盒升級(jí)文件到內(nèi)存中。本發(fā)明的機(jī)頂盒升級(jí)方法,其中步驟S300還包括,校驗(yàn)文件升級(jí)中文件的數(shù)據(jù)簽名。本發(fā)明的機(jī)頂盒升級(jí)方法,其中步驟S400還包括,校驗(yàn)分區(qū)升級(jí)的數(shù)據(jù)簽名。本發(fā)明的機(jī)頂盒升級(jí)方法,還包括,在步驟S300或步驟S400中重啟機(jī)頂盒后,進(jìn)行重啟檢測(cè),并在檢測(cè)到存在升級(jí)臨時(shí)目錄時(shí),執(zhí)行升級(jí)臨時(shí)目錄下的腳本文件,進(jìn)行文件替換,替換后刪除升級(jí)臨時(shí)目錄。實(shí)施本發(fā)明的機(jī)頂盒升級(jí)方法,能夠得到以下的有益效果對(duì)機(jī)頂盒升級(jí)時(shí),可以按照升級(jí)所需特性進(jìn)行文件升級(jí) 或者分區(qū)升級(jí),使得升級(jí)機(jī)頂盒的過(guò)程變得靈活,針對(duì)較小的升級(jí)改動(dòng)使用文件升級(jí)方式,縮短升級(jí)所需時(shí)間;在大幅度升級(jí)時(shí),將升級(jí)所涉及的內(nèi)容歸為分區(qū),使得升級(jí)后的系統(tǒng)更為穩(wěn)定。
以下結(jié)合附圖
對(duì)本發(fā)明進(jìn)行詳細(xì)說(shuō)明,其中圖I為本發(fā)明的機(jī)頂盒分區(qū)示意圖;圖2為本發(fā)明機(jī)頂盒升級(jí)方法一則較佳實(shí)施例的流程圖;圖3為重啟檢測(cè)機(jī)頂盒的過(guò)程。
具體實(shí)施例方式以下結(jié)合附圖和具體實(shí)施方式
對(duì)本發(fā)明進(jìn)行對(duì)本發(fā)明進(jìn)行詳細(xì)說(shuō)明。如圖I所示為本發(fā)明機(jī)頂盒的Linux分區(qū)示意圖。本發(fā)明的Linux機(jī)頂盒包括引導(dǎo)區(qū)(UB00T),一般用于引導(dǎo)機(jī)頂盒的內(nèi)核,在機(jī)頂盒開(kāi)機(jī)時(shí),UBOOT會(huì)首先啟動(dòng),引導(dǎo)其他的分區(qū)。數(shù)據(jù)庫(kù)(DM),保存機(jī)頂盒應(yīng)用程序用到的數(shù)據(jù)庫(kù)信息。內(nèi)核(KERNEL),該分區(qū)為機(jī)頂盒的核心,對(duì)機(jī)頂盒的硬件設(shè)備進(jìn)行控制操作。根文件系統(tǒng)(ROOTFS ),機(jī)頂盒啟動(dòng)后,第一個(gè)掛載的分區(qū),包含機(jī)頂盒系統(tǒng)引導(dǎo)和其他的文件系統(tǒng)得以掛載的必要文件。預(yù)留分區(qū)(RESERVED),該分區(qū)為預(yù)留的空間,方便以后機(jī)頂盒升級(jí)時(shí)的空間需要。以下將結(jié)合圖I的具體分區(qū)情況對(duì)升級(jí)過(guò)程進(jìn)行說(shuō)明。如圖2所示為本發(fā)明機(jī)頂盒升級(jí)方法一則較佳實(shí)施例的流程圖。S100、在用戶界面處,用戶選擇進(jìn)入升級(jí)菜單界面,并選擇一種升級(jí)方式,例如USB升級(jí)、OTA升級(jí)、串口升級(jí)等,此后檢測(cè)是否有可用升級(jí),若無(wú)升級(jí),則向用戶顯示無(wú)相關(guān)升級(jí)的信息;若有升級(jí),則進(jìn)入步驟S200 ;S200、讀取機(jī)頂盒升級(jí)文件到內(nèi)存中,對(duì)讀取到內(nèi)存中的機(jī)頂盒升級(jí)文件進(jìn)行識(shí)另IJ,以區(qū)分其升級(jí)模式為文件升級(jí)還是分區(qū)升級(jí)。具體的方法是通過(guò)升級(jí)信息結(jié)構(gòu)體中的布爾型變量的數(shù)值(例如本實(shí)施例中的bFileUpgrade變量),1 (真值)則為文件升級(jí),O (非真值)則為分區(qū)升級(jí)。對(duì)于文件升級(jí),進(jìn)入步驟S300,對(duì)于分區(qū)升級(jí)進(jìn)入步驟S400。需要說(shuō)明的是,此處的機(jī)頂盒升級(jí)文件為升級(jí)前端(即升級(jí)文件的提供者)加入了自定義的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)簽名的升級(jí)文件。這些加入的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)簽名用于在后續(xù)的升級(jí)過(guò)程中,對(duì)機(jī)頂盒升級(jí)文件進(jìn)行識(shí)別、驗(yàn)證。具體的數(shù)據(jù)結(jié)構(gòu)如下①文件頭(image header)結(jié)構(gòu)體
typedef struct tag—UPGRADE—ImageHeader—t
{
unsigned char nManufacture—Code; unsigned char nHardware—Code; unsigned char nModel—Code; unsigned char nUpgradeCount;
UpgradeInfo—t upgradeInfo[UPGRADE—MAX—NUMBER—SUPPORT]; unsigned int nCrc32; } UPGRADE—ImageHeader_t;其中I. nManufacture_Code :廠商號(hào)。2. nHardware_Code :硬件版本號(hào)。3. nModel_Code :機(jī)器型號(hào)。4. nUpgradeCount :升級(jí)中要遍歷的次數(shù)。由于本升級(jí)方法支持多分區(qū)和多文件升級(jí),故前端工具要記錄實(shí)際要升級(jí)的次數(shù)。 5. upgradelnfo :升級(jí)信息結(jié)構(gòu)體。6. UPGRADE_MAX_NUMBER_SUPPORT :最大支持的升級(jí)次數(shù)。nUpgradeCount 必須小于等于此值。7. nCrc32 :用于校驗(yàn)以上字段的crc確保其完整性。②升級(jí)信息結(jié)構(gòu)體
typedef struct
{bool bFileUpgrade; //true: file upgrade union
{
FileUpgradeInfo_t filelnfo;
MtdUpgra.deInfo—t mtdlnfo;
}param;
}UpgradeInfo_t;其中
I. bFileUpgrade true :文件升級(jí);false :分區(qū)升級(jí)。2. filelnfo :文件升級(jí)信息結(jié)構(gòu)體。3. mtdlnfo分區(qū)升級(jí)信息結(jié)構(gòu)體。③文件升級(jí)信息結(jié)構(gòu)體
typedef struct
{
char cFiIePath[BLL—UPGRADE—MAX—FILE—PATH];
unsigned int nFile—Offset;
unsigned int nFile—Size;
unsigned short nSoftware—Updat.e_Version;
unsigned char cFile—Desc[16];
}FileUp gradeInfo—t;其中I. cFiIePath :升級(jí)文件的絕對(duì)路徑。2. nFile_0ffset:此文件的數(shù)據(jù)距離升級(jí)文件的起始位置的偏移量。此字段和nFile_Size可以還原該文件的原始數(shù)據(jù)。3. nFile_Size :升級(jí)文件的大小。4. nSoftware_Update_Version :文件的版本。5. cFile_Desc[16]:文件的簡(jiǎn)單描述。④分區(qū)升級(jí)信息結(jié)構(gòu)體typedef struct
{
unsigned char nlmage—ID: unsigned int nMtd—Offset; unsigned int nlmage_0ffset; unsigned int nImage_Size; unsigned short nSoftware—Update—Version; char cMtd_Desc[16];
}MtdUpgradeInfo_t;其中1. nImage_ID :指定要升級(jí)的分區(qū)ID2. nMtd_0ffset :指定要升級(jí)的分區(qū)數(shù)據(jù)距離該分區(qū)起始位置的偏移量。3.nlmage_0ffset:此分區(qū)的數(shù)據(jù)距離升級(jí)文件的起始位置的偏移量。此字段和nImage_Size可以還原該分區(qū)的原始數(shù)據(jù)。4. nImage_Size :分區(qū)數(shù)據(jù)的大小。5. nSoftware_Update_Version :分區(qū)所在的軟件版本。6. cMtd_Desc :分區(qū)信息簡(jiǎn)要說(shuō)明。S300、對(duì)于文件升級(jí),在根文件系統(tǒng)中建立臨時(shí)目錄,寫入升級(jí)所需的文件;具體的實(shí)現(xiàn)方式是根據(jù)升級(jí)文件中的數(shù)據(jù)結(jié)構(gòu)中的nFile_0ffset和nFile_Size獲得升級(jí)文件數(shù)據(jù)在內(nèi)存中的起始地址和大小,計(jì)算文件數(shù)據(jù)的簽名,校驗(yàn)簽名。調(diào)用創(chuàng)建一個(gè)升級(jí)臨時(shí)目錄,目錄名假設(shè)為upgrade,路徑假設(shè)為根目錄(/)下,接著調(diào)用文件系統(tǒng)打開(kāi)操作(fopen)創(chuàng)建一個(gè)文件,要升級(jí)的文件名可根據(jù)CFilePath字段通過(guò)分析得到,然后調(diào)用文件系統(tǒng)寫操作(fwrite)寫入數(shù)據(jù),成功后重啟,進(jìn)入重啟檢測(cè)步驟。S400、對(duì)于分區(qū)升級(jí),直接將分區(qū)升級(jí)文件改寫rootfs分區(qū),具體的實(shí)現(xiàn)方式是根據(jù)數(shù)據(jù)結(jié)構(gòu)中的根據(jù)nlmage_0ffset和nImage_Size獲得升級(jí)分區(qū)數(shù)據(jù)在內(nèi)存中的起始地址和大小,計(jì)算分區(qū)數(shù)據(jù)的簽名,校驗(yàn)簽名;然后根據(jù)分區(qū)ID(nImage_ID),分區(qū)偏移量(nMtd_0ffset)確定升級(jí)分區(qū)數(shù)據(jù)在nandflash中的位置,寫入分區(qū)數(shù)據(jù),成功后重啟。在步驟S300和S400的最后都需要進(jìn)行重啟檢測(cè),重啟檢測(cè)機(jī)頂盒的過(guò)程如圖3所示。在重啟后,首先進(jìn)入U(xiǎn)B00T,引導(dǎo)內(nèi)核KERNEL ;進(jìn)入KERNEL后,掛載所有文件系統(tǒng)的分區(qū);然后檢測(cè)有無(wú)文件升級(jí)臨時(shí)目錄(即步驟S300中創(chuàng)建的upgrade)如果有,則執(zhí)行該目錄(upgrade)下的文件替換腳本(upgrade, sh),進(jìn)行文件替換;最后啟動(dòng)相關(guān)的應(yīng)用程序,完成相關(guān)的升級(jí)。具體的選擇文件升級(jí)或分區(qū)升級(jí),由升級(jí)前端決定。沒(méi)有文件系統(tǒng)的分區(qū)支持分區(qū)升級(jí),如果本分區(qū)數(shù)據(jù)比較多,則所需內(nèi)存較大,升級(jí)時(shí)間過(guò)長(zhǎng),但實(shí)現(xiàn)較為簡(jiǎn)單,直接替換nandflash中的數(shù)據(jù)后重啟即可;有文件系統(tǒng)的分區(qū)同時(shí)支持分區(qū)升級(jí)和文件升級(jí),分區(qū)升級(jí)與沒(méi)有文件系統(tǒng)的分區(qū)相同,文件升級(jí)則只需升級(jí)某分區(qū)中的需要升級(jí)的文件即可,這種升級(jí)模式所需內(nèi)存小,升級(jí)時(shí)間短,但是文件升級(jí)要調(diào)用系統(tǒng)的文件讀寫完成操作,如果操作系統(tǒng)正在占用此文件,是不能直接對(duì)此文件進(jìn)行改寫的,故需在文件系統(tǒng)中建立升級(jí)臨時(shí)目錄,用于存放需要升級(jí)的文件,并且還要一個(gè)腳本文件去實(shí)現(xiàn)文件替換策略,此腳本也會(huì)升級(jí)到升級(jí)臨時(shí)文件夾 ,替換過(guò)程要在升級(jí)完成后重啟機(jī)頂盒,掛載完所有文件系統(tǒng)后立即執(zhí)行,成功后刪除此臨時(shí)文件夾,然后就可以執(zhí)行應(yīng)用程序了。以上僅為本發(fā)明具體實(shí)施方式
,不能以此來(lái)限定本發(fā)明的范圍,本技術(shù)領(lǐng)域內(nèi)的一般技術(shù)人員根據(jù)本創(chuàng)作所作的均等變化,以及本領(lǐng)域內(nèi)技術(shù)人員熟知的改變,都應(yīng)仍屬本發(fā)明涵蓋的范圍。
權(quán)利要求
1.一種機(jī)頂盒升級(jí)方法,其特征在于,包括以下步驟 S100、在應(yīng)用程序升級(jí)菜單中檢測(cè)機(jī)頂盒有無(wú)升級(jí)所需的機(jī)頂盒升級(jí)文件,若有,則進(jìn)入步驟S200,否則退出升級(jí)應(yīng)用程序菜單; S200、檢測(cè)機(jī)頂盒升級(jí)模式,若機(jī)頂盒升級(jí)模式為文件升級(jí)模式則進(jìn)入步驟S300 ;否則該機(jī)頂盒升級(jí)模式為分區(qū)升級(jí)模式,進(jìn)入步驟S400 ; S300、在機(jī)頂盒的根文件系統(tǒng)下新建升級(jí)臨時(shí)目錄,并將文件升級(jí)模式所需的文件寫入到升級(jí)臨時(shí)目錄,升級(jí)臨時(shí)目錄還包括一個(gè)用于替換原文件的腳本文件,成功后寫入后重啟機(jī)頂盒; S400、用分區(qū)升級(jí)文件改寫rootfs分區(qū),改寫成功后重啟機(jī)頂盒。
2.根據(jù)權(quán)利要求I所述的機(jī)頂盒升級(jí)方法,其特征在于,所述步驟S200的機(jī)頂盒升級(jí)文件為在升級(jí)前端加入數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)簽名后的機(jī)頂盒升級(jí)文件。
3.根據(jù)權(quán)利要求2所述的機(jī)頂盒升級(jí)方法,其特征在于,所述步驟S200還包括,在檢測(cè)到機(jī)頂盒有可用的升級(jí)文件時(shí),讀取機(jī)頂盒升級(jí)文件到內(nèi)存中。
4.根據(jù)權(quán)利要求2所述的機(jī)頂盒升級(jí)方法,其特征在于,步驟S300還包括,校驗(yàn)文件升級(jí)中文件的數(shù)據(jù)簽名。
5.根據(jù)權(quán)利要求2所述的機(jī)頂盒升級(jí)方法,其特征在于,步驟S400還包括,校驗(yàn)分區(qū)升級(jí)文件的數(shù)據(jù)簽名。
6.根據(jù)權(quán)利要求1-5任一所述的機(jī)頂盒升級(jí)方法,其特征在于,在步驟S300或步驟S400中重啟機(jī)頂盒后,進(jìn)行重啟檢測(cè),并在檢測(cè)到存在升級(jí)臨時(shí)目錄時(shí),執(zhí)行升級(jí)臨時(shí)目錄下的腳本文件,進(jìn)行文件替換,替換后刪除升級(jí)臨時(shí)目錄。
全文摘要
本發(fā)明涉及一種機(jī)頂盒在應(yīng)用程序中的升級(jí)方法包括以下步驟S100、進(jìn)入應(yīng)用程序菜單檢測(cè)有無(wú)升級(jí)文件,若有,則進(jìn)入步驟S200,否則退出應(yīng)用程序菜單;S200、檢測(cè)機(jī)頂盒升級(jí)模式,若升級(jí)模式為文件升級(jí)模式則進(jìn)入步驟S300;否則為分區(qū)升級(jí)模式,進(jìn)入步驟S400;S300、在根文件系統(tǒng)下新建升級(jí)臨時(shí)目錄,寫入相關(guān)文件,成功后重啟機(jī)頂盒;S400、用分區(qū)升級(jí)文件改寫rootfs分區(qū),改寫成功后重啟機(jī)頂盒。實(shí)施本發(fā)明的機(jī)頂盒升級(jí)方法,可以按照升級(jí)所需特性進(jìn)行文件升級(jí)或者分區(qū)升級(jí),使得升級(jí)機(jī)頂盒的過(guò)程變得靈活,針對(duì)較小的升級(jí)改動(dòng)使用文件升級(jí)方式,縮短升級(jí)所需時(shí)間;在大幅度升級(jí)時(shí),將升級(jí)所涉及的內(nèi)容歸為分區(qū),使得升級(jí)后的系統(tǒng)更為穩(wěn)定。
文檔編號(hào)H04N21/443GK102890638SQ20121037150
公開(kāi)日2013年1月23日 申請(qǐng)日期2012年9月29日 優(yōu)先權(quán)日2012年9月29日
發(fā)明者張鵬 申請(qǐng)人:深圳市九洲電器有限公司