本發(fā)明涉及系統(tǒng)應(yīng)用升級(jí)技術(shù),尤指一種實(shí)現(xiàn)BOOTROM升級(jí)的方法及裝置。
背景技術(shù):
電子通信的系統(tǒng)應(yīng)用由于應(yīng)用場(chǎng)景的改變、功能的擴(kuò)展完善和BUG的修正等原因,需要不斷的進(jìn)行升級(jí);在系統(tǒng)應(yīng)用升級(jí)時(shí),也會(huì)對(duì)系統(tǒng)引導(dǎo)程序無(wú)盤啟動(dòng)只讀存儲(chǔ)器(BOOTROM)的升級(jí)。BOOTROM升級(jí)的可靠與否對(duì)系統(tǒng)應(yīng)用來(lái)說(shuō)十分關(guān)鍵,若升級(jí)失敗,可能會(huì)直接導(dǎo)致系統(tǒng)無(wú)法啟動(dòng)。
BOOTROM一般都存儲(chǔ)在閃存(FLASH)存儲(chǔ)器中,目前,BOOTROM的升級(jí)方法及存在的缺陷分別有:1、直接覆蓋FLASH中舊版本的BOOTROM,該方法存在的問(wèn)題是若升級(jí)失敗會(huì)直接導(dǎo)致系統(tǒng)無(wú)法啟動(dòng);2、將FLASH分成兩個(gè)分區(qū),一個(gè)區(qū)保留出廠時(shí)的BOOTROM,每次升級(jí)只升級(jí)另一個(gè)分區(qū),該方法存在的問(wèn)題是若升級(jí)失敗或系統(tǒng)遭到破壞,用戶只能把BOOTROM回退到出廠時(shí)的BOOTROM,即無(wú)法回退到升級(jí)前的BOOTROM。
技術(shù)實(shí)現(xiàn)要素:
為了解決上述技術(shù)問(wèn)題,本發(fā)明提供一種實(shí)現(xiàn)BOOTROM升級(jí)的方法及裝置,能夠在合理利用FLASH存儲(chǔ)空間前提下進(jìn)行BOOTROM升級(jí),BOOTROM升級(jí)失敗時(shí),可以重新啟動(dòng)升級(jí)前的BOOTROM。
為了達(dá)到本發(fā)明目的,本發(fā)明提供了一種實(shí)現(xiàn)BOOTROM升級(jí)的方法,包括:
當(dāng)啟動(dòng)運(yùn)行的無(wú)盤啟動(dòng)只讀存儲(chǔ)器BOOTROM在第一分區(qū)時(shí),選擇第二分區(qū)進(jìn)行BOOTROM升級(jí);
第二分區(qū)完成BOOTROM升級(jí)后,將CPU啟動(dòng)地址由原先的映射至第 一分區(qū)修改為映射至第二分區(qū),以使所述第二分區(qū)根據(jù)CPU啟動(dòng)地址的映射啟動(dòng)升級(jí)完成的BOOTROM;
所述第二分區(qū)為除當(dāng)前啟動(dòng)運(yùn)行的BOOTROM所在的第一分區(qū)以外的另一分區(qū)。
進(jìn)一步地,該方法之前還包括:
通過(guò)可編程邏輯器件CPLD為第一分區(qū)和第二分區(qū)預(yù)先設(shè)定相應(yīng)的啟動(dòng)標(biāo)識(shí)并賦值相應(yīng)的取值;以根據(jù)啟動(dòng)標(biāo)識(shí)的取值將CPU啟動(dòng)地址映射到啟動(dòng)運(yùn)行BOOTROM的所述第一分區(qū)或修改為映射至升級(jí)完成的BOOTROM的所述第二分區(qū)。
進(jìn)一步地,在選擇所述第二分區(qū)進(jìn)行BOOTROM升級(jí)時(shí),該方法還包括:
對(duì)當(dāng)前啟動(dòng)運(yùn)行的BOOTROM所在的所述第一分區(qū)進(jìn)行寫保護(hù)。
進(jìn)一步地,啟動(dòng)所述升級(jí)完成的BOOTROM失敗時(shí),該方法還包括:
重新將所述CPU啟動(dòng)地址映射至所述第一分區(qū),以選擇啟動(dòng)運(yùn)行所述第一分區(qū)的BOOTROM。
進(jìn)一步地,第一分區(qū)和第二分區(qū)為FLASH存儲(chǔ)器中存儲(chǔ)空間大小相同的分區(qū)。
另一方面,本申請(qǐng)還提供一種實(shí)現(xiàn)BOOTROM升級(jí)的裝置,包括:選擇單元,映射處理單元;其中,
選擇單元,用于當(dāng)啟動(dòng)運(yùn)行的BOOTROM在第一分區(qū)時(shí),選擇第二分區(qū)進(jìn)行BOOTROM升級(jí);
映射處理單元,用于第二分區(qū)完成BOOTROM升級(jí)后,將CPU啟動(dòng)地址由原先的映射至第一分區(qū)修改為映射至第二分區(qū),以使所述第二分區(qū)根據(jù)CPU啟動(dòng)地址的映射啟動(dòng)升級(jí)完成的BOOTROM;
所述第二分區(qū)為除當(dāng)前啟動(dòng)運(yùn)行的BOOTROM所在的第一分區(qū)以外的另一分區(qū)。
進(jìn)一步地,該裝置還包括預(yù)設(shè)單元,
用于通過(guò)可編程邏輯器件CPLD為第一分區(qū)和第二分區(qū)預(yù)先設(shè)定相應(yīng)的 啟動(dòng)標(biāo)識(shí)并賦值相應(yīng)的取值;以根據(jù)啟動(dòng)標(biāo)識(shí)的取值將CPU啟動(dòng)地址映射到啟動(dòng)運(yùn)行BOOTROM的所述第一分區(qū)或修改為映射至升級(jí)完成的BOOTROM的所述第二分區(qū)。
進(jìn)一步地,該裝置還包括寫保護(hù)單元,用于在選擇所述第二分區(qū)進(jìn)行BOOTROM升級(jí)時(shí),對(duì)當(dāng)前啟動(dòng)運(yùn)行的BOOTROM所在的所述第一分區(qū)進(jìn)行寫保護(hù);
BOOTROM升級(jí)完成后,解除寫保護(hù)。
進(jìn)一步地,映射處理單元還用于,啟動(dòng)所述升級(jí)完成的BOOTROM失敗時(shí),重新將所述CPU啟動(dòng)地址映射至所述第一分區(qū),以選擇啟動(dòng)運(yùn)行所述第一分區(qū)的BOOTROM。
進(jìn)一步地,第一分區(qū)和第二分區(qū)為FLASH存儲(chǔ)器中存儲(chǔ)空間大小相同的分區(qū)。
與現(xiàn)有技術(shù)相比,本申請(qǐng)技術(shù)方案包括:當(dāng)啟動(dòng)運(yùn)行的無(wú)盤啟動(dòng)只讀存儲(chǔ)器BOOTROM在第一分區(qū)時(shí),選擇第二分區(qū)進(jìn)行BOOTROM升級(jí);第二分區(qū)完成BOOTROM升級(jí)后,將CPU啟動(dòng)地址由原先的映射至第一分區(qū)修改為映射至第二分區(qū),以使所述第二分區(qū)根據(jù)CPU啟動(dòng)地址的映射啟動(dòng)升級(jí)完成的BOOTROM;第二分區(qū)為除當(dāng)前啟動(dòng)運(yùn)行的BOOTROM所在的第一分區(qū)以外的另一分區(qū)。本發(fā)明方法通過(guò)兩個(gè)分區(qū)進(jìn)行系統(tǒng)升級(jí),避免了FLASH存儲(chǔ)空間的浪費(fèi);
另一方面,在進(jìn)行BOOTROM升級(jí)時(shí),對(duì)啟動(dòng)運(yùn)行的BOOTROM所在分區(qū)進(jìn)行寫保護(hù),避免了升級(jí)失敗后,無(wú)法重新選擇啟動(dòng)運(yùn)行升級(jí)前的BOOTROM,提高了系統(tǒng)的可靠性。
附圖說(shuō)明
此處所說(shuō)明的附圖用來(lái)提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本發(fā)明的示意性實(shí)施例及其說(shuō)明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中:
圖1為本發(fā)明實(shí)現(xiàn)BOOTROM升級(jí)的方法的流程圖;
圖2為本發(fā)明實(shí)現(xiàn)BOOTROM升級(jí)的裝置的結(jié)構(gòu)程圖;
圖3為本發(fā)明第一實(shí)施例的方法流程圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,下文中將結(jié)合附圖對(duì)本發(fā)明的實(shí)施例進(jìn)行詳細(xì)說(shuō)明。需要說(shuō)明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互任意組合。
圖1為本發(fā)明實(shí)現(xiàn)BOOTROM升級(jí)的方法的流程圖,如圖1所示,包括:
步驟100、當(dāng)啟動(dòng)運(yùn)行的無(wú)盤啟動(dòng)只讀存儲(chǔ)器(BOOTROM)在第一分區(qū)時(shí),選擇第二分區(qū)進(jìn)行BOOTROM升級(jí);這里,第二分區(qū)為除當(dāng)前啟動(dòng)運(yùn)行的BOOTROM所在的第一分區(qū)以外的另一分區(qū)。
本發(fā)明方法之前還包括:
通過(guò)可編程邏輯器件(CPLD)為第一分區(qū)和第二分區(qū)預(yù)先設(shè)定相應(yīng)的啟動(dòng)標(biāo)識(shí)并賦值相應(yīng)的取值;以根據(jù)啟動(dòng)標(biāo)識(shí)的取值將CPU啟動(dòng)地址映射到啟動(dòng)運(yùn)行BOOTROM的第一分區(qū)或修改為映射至升級(jí)完成的BOOTROM的第二分區(qū)。
本發(fā)明方法中,第一分區(qū)和第二分區(qū)為FLASH存儲(chǔ)器中存儲(chǔ)空間大小相同的分區(qū)。
步驟101、第二分區(qū)完成BOOTROM升級(jí)后,將CPU啟動(dòng)地址由原先的映射至第一分區(qū)修改為映射至第二分區(qū),以使第二分區(qū)根據(jù)CPU啟動(dòng)地址的映射啟動(dòng)升級(jí)完成的BOOTROM。
在選擇第二分區(qū)進(jìn)行BOOTROM升級(jí)時(shí),本發(fā)明方法還包括:
對(duì)當(dāng)前啟動(dòng)運(yùn)行的BOOTROM所在的第一分區(qū)進(jìn)行寫保護(hù)。
啟動(dòng)升級(jí)完成的BOOTROM失敗時(shí),本發(fā)明方法還包括:
重新將CPU啟動(dòng)地址映射至第一分區(qū),以選擇啟動(dòng)運(yùn)行第一分區(qū)的BOOTROM。
需要說(shuō)明的是,如果第二分區(qū)啟動(dòng)成功,則啟動(dòng)運(yùn)行的分區(qū)由BOOTROM升級(jí)成功的分區(qū)替換,即完成BOOTROM升級(jí)且啟動(dòng)成功后的分區(qū)將變?yōu)榈谝环謪^(qū),原先啟動(dòng)BOOTROM的分區(qū)成為用于BOOTROM升 級(jí)的第二分區(qū)。
本發(fā)明方法通過(guò)兩個(gè)分區(qū)進(jìn)行系統(tǒng)升級(jí),避免了FLASH存儲(chǔ)空間的浪費(fèi);
另一方面,在進(jìn)行BOOTROM升級(jí)時(shí),對(duì)啟動(dòng)運(yùn)行的BOOTROM所在分區(qū)進(jìn)行寫保護(hù),避免了升級(jí)失敗后,無(wú)法重新選擇啟動(dòng)運(yùn)行升級(jí)前的BOOTROM,提高了系統(tǒng)的可靠性。
圖2為本發(fā)明實(shí)現(xiàn)BOOTROM升級(jí)的裝置的結(jié)構(gòu)程圖,如圖2所示,包括:選擇單元,映射處理單元;其中,
選擇單元,用于當(dāng)啟動(dòng)運(yùn)行的BOOTROM在第一分區(qū)時(shí),選擇第二分區(qū)進(jìn)行BOOTROM升級(jí);
映射處理單元,用于第二分區(qū)完成BOOTROM升級(jí)后,將CPU啟動(dòng)地址由原先的映射至第一分區(qū)修改為映射至第二分區(qū),以使第二分區(qū)根據(jù)CPU啟動(dòng)地址的映射啟動(dòng)升級(jí)完成的BOOTROM;
第二分區(qū)為除當(dāng)前啟動(dòng)運(yùn)行的BOOTROM所在的第一分區(qū)以外的另一分區(qū)。
本發(fā)明裝置還包括預(yù)設(shè)單元,
用于通過(guò)可編程邏輯器件CPLD為第一分區(qū)和第二分區(qū)預(yù)先設(shè)定相應(yīng)的啟動(dòng)標(biāo)識(shí)并賦值相應(yīng)的取值;以根據(jù)啟動(dòng)標(biāo)識(shí)的取值將CPU啟動(dòng)地址映射到啟動(dòng)運(yùn)行BOOTROM的第一分區(qū)或修改為映射至升級(jí)完成的BOOTROM的第二分區(qū)。
本發(fā)明裝置還包括寫保護(hù)單元,用于在選擇第二分區(qū)進(jìn)行BOOTROM升級(jí)時(shí),對(duì)當(dāng)前啟動(dòng)運(yùn)行的BOOTROM所在的第一分區(qū)進(jìn)行寫保護(hù);
BOOTROM升級(jí)完成后,解除寫保護(hù)。
映射處理單元還用于,啟動(dòng)升級(jí)完成的BOOTROM失敗時(shí),重新將CPU啟動(dòng)地址映射至第一分區(qū),以選擇啟動(dòng)運(yùn)行第一分區(qū)的BOOTROM。
第一分區(qū)和第二分區(qū)為FLASH存儲(chǔ)器中存儲(chǔ)空間大小相同的分區(qū)。
以下通過(guò)具體實(shí)施例對(duì)本發(fā)明方法進(jìn)行清楚詳細(xì)的說(shuō)明,實(shí)施例僅用于 陳述本發(fā)明,并不用于限制本發(fā)明方法的保護(hù)范圍。
實(shí)施例1
圖3為本發(fā)明第一實(shí)施例的方法流程圖,如圖3所示,包括:
步驟300、將FLASH存儲(chǔ)器分成大小相同的兩個(gè)分區(qū);其中,一個(gè)分區(qū)作為啟動(dòng)運(yùn)行BOOTROM的分區(qū),另一分區(qū)作為升級(jí)BOOTROM的分區(qū);一般的,啟動(dòng)運(yùn)行的BOOTROM分區(qū)在升級(jí)之前BOOTROM為原廠的BOOTROM,當(dāng)進(jìn)行第二次升級(jí)。
步驟301、通過(guò)可編程邏輯器件為兩個(gè)分區(qū)預(yù)先設(shè)定相應(yīng)的啟動(dòng)標(biāo)識(shí)并賦值相應(yīng)的取值,根據(jù)啟動(dòng)標(biāo)識(shí)的取值將CPU啟動(dòng)地址映射到啟動(dòng)運(yùn)行BOOTROM所在的分區(qū);
這里,升級(jí)前,將CPU啟動(dòng)地址映射到啟動(dòng)運(yùn)行BOOTROM的第一分區(qū),升級(jí)后,將CPU啟動(dòng)地址修改為映射至升級(jí)完成的BOOTROM的分區(qū)。啟動(dòng)標(biāo)識(shí)的取值可以通過(guò)一個(gè)比特BIT位表示,一般的1代表啟動(dòng)運(yùn)行該分區(qū)的BOOTROM,0代表該分區(qū)用于BOOTROM的升級(jí)。
需要說(shuō)明的是,這里,進(jìn)行CPU啟動(dòng)地址修改是根據(jù)啟動(dòng)標(biāo)識(shí)的取值進(jìn)行,即啟動(dòng)標(biāo)識(shí)取值修改時(shí),進(jìn)行CPU啟動(dòng)地址映射的修改。
步驟302、當(dāng)啟動(dòng)運(yùn)行的BOOTROM在第一分區(qū)時(shí),選擇第二分區(qū)進(jìn)行BOOTROM升級(jí);這里,第一分區(qū)為當(dāng)前運(yùn)行的BOOTROM所在的分區(qū)。在升級(jí)時(shí),本實(shí)施例對(duì)第一分區(qū)進(jìn)行寫保護(hù),即第一分區(qū)的數(shù)據(jù)寫入地址禁止數(shù)據(jù)寫入,完成BOOTROM升級(jí)后,寫保護(hù)解除。
步驟303、第二分區(qū)完成BOOTROM升級(jí)后,將CPU啟動(dòng)地址由原先的映射至第一分區(qū)修改為映射至第二分區(qū),以使第二分區(qū)根據(jù)CPU啟動(dòng)地址的映射啟動(dòng)升級(jí)完成的BOOTROM。
若升級(jí)完成的BOOTROM啟動(dòng)成功,執(zhí)行步驟304,;若失敗,執(zhí)行步驟305。
步驟304、升級(jí)完成的BOOTROM啟動(dòng)成功后,CPU啟動(dòng)地址在下一次升級(jí)成功之前保持映射至升級(jí)完成的BOOTROM所在的分區(qū);這里,相當(dāng)于升級(jí)完成并啟動(dòng)成功后,該分區(qū)默認(rèn)作為第一分區(qū)使用。
步驟305、升級(jí)完成的BOOTROM啟動(dòng)失敗時(shí),重新將CPU啟動(dòng)地址映射至先前啟動(dòng)BOOTROM的分區(qū),以選擇啟動(dòng)運(yùn)行該分區(qū)的BOOTROM;即啟動(dòng)標(biāo)識(shí)的取值在升級(jí)完成的BOOTROM啟動(dòng)失敗,重新修改至原先的取值,第一分區(qū)不做更改。
綜上,本實(shí)施例通過(guò)將FLASH存儲(chǔ)器劃分為兩個(gè)分區(qū),且可編程邏輯器件通過(guò)自動(dòng)讀、寫啟動(dòng)標(biāo)識(shí)的取值,使得BOOTROM升級(jí)在兩個(gè)分區(qū)進(jìn)行輪換進(jìn)行,并將當(dāng)前運(yùn)行的分區(qū)進(jìn)行寫保護(hù),節(jié)約FLASH空間成本,提高了BOOTROM升級(jí)的可靠性。
雖然本發(fā)明所揭露的實(shí)施方式如上,但所述的內(nèi)容僅為便于理解本發(fā)明而采用的實(shí)施方式,并非用以限定本發(fā)明。任何本發(fā)明所屬領(lǐng)域內(nèi)的技術(shù)人員,在不脫離本發(fā)明所揭露的精神和范圍的前提下,可以在實(shí)施的形式及細(xì)節(jié)上進(jìn)行任何的修改與變化,但本發(fā)明的專利保護(hù)范圍,仍須以所附的權(quán)利要求書所界定的范圍為準(zhǔn)。