一種嵌入式系統(tǒng)bootrom和應(yīng)用程序升級方法
【專利摘要】本發(fā)明涉及一種嵌入式系統(tǒng)升級BOOTROM和應(yīng)用程序方法,第一步,制作最小升級系統(tǒng),其功能就是從內(nèi)存中將BOOTROM和應(yīng)用程序讀出來,寫入到Flash,然后重啟完成升級;第二步,將最小升級系統(tǒng)、需要升級的BOOTROM和應(yīng)用程序通過腳本打包,生成升級文件。第三步,將升級文件下載到系統(tǒng)中,替換原有應(yīng)用程序,重啟,將自動完成BOOTROM和應(yīng)用程序升級。采用本發(fā)明介紹升級方法,可以在應(yīng)用程序不支持BOOTROM升級情況下,一次完成BOOTROM和應(yīng)用程序升級,保證升級對外接口的一致性。
【專利說明】
一種嵌入式系統(tǒng)BOOTROM和應(yīng)用程序升級方法
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及一種通信設(shè)備更新和維護(hù)方法,具體涉及一種升級嵌入式系統(tǒng)的BOOTROM和/或應(yīng)用程序方法。尤其涉及一種同時(shí)升級BOOTROM和應(yīng)用程序方法。
【背景技術(shù)】
[0002]由于通常升級只會單獨(dú)針對BOOTROM或應(yīng)用程序進(jìn)行升級,或者某些應(yīng)用程序不支持BOOTROM升級,或者需要分多次升級才能完成BOOTROM和應(yīng)用程序的同時(shí)升級,可能導(dǎo)致客戶正常使用受到影響。本發(fā)明將提供一種同時(shí)升級BOOTROM和應(yīng)用程序的新思路,滿足特殊情況下升級要求。
【發(fā)明內(nèi)容】
[0003]針對現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的在于提供一種升級BOOTROM和應(yīng)用程序方法,在制定了最小升級系統(tǒng),及打包軟件后,只需要根據(jù)需要升級的BOOTROM和應(yīng)用程序,便可以打包成需要的鏡像,升級到設(shè)備中重啟完成BOOTROM和應(yīng)用程序的自動升級。制定最小升級系統(tǒng),將使升級運(yùn)行過程更高效且穩(wěn)定,可用于各種升級場合。
[0004]本發(fā)明提供了一種嵌入式系統(tǒng)升級BOOTROM和應(yīng)用程序方法,包括:
[0005]步驟I,制作最小升級系統(tǒng),所述最小升級系統(tǒng)包括最小升級程序,所述最小升級程序用于從內(nèi)存中將BOOTROM和應(yīng)用程序讀出來,寫入到Flash,然后重啟完成升級;
[0006]步驟2,將所述最小升級系統(tǒng)、需要升級的BOOTROM和應(yīng)用程序通過腳本打包,生成升級文件;
[0007]步驟3,將升級文件下載到系統(tǒng)中,替換原有應(yīng)用程序,重啟,由所述最小升級程序自動完成BOOTROM和應(yīng)用程序升級。
[0008]在上述技術(shù)方案中,所述步驟I進(jìn)一步包括:
[0009]I)裁剪系統(tǒng),刪除無關(guān)組件,只保留內(nèi)核啟動、Flash讀寫功能,保證升級任務(wù)高效運(yùn)行;
[0010]2)編寫升級任務(wù),功能為讀取內(nèi)存中的BOOTROM和應(yīng)用程序,并校驗(yàn)是否正確,校驗(yàn)正確則分別寫入Flash的BOOTROM區(qū)和應(yīng)用程序區(qū),覆蓋舊文件;升級完成后重啟;
[0011]3)編譯生成最小升級系統(tǒng)鏡像。
[0012]在上述技術(shù)方案中,所述步驟2中生成升級文件的步驟包括采用腳本語言,讀取用于升級的最小升級系統(tǒng)鏡像、B00TR0M、應(yīng)用程序,然后將最小升級系統(tǒng)寫在最前面,接著寫入為用于升級的BOOTROM的長度和BOOTROM的CRC16校驗(yàn)和,然后寫入用于升級的BOOTROM的內(nèi)容,接著寫入用于升級的應(yīng)用程序的長度和應(yīng)用程序的CRC16校驗(yàn)和,然后寫入用于升級的應(yīng)用程序的內(nèi)容。
[0013]在上述技術(shù)方案中,所述步驟3的流程包括:所述最小升級系統(tǒng)啟動后讀取內(nèi)存空間,根據(jù)BOOTROM長度和BOOTROM的CRC16,讀取BOOTROM文件,然后計(jì)算BOOTROM文件的CRC16是否與讀取的相一致,判斷一致就將BOOTROM寫入到Flash;同樣再讀取內(nèi)存空間,根據(jù)應(yīng)用程序的長度和應(yīng)用程序的CRC16,讀取應(yīng)用程序文件,然后計(jì)算應(yīng)用程序的CRC16是否與讀取的相一致,一致就寫應(yīng)用程序到Flash;重啟后,新的BOOTROM和應(yīng)用程序啟動。
[0014]在上述技術(shù)方案中,所述步驟3的流程包括:
[0015]I)板卡啟動完成硬件初始化;
[0016]2)B00TR0M 啟動;
[0017]3)B00TR0M讀取到升級文件,并將其放在正確的地址空間;
[0018]4)CPU執(zhí)行最小升級系統(tǒng)中的最小升級程序;
[0019]5)運(yùn)行升級任務(wù),從內(nèi)存中讀到升級文件的B00TR0M,寫入flash中
[0020]6)從內(nèi)存中讀到升級文件的應(yīng)用程序,寫入flash中
[0021]7)重啟。
[0022]在上述技術(shù)方案中,基于VxWorks系統(tǒng)制作最小升級系統(tǒng)。
[0023]在上述技術(shù)方案中,在升級文件的0x00000位置處寫入最小升級系統(tǒng)的鏡像,長度不足0x90000的部分補(bǔ)O;在升級文件的0x90000位置處寫入BOOTROM的長度和校驗(yàn)和,然后寫入B00TR0M,長度不足OxEOOOO的部分補(bǔ)O;在升級文件的OxEOOOO位置處寫入應(yīng)用程序的長度和校驗(yàn)和,然后寫入應(yīng)用程序。
[0024]在上述技術(shù)方案中,將升級文件放在內(nèi)存空間0x10000;升級任務(wù)從內(nèi)存OxAOOOO中讀到升級文件的BOOTROM的長度,在內(nèi)存0xA0004處讀到BOOTROM的CRC校驗(yàn)和,然后從內(nèi)存0xA0008處開始讀取指定長度的BOOTROM的內(nèi)容,計(jì)算讀取的BOOTROM內(nèi)容的CRC校驗(yàn)和,判斷計(jì)算得到的校驗(yàn)和是否與之前內(nèi)存0xA0004處讀到BOOTROM的CRC校驗(yàn)和相一致,如果一致將讀取的BOOTROM內(nèi)容寫入flash中BOOTROM區(qū),覆蓋舊B00TR0M;升級任務(wù)從內(nèi)存OxFOOOO中讀到升級文件的應(yīng)用程序的長度,在內(nèi)存0xF0004處讀到應(yīng)用程序的CRC校驗(yàn)和,然后從內(nèi)存0xF0008處開始讀取指定長度的應(yīng)用程序的內(nèi)容,計(jì)算讀取的應(yīng)用程序內(nèi)容的CRC校驗(yàn)和,判斷計(jì)算得到的校驗(yàn)和是否與之前內(nèi)存0xF0004處讀到應(yīng)用程序的CRC校驗(yàn)和相一致,如果一致將讀取的應(yīng)用程序內(nèi)容寫入flash中應(yīng)用程序區(qū),覆蓋舊應(yīng)用程序。
[0025]采用本發(fā)明所提供的升級方法,可以在原有應(yīng)用程序不支持BOOTROM升級情況下,一次性完成BOOTROM和應(yīng)用程序的同時(shí)升級,保證升級對外接口的一致性。
【附圖說明】
[0026]圖1是本發(fā)明的升級文件制作過程圖;
[0027]圖2是本發(fā)明的升級文件結(jié)構(gòu)示意圖;
[0028]圖3是本發(fā)明的啟動及升級流程示意圖;
[0029]圖4是本發(fā)明的內(nèi)存使用不意圖;
【具體實(shí)施方式】
[0030]為了便于本領(lǐng)域普通技術(shù)人員理解和實(shí)施本發(fā)明,下面結(jié)合附圖及【具體實(shí)施方式】對本發(fā)明作進(jìn)一步的詳細(xì)描述。
[0031 ]本發(fā)明提供一種升級BOOTROM和應(yīng)用程序方法,包括升級文件制作和升級方法流程,包括以下步驟:
[0032]第一步:制定最小升級系統(tǒng),使程序運(yùn)行更高效且穩(wěn)定
[0033]I)裁剪系統(tǒng),刪除無關(guān)組件,只保留內(nèi)核啟動、Flash讀寫功能,保證升級任務(wù)高效運(yùn)行;例如基于VxWorks的最小系統(tǒng)進(jìn)行裁剪,僅保留內(nèi)核啟動、Flash讀寫功能,刪除其他無關(guān)組件。
[0034]2)編寫升級任務(wù)作為最小升級程序,基于上述裁剪后的系統(tǒng)運(yùn)行升級功能,升級功能為讀取固定內(nèi)存空間中的BOOTROM和應(yīng)用程序,并校驗(yàn)是否正確,僅當(dāng)校驗(yàn)正確后分別將從固定內(nèi)存空間中讀取得到的BOOTROM和應(yīng)用程序?qū)懭隖lash的BOOTROM區(qū)和應(yīng)用程序區(qū),覆蓋舊文件;寫入升級完成后重啟系統(tǒng)。
[0035]3)編譯生成最小升級系統(tǒng)(包括裁剪后的系統(tǒng)和升級任務(wù)應(yīng)用),得到最小升級系統(tǒng)鏡像文件,最小升級系統(tǒng)鏡像文件的長度小于0x90000字節(jié)。
[0036]第二步:升級文件制作,具體過程如圖1所示。
[0037]I)編譯生成應(yīng)用程序
[0038]2)編譯生成 BOOTROM
[0039]3)采用python腳本將最小升級系統(tǒng)鏡像、B00TR0M、應(yīng)用程序打包成一個(gè)升級文件update.biru
[0040]以vxworks操作系統(tǒng)下的BOOTROM和應(yīng)用程序升級為例,形成升級文件結(jié)構(gòu)如圖2所示,具體過程是在升級文件update.bin的0x00000位置處寫入最小升級系統(tǒng),長度不足0x90000的部分補(bǔ)O ;在升級文件update.bin的0x90000位置處寫入BOOTROM的長度(4字節(jié)整數(shù))和校驗(yàn)和,然后寫入B00TR0M,長度不足OxEOOOO的部分補(bǔ)O;在升級文件update.bin的OxEOOOO位置處寫入應(yīng)用程序的長度(4字節(jié)整數(shù))和校驗(yàn)和,然后寫入應(yīng)用程序。其中,在升級文件update.bin的0x90000?0x90003寫入BOOTROM的長度,0x90004?0x90007寫入BOOTROM的CRC校驗(yàn)和,從0x90008開始寫入BOOTROM程序和數(shù)據(jù),OxEOOOO?0xE0003寫入應(yīng)用程序的長度,0xE0004?0xE0007寫入應(yīng)用程序的CRC校驗(yàn)和,從0xE0008開始寫入應(yīng)用程序和數(shù)據(jù)。由此制作完成升級文件update, bin。
[0041 ]第三步,升級方法流程
[0042]如圖3所示,通過最小升級系統(tǒng)專門來完成BOOTROM和應(yīng)用程序升級,保證升級可靠性和可拓展性。
[0043]步驟一中編制的最小升級系統(tǒng),包含專有的升級功能,其升級任務(wù)啟動后讀取固定內(nèi)存空間地址,讀取BOOTROM長度和校驗(yàn)和,根據(jù)讀到的BOOTROM長度讀取BOOTROM,然后計(jì)算校驗(yàn)和是否與讀取的一致,一致就寫B(tài)OOTROM到Flash的BOOTROM區(qū),覆蓋舊的BOOTROM;同樣再讀取固定內(nèi)存空間地址,讀取應(yīng)用程序長度和校驗(yàn)和,根據(jù)讀到的應(yīng)用程序長度讀取應(yīng)用程序,然后計(jì)算校驗(yàn)和是否與讀取一致,一致就寫應(yīng)用程序到Flash的應(yīng)用程序區(qū);重啟,新的BOOTROM和應(yīng)用程序啟動。
[0044]以vxworks操作系統(tǒng)下的BOOTROM和應(yīng)用程序升級為例,升級具體步驟如下:
[0045]I)將升級文件傳到板卡的Flash上,重啟板卡;
[0046]2)板卡啟動完成硬件初始化;
[0047]3)板卡BOOTROM啟動完成;
[0048]4)讀取到升級文件update.bin,并將其放在內(nèi)存空間0x10000 ;所形成的升級文件內(nèi)存位置如圖4所示;
[0049]5)CPU從內(nèi)存空間0x10000處開始運(yùn)行最小升級系統(tǒng);
[0050]6)最小升級系統(tǒng)啟動后,運(yùn)行升級任務(wù),升級任務(wù)從內(nèi)存OxAOOOO中讀到升級文件的BOOTROM的長度,在內(nèi)存0xA0004處讀到BOOTROM的CRC校驗(yàn)和,然后從內(nèi)存0xA0008處開始讀取指定長度(即讀取的BOOTROM長度)的BOOTROM的內(nèi)容,計(jì)算讀取的BOOTROM內(nèi)容的CRC校驗(yàn)和,判斷計(jì)算得到的校驗(yàn)和是否與之前內(nèi)存0xA0004處讀到BOOTROM的CRC校驗(yàn)和相一致,如果一致將讀取的BOOTROM內(nèi)容寫入flash中BOOTROM區(qū),覆蓋舊B00TR0M;
[0051 ] 7)升級任務(wù)從內(nèi)存OxFOOOO中讀到升級文件的應(yīng)用程序的長度,在內(nèi)存0xF0004處讀到應(yīng)用程序的CRC校驗(yàn)和,然后從內(nèi)存OxFOOOS處開始讀取指定長度(即讀取的應(yīng)用程序長度)的應(yīng)用程序的內(nèi)容,計(jì)算讀取的應(yīng)用程序內(nèi)容的CRC校驗(yàn)和,判斷計(jì)算得到的校驗(yàn)和是否與之前內(nèi)存0xF0004處讀到應(yīng)用程序的CRC校驗(yàn)和相一致,如果一致將讀取的應(yīng)用程序內(nèi)容寫入flash中應(yīng)用程序區(qū),覆蓋舊應(yīng)用程序;
[0052]8)重啟;
[0053]9)板卡將使用新的BOOTROM啟動,并運(yùn)行新的應(yīng)用程序。
[0054]以上實(shí)施例僅為本發(fā)明的一種實(shí)施方式,其描述較為具體和詳細(xì),但不能因此而理解為對本發(fā)明專利范圍的限制。其具體結(jié)構(gòu)和尺寸可根據(jù)實(shí)際需要進(jìn)行相應(yīng)的調(diào)整。應(yīng)當(dāng)指出的是,對于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。
【主權(quán)項(xiàng)】
1.一種嵌入式系統(tǒng)升級BOOTROM和應(yīng)用程序方法,其特征在于,包括: 步驟I,制作最小升級系統(tǒng),所述最小升級系統(tǒng)包括最小升級程序,所述最小升級程序用于從內(nèi)存中將BOOTROM和應(yīng)用程序讀出來,寫入到Flash,然后重啟完成升級; 步驟2,將所述最小升級系統(tǒng)、需要升級的BOOTROM和應(yīng)用程序通過腳本打包,生成升級文件; 步驟3,將升級文件下載到系統(tǒng)中,替換原有應(yīng)用程序,重啟,由所述最小升級程序自動完成BOOTROM和應(yīng)用程序升級。2.如權(quán)利要求1所述的嵌入式系統(tǒng)升級BOOTROM和應(yīng)用程序方法,其特征在于:所述步驟I進(jìn)一步包括: 1)裁剪系統(tǒng),刪除無關(guān)組件,只保留內(nèi)核啟動、Flash讀寫功能,保證升級任務(wù)高效運(yùn)行; 2)編寫升級任務(wù),功能為讀取內(nèi)存中的BOOTROM和應(yīng)用程序,并校驗(yàn)是否正確,校驗(yàn)正確則分別寫入Flash的BOOTROM區(qū)和應(yīng)用程序區(qū),覆蓋舊文件;升級完成后重啟; 3)編譯生成最小升級系統(tǒng)鏡像。3.如權(quán)利要求2所述的嵌入式系統(tǒng)升級BOOTROM和應(yīng)用程序方法,其特征在于:所述步驟2中生成升級文件的步驟包括采用腳本語言,讀取用于升級的最小升級系統(tǒng)鏡像、B00TR0M、應(yīng)用程序,然后將最小升級系統(tǒng)寫在最前面,接著寫入為用于升級的BOOTROM的長度和BOOTROM的CRC校驗(yàn)和,然后寫入用于升級的BOOTROM的內(nèi)容,接著寫入用于升級的應(yīng)用程序的長度和應(yīng)用程序的CRC校驗(yàn)和,然后寫入用于升級的應(yīng)用程序的內(nèi)容。4.如權(quán)利要求3所述的嵌入式系統(tǒng)升級BOOTROM和應(yīng)用程序方法,其特征在于:所述步驟3的流程包括:所述最小升級系統(tǒng)啟動后讀取內(nèi)存空間,根據(jù)BOOTROM長度和BOOTROM的CRC,讀取BOOTROM文件,然后計(jì)算BOOTROM文件的CRC是否與讀取的相一致,判斷一致就將BOOTROM寫入到Flash;同樣再讀取內(nèi)存空間,根據(jù)應(yīng)用程序的長度和應(yīng)用程序的CRC,讀取應(yīng)用程序文件,然后計(jì)算應(yīng)用程序的CRC是否與讀取的相一致,一致就寫應(yīng)用程序到Flash;重啟后,新的BOOTROM和應(yīng)用程序啟動。5.如權(quán)利要求1-4中任一項(xiàng)所述的嵌入式系統(tǒng)升級BOOTROM和應(yīng)用程序方法,其特征在于:所述步驟3的流程包括: 1)板卡啟動完成硬件初始化; 2)BOOTROM啟動; 3)B00TR0M讀取到升級文件,并將其放在正確的地址空間; 4 )CRJ執(zhí)行最小升級系統(tǒng)中的最小升級程序; 5)運(yùn)行升級任務(wù),從內(nèi)存中讀到升級文件的B00TR0M,寫入Flash中6)從內(nèi)存中讀到升級文件的應(yīng)用程序,寫入Flash中 7)重啟。6.如權(quán)利要求5所述的嵌入式系統(tǒng)升級BOOTROM和應(yīng)用程序方法,其特征在于:基于VxWorks系統(tǒng)制作最小升級系統(tǒng)。7.如權(quán)利要求6所述的嵌入式系統(tǒng)升級BOOTROM和應(yīng)用程序方法,其特征在于:在升級文件的0x00000位置處寫入最小升級系統(tǒng)的鏡像,長度不足0x90000的部分補(bǔ)O;在升級文件的0x90000位置處寫入BOOTROM的長度和校驗(yàn)和,然后寫入B00TR0M,長度不足OxEOOOO的部分補(bǔ)O;在升級文件的OxEOOOO位置處寫入應(yīng)用程序的長度和校驗(yàn)和,然后寫入應(yīng)用程序。8.如權(quán)利要求7所述的嵌入式系統(tǒng)升級BOOTROM和應(yīng)用程序方法,其特征在于:將升級文件放在內(nèi)存空間0x10000;升級任務(wù)從內(nèi)存OxAOOOO中讀到升級文件的BOOTROM的長度,在內(nèi)存0xA0004處讀到BOOTROM的CRC校驗(yàn)和,然后從內(nèi)存0xA0008處開始讀取指定長度的BOOTROM的內(nèi)容,計(jì)算讀取的BOOTROM內(nèi)容的CRC校驗(yàn)和,判斷計(jì)算得到的校驗(yàn)和是否與之前內(nèi)存0xA0004處讀到BOOTROM的CRC校驗(yàn)和相一致,如果一致將讀取的BOOTROM內(nèi)容寫入Flash中BOOTROM區(qū),覆蓋舊BOOTROM;升級任務(wù)從內(nèi)存OxFOOOO中讀到升級文件的應(yīng)用程序的長度,在內(nèi)存0xF0004處讀到應(yīng)用程序的CRC校驗(yàn)和,然后從內(nèi)存0xF0008處開始讀取指定長度的應(yīng)用程序的內(nèi)容,計(jì)算讀取的應(yīng)用程序內(nèi)容的CRC校驗(yàn)和,判斷計(jì)算得到的校驗(yàn)和是否與之前內(nèi)存0xF0004處讀到應(yīng)用程序的CRC校驗(yàn)和相一致,如果一致將讀取的應(yīng)用程序內(nèi)容寫入Flash中應(yīng)用程序區(qū),覆蓋舊應(yīng)用程序。
【文檔編號】G06F9/445GK105893090SQ201610196724
【公開日】2016年8月24日
【申請日】2016年3月31日
【發(fā)明人】饒俊濤, 桑子鵬, 張穎, 鐵瑩, 張傳斌, 蔣波
【申請人】武漢光迅科技股份有限公司