專利名稱:基于mtd分區(qū)的軟件升級(jí)方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及軟件升級(jí)技術(shù),具體地說,是涉及一種基于MTD分區(qū)的軟件升級(jí)方法和裝置。
背景技術(shù):
MTD (memory technology device內(nèi)存技術(shù)設(shè)備)是用于訪問存儲(chǔ)器設(shè)備(如Rom)的Linux系統(tǒng)的子系統(tǒng),Iinux系統(tǒng)中必須通過MTD來讀寫ROM等存儲(chǔ)器。在基于Iinux系統(tǒng)的機(jī)頂盒等產(chǎn)品中,作為存儲(chǔ)器的flash (最常見的ROM)都被分成若干個(gè)MTD分區(qū),每個(gè)分區(qū)占用一部分flash空間,用來存放獨(dú)立的程序,完成特定功能。flash的具體分區(qū)情況,包括各分區(qū)的分區(qū)號(hào)、分區(qū)起始地址、分區(qū)大小等通過MTD分區(qū)描述信息來描述。由系統(tǒng)物理特性所決定,在Iinux系統(tǒng)下,只能通過MTD操作讀寫數(shù)據(jù),而不能直接訪問flash。以機(jī)頂盒產(chǎn)品為例,目前,基于Iinux系統(tǒng)的機(jī)頂盒,其升級(jí)過程通常無法完成MTD分區(qū)描述信息的升級(jí),原因在于
一方面,MTD分區(qū)數(shù)據(jù)是在啟動(dòng)時(shí)由uboot通過特定參數(shù)寫入到內(nèi)核中的,在整個(gè)程序運(yùn)行期間,MTD分區(qū)不能調(diào)整。如果要更改特定參數(shù),必須要更改該參數(shù)所在的一個(gè)存儲(chǔ)分區(qū),而由于現(xiàn)有技術(shù)中該分區(qū)都是沒有備份的,對(duì)其升級(jí)將會(huì)存在風(fēng)險(xiǎn),如果升級(jí)失敗會(huì)導(dǎo)致整個(gè)系統(tǒng)無法啟動(dòng)。另一方面,Iinux系統(tǒng)下進(jìn)行的數(shù)據(jù)升級(jí)更新都是基于MTD分區(qū)的,且只能通過MTD進(jìn)行讀寫,其擦除分區(qū)和寫入數(shù)據(jù)都必須在指定分區(qū)內(nèi)操作。如果要進(jìn)行數(shù)據(jù)升級(jí)的某個(gè)MTD分區(qū)和原有MTD分區(qū)不一致,單獨(dú)使用基于MTD的指令不能完成軟件升級(jí)需求。由于無法對(duì)MTD分區(qū)描述信息進(jìn)行升級(jí),因而不能對(duì)flash的MTD分區(qū)進(jìn)行調(diào)整,致使存儲(chǔ)器分區(qū)靈活性較差,升級(jí)實(shí)用性不強(qiáng),不利于產(chǎn)品的靈活升級(jí)和產(chǎn)品周期維護(hù)成本的降低。
發(fā)明內(nèi)容
本發(fā)明針對(duì)現(xiàn)有技術(shù)中MTD分區(qū)描述信息不能升級(jí)而存在的上述缺點(diǎn)提供了一種基于MTD分區(qū)的軟件升級(jí)方法和裝置,應(yīng)用該方法能夠在升級(jí)過程中對(duì)MTD分區(qū)描述信息進(jìn)行升級(jí),從而提高了存儲(chǔ)器MTD分區(qū)的可調(diào)性和使用靈活性。為實(shí)現(xiàn)上述發(fā)明目的,本發(fā)明提供的升級(jí)方法采用下述技術(shù)方案予以實(shí)現(xiàn)
一種基于MTD分區(qū)的軟件升級(jí)方法,在基于MTD分區(qū)的存儲(chǔ)器中預(yù)先設(shè)置至少兩個(gè)分區(qū),分別存儲(chǔ)相同內(nèi)容的、升級(jí)之前的原MTD分區(qū)描述信息,所述升級(jí)方法包括下述步驟al、將預(yù)升級(jí)MTD分區(qū)描述信息和升級(jí)后的每個(gè)MTD分區(qū)中的升級(jí)數(shù)據(jù)添加到軟件升級(jí)文件中,預(yù)升級(jí)MTD分區(qū)描述信息對(duì)應(yīng)的升級(jí)后的MTD分區(qū)中包括有至少兩個(gè)用來存儲(chǔ)預(yù)升級(jí)MTD分區(qū)描述信息的MTD分區(qū);
a2、升級(jí)過程中讀取軟件升級(jí)文件,解析出預(yù)升級(jí)MTD分區(qū)描述信息和升級(jí)數(shù)據(jù);a3、讀取存儲(chǔ)器的原MTD分區(qū)描述信息,根據(jù)原MTD分區(qū)描述信息和預(yù)升級(jí)MTD分區(qū)描述信息中的MTD分區(qū)對(duì)應(yīng)關(guān)系將預(yù)升級(jí)MTD分區(qū)描述信息和升級(jí)數(shù)據(jù)依次寫入至相應(yīng)存儲(chǔ)位置;
a4、啟動(dòng)系統(tǒng)的uboot,讀取存儲(chǔ)在存儲(chǔ)器中的預(yù)升級(jí)MTD分區(qū)描述信息,組裝MTD分區(qū)描述信息寫入?yún)?shù),并將該參數(shù)寫入到系統(tǒng)內(nèi)核中。如上所述的方法,所述原MTD分區(qū)描述信息優(yōu)選以XML文件形式存儲(chǔ)在存儲(chǔ)器中,所述預(yù)升級(jí)分區(qū)描述信息優(yōu)選以XML文件形式添加到軟件升級(jí)文件中。如上所述的方法,為減少對(duì)存儲(chǔ)器存儲(chǔ)區(qū)域的占用,在基于MTD分區(qū)的存儲(chǔ)器中預(yù)先設(shè)置有兩個(gè)存儲(chǔ)所述原MTD分區(qū)描述信息的分區(qū);所述預(yù)升級(jí)分區(qū)描述信息對(duì)應(yīng)的升級(jí)后的MTD分區(qū)中包括有兩個(gè)用來存儲(chǔ)預(yù)升級(jí)MTD分區(qū)描述信息的MTD分區(qū)。如上所述的方法,為簡化數(shù)據(jù)寫入過程、提高升級(jí)速度,所述步驟a3具體包括下 述子步驟
a31、將預(yù)升級(jí)MTD分區(qū)描述信息和升級(jí)數(shù)據(jù)分別分割成若干個(gè)指定大小的子塊;a32、根據(jù)預(yù)升級(jí)MTD分區(qū)描述信息中的MTD分區(qū)起始地址和當(dāng)前要寫入的子塊在其所屬預(yù)升級(jí)MTD分區(qū)描述信息或升級(jí)數(shù)據(jù)的所有子塊中的位置計(jì)算子塊的起始地址;
a33、讀取所述原MTD分區(qū)描述信息,根據(jù)該原MTD分區(qū)描述信息和子塊的起始地址獲取該子塊所對(duì)應(yīng)的原MTD分區(qū)的起始地址和偏移地址;
a34、根據(jù)原MTD分區(qū)的起始地址和偏移地址擦除與子塊大小相等的存儲(chǔ)區(qū)域; a35、將子塊的數(shù)據(jù)寫入到擦除后的存儲(chǔ)區(qū)域中。如上所述的方法,所述子塊的大小優(yōu)選與所述基于MTD分區(qū)的存儲(chǔ)器的一個(gè)擦除操作單元的大小相等。如上所述的方法,為簡化數(shù)據(jù)結(jié)構(gòu),便于數(shù)據(jù)的傳輸和正確解析,所述軟件升級(jí)文件包括有依次存儲(chǔ)的預(yù)升級(jí)MTD分區(qū)描述信息校驗(yàn)字段、預(yù)升級(jí)MTD分區(qū)描述信息長度字段、預(yù)升級(jí)MTD分區(qū)描述信息、升級(jí)后的每個(gè)MTD分區(qū)中的升級(jí)數(shù)據(jù)校驗(yàn)字段、升級(jí)數(shù)據(jù)的長度字段及升級(jí)數(shù)據(jù)。優(yōu)選的,所述預(yù)升級(jí)MTD分區(qū)描述信息校驗(yàn)字段和所述升級(jí)數(shù)據(jù)校驗(yàn)字段均為CRC校驗(yàn)字段。為實(shí)現(xiàn)前述發(fā)明目的,本發(fā)明提供的升級(jí)裝置采用下述技術(shù)方案來實(shí)現(xiàn)
一種基于MTD分區(qū)的軟件升級(jí)裝置,該裝置包括
原MTD分區(qū)描述信息存儲(chǔ)單元,用來存儲(chǔ)原MTD分區(qū)描述信息;
至少一個(gè)原MTD分區(qū)描述信息備份存儲(chǔ)單元,作為備份存儲(chǔ)單元,存儲(chǔ)與原MTD分區(qū)描述信息存儲(chǔ)單元相同內(nèi)容的原MTD分區(qū)描述信息;
軟件升級(jí)文件接收和存儲(chǔ)單元,用來接收外部傳輸?shù)能浖?jí)文件并存儲(chǔ);
預(yù)升級(jí)MTD分區(qū)描述信息解析單元,與軟件升級(jí)文件接收和存儲(chǔ)單元相連接,用來從軟件升級(jí)文件中解析出預(yù)升級(jí)MTD分區(qū)描述信息;
升級(jí)數(shù)據(jù)解析單元,與軟件升級(jí)文件接收和存儲(chǔ)單元相連接,用來從軟件升級(jí)文件中解析出升級(jí)后的每個(gè)MTD分區(qū)中的升級(jí)數(shù)據(jù);
數(shù)據(jù)寫入單元,與預(yù)升級(jí)MTD分區(qū)描述信息解析單元、升級(jí)數(shù)據(jù)解析單元及原MTD分區(qū)描述信息存儲(chǔ)單元和原MTD分區(qū)描述信息備份存儲(chǔ)單元相連接,用來根據(jù)原MTD分區(qū)描述信息和預(yù)升級(jí)MTD分區(qū)描述信息中的MTD分區(qū)對(duì)應(yīng)關(guān)系將預(yù)升級(jí)MTD分區(qū)描述信息和升級(jí)數(shù)據(jù)依次寫入至相應(yīng)存儲(chǔ)位置;
uboot處理單元,用來執(zhí)行uboot有關(guān)工作,并將相關(guān)寫入?yún)?shù)寫入到系統(tǒng)內(nèi)核中;寫入?yún)?shù)組裝單元,與預(yù)升級(jí)MTD分區(qū)描述信息解析單元和uboot處理單元相連接,用來組裝MTD分區(qū)描述信息寫入?yún)?shù),并將該參數(shù)傳輸至uboot處理單元。如上所述的裝置,所述原MTD分區(qū)描述信息存儲(chǔ)單元及所述原MTD分區(qū)描述信息備份存儲(chǔ)單元中優(yōu)選以XML文件形式存儲(chǔ)MTD分區(qū)描述信息;所述預(yù)升級(jí)MTD分區(qū)描述信
息優(yōu)選以XML文件形式存儲(chǔ)在所述軟件升級(jí)文件中。如上所述的裝置,為簡化升級(jí)數(shù)據(jù)寫入過程、提高升級(jí)速度,所述數(shù)據(jù)寫入單元包括下述子單元
子塊分割子單元,用來將預(yù)升級(jí)MTD分區(qū)描述信息和升級(jí)數(shù)據(jù)分別分割成若干個(gè)指定大小的子塊;
子塊起始地址確定子單元,與所述預(yù)升級(jí)MTD分區(qū)描述信息解析單元和子塊分割子單元相連接,用來根據(jù)預(yù)升級(jí)MTD分區(qū)描述信息中的MTD分區(qū)起始地址和當(dāng)前要寫入的子塊在其所屬預(yù)升級(jí)MTD分區(qū)描述信息或升級(jí)數(shù)據(jù)的所有子塊中的位置計(jì)算子塊的起始地址;子塊映射地址確定子單元,與子塊起始地址確定子單元和所述原MTD分區(qū)描述信息存儲(chǔ)單元及原MTD分區(qū)描述信息備份存儲(chǔ)單元相連接,根據(jù)原MTD分區(qū)描述信息和子塊的起始地址獲取該子塊所對(duì)應(yīng)的原MTD分區(qū)的起始地址和偏移地址,作為子塊的映射地址;數(shù)據(jù)擦除子單元,與子塊映射地址確定子單元相連接,用來根據(jù)原MTD分區(qū)的起始地址和偏移地址擦除與子塊大小相等的存儲(chǔ)區(qū)域中的數(shù)據(jù);
子塊數(shù)據(jù)寫入子單元,與子塊映射地址確定子單元和子塊分割子單元相連接,用來將子塊的數(shù)據(jù)寫入到擦除后的存儲(chǔ)區(qū)域中。與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)和積極效果是
I、通過在存儲(chǔ)器中選擇兩個(gè)分區(qū)分別存儲(chǔ)相同內(nèi)容的MTD分區(qū)描述信息,形成描述信息的有效備份,然后在軟件升級(jí)升級(jí)過程中以升級(jí)方式寫入預(yù)升級(jí)的MTD分區(qū)描述信息,在下次系統(tǒng)的uboot啟動(dòng)時(shí),根據(jù)預(yù)留分區(qū)的MTD分區(qū)描述信息重新組裝寫入?yún)?shù)寫入到系統(tǒng)內(nèi)核中,實(shí)現(xiàn)MTD分區(qū)描述信息的升級(jí),提高了存儲(chǔ)器MTD分區(qū)的可調(diào)性和使用靈活性。而且,由于有備份信息存在,即使升級(jí)過程中斷電也不會(huì)丟失數(shù)據(jù),確保了在軟件升級(jí)過程中升級(jí)MTD分區(qū)描述信息的安全性。2、在對(duì)升級(jí)后的MTD分區(qū)中寫入升級(jí)數(shù)據(jù)及預(yù)升級(jí)MTD分區(qū)描述信息時(shí),通過將要寫入的數(shù)據(jù)分成多個(gè)子塊,然后將子塊映射到原MTD分區(qū)中依次寫入,確保子塊數(shù)據(jù)在同一個(gè)原分區(qū)中寫入,不會(huì)出現(xiàn)跨越原分區(qū)的現(xiàn)象,提高了數(shù)據(jù)寫入的準(zhǔn)確性和寫入速度。結(jié)合附圖閱讀本發(fā)明的具體實(shí)施方式
后,本發(fā)明的其他特點(diǎn)和優(yōu)點(diǎn)將變得更加清
λ·Μ
/E. ο
圖I是本發(fā)明基于MTD分區(qū)的軟件升級(jí)方法一個(gè)實(shí)施例的主流程 圖2是圖I實(shí)施例中根據(jù)升級(jí)后的MTD分區(qū)寫入升級(jí)數(shù)據(jù)的流程 圖3是本發(fā)明基于MTD分區(qū)的軟件升級(jí)裝置一個(gè)實(shí)施例的結(jié)構(gòu)框圖。
具體實(shí)施例方式下面結(jié)合附圖和具體實(shí)施方式
對(duì)本發(fā)明的技術(shù)方案作進(jìn)一步詳細(xì)的說明。請(qǐng)參考圖I和圖2所示的本發(fā)明基于MTD分區(qū)的軟件升級(jí)方法一個(gè)實(shí)施例的流程圖,其中,圖I是該實(shí)施例的主流程圖,圖2是根據(jù)升級(jí)后的MTD分區(qū)寫入升級(jí)數(shù)據(jù)的流程圖。 該實(shí)施例以具有Iinux操作系統(tǒng)的機(jī)頂盒產(chǎn)品軟件升級(jí)為例,機(jī)頂盒的flash存儲(chǔ)器被劃分為多個(gè)MTD分區(qū),除了存儲(chǔ)MTD分區(qū)描述信息和功能軟件程序之外,還有一些預(yù)留的、未定義的MTD分區(qū)。應(yīng)用該實(shí)施例的方法對(duì)機(jī)頂盒進(jìn)行軟件升級(jí)時(shí),除了能夠進(jìn)行常規(guī)的功能軟件程序的升級(jí)數(shù)據(jù)升級(jí)之外,還可以在升級(jí)過程中實(shí)現(xiàn)對(duì)MTD分區(qū)描述信息的升級(jí)。請(qǐng)參考圖1,該實(shí)施例同時(shí)實(shí)現(xiàn)升級(jí)數(shù)據(jù)和MTD分區(qū)描述信息升級(jí)的具體過程如下
步驟101:流程開始。步驟102 :在基于MTD分區(qū)的flash存儲(chǔ)器中選擇兩個(gè)預(yù)留分區(qū)。這兩個(gè)預(yù)留分區(qū)將以XML文件形式存儲(chǔ)升級(jí)之前的原MTD分區(qū)描述信息。且這兩個(gè)預(yù)留分區(qū)中存儲(chǔ)的文件內(nèi)容相同,也即有一個(gè)為備份分區(qū),以實(shí)現(xiàn)MTD分區(qū)描述信息的有效備份。原MTD分區(qū)描述信息一般包括有分區(qū)號(hào)、分區(qū)起始地址和分區(qū)大小等字段內(nèi)容。步驟103 :將預(yù)升級(jí)MTD分區(qū)描述信息以文件形式添加到軟件升級(jí)文件中,與升級(jí)數(shù)據(jù)構(gòu)成軟件升級(jí)文件。預(yù)升級(jí)MTD分區(qū)描述信息也以XML文件形式編輯,用來描述預(yù)升級(jí)MTD分區(qū)信息,包括有預(yù)升級(jí)的MTD分區(qū)的分區(qū)號(hào)、分區(qū)起始地址、分區(qū)大小等信息。該預(yù)升級(jí)MTD分區(qū)描述信息與升級(jí)后的每個(gè)MTD分區(qū)中的升級(jí)數(shù)據(jù)按照一定的數(shù)據(jù)格式進(jìn)行組裝,形成軟件升級(jí)文件。舉例來說,可以將預(yù)升級(jí)MTD分區(qū)描述信息文件放到最前面,以便于方便地獲取至|J。具體組織格式為將預(yù)升級(jí)MTD分區(qū)描述信息校驗(yàn)字段、預(yù)升級(jí)MTD分區(qū)描述信息長度字段、預(yù)升級(jí)MTD分區(qū)描述信息、升級(jí)后的每個(gè)MTD分區(qū)中的升級(jí)數(shù)據(jù)校驗(yàn)字段、升級(jí)數(shù)據(jù)的長度字段及升級(jí)數(shù)據(jù)從頭開始依次組裝。若有多個(gè)升級(jí)數(shù)據(jù),則先組裝第一個(gè)升級(jí)數(shù)據(jù)的校驗(yàn)字段、長度字段和升級(jí)數(shù)據(jù),然后再組裝其他升級(jí)數(shù)據(jù)的校驗(yàn)字段、長度字段和升級(jí)數(shù)據(jù)。按照這種特定的數(shù)據(jù)格式形成軟件升級(jí)文件之后,軟件升級(jí)程序可以方便地從軟件升級(jí)文件中獲取到所需的MTD分區(qū)描述信息文件和該文件所描述的每個(gè)升級(jí)數(shù)據(jù)。其中,預(yù)升級(jí)的MTD分區(qū)描述信息文件的校驗(yàn)字段和所述升級(jí)數(shù)據(jù)校驗(yàn)字段均采用CRC校驗(yàn)字段。而且,與步驟102中升級(jí)之前的原MTD分區(qū)描述信息的備份存儲(chǔ)相對(duì)應(yīng),預(yù)升級(jí)MTD分區(qū)描述信息對(duì)應(yīng)的升級(jí)后的MTD分區(qū)中包括有兩個(gè)用來存儲(chǔ)預(yù)升級(jí)MTD分區(qū)描述信息的MTD分區(qū)。步驟104 :機(jī)頂盒Iinux系統(tǒng)進(jìn)入軟件升級(jí)過程,讀取軟件升級(jí)文件。該過程的具體實(shí)現(xiàn)為現(xiàn)有技術(shù),在此不作具體闡述。步驟105 :從讀取到的軟件升級(jí)文件中解析出預(yù)升級(jí)MTD分區(qū)描述信息和升級(jí)數(shù)據(jù)。步驟106 :將預(yù)升級(jí)MTD分區(qū)描述信息寫入到升級(jí)后的MTD分區(qū)。步驟107 :將升級(jí)數(shù)據(jù)寫入到升級(jí)后的MTD分區(qū)內(nèi)。預(yù)升級(jí)MTD分區(qū)描述信息將作為升級(jí)數(shù)據(jù)的一種,與其他軟件升級(jí)數(shù)據(jù)等一起寫入到存儲(chǔ)器相應(yīng)存儲(chǔ)位置。在寫入時(shí),將讀取存儲(chǔ)器的原MTD分區(qū)描述信息,根據(jù)原MTD分區(qū)描述信息和預(yù)升級(jí)MTD分區(qū)描述信息中的MTD分區(qū)對(duì)應(yīng)關(guān)系將預(yù)升級(jí)MTD分區(qū)描述信息和升級(jí)數(shù)據(jù)依次寫入至相應(yīng)存儲(chǔ)位置。升級(jí)數(shù)據(jù)可以通過MTD命令寫入到由預(yù)升級(jí)的MTD分區(qū)描述信息所對(duì)應(yīng)的升級(jí)后的MTD分區(qū)內(nèi)。具體的一個(gè)實(shí)現(xiàn)過程請(qǐng)參考圖2及下述對(duì)圖2的描述。在該實(shí)施例中,預(yù)升級(jí)MTD分區(qū)描述信息會(huì)依次寫入到存儲(chǔ)器中的兩個(gè)分區(qū)中,·且一個(gè)分區(qū)寫完之后才再寫入到另一個(gè)分區(qū)。因此,即使在寫入過程中斷電,也總能保證至少有一個(gè)分區(qū)內(nèi)存儲(chǔ)有完整的MTD分區(qū)描述信息文件。不管這個(gè)完整的MTD分區(qū)描述信息是升級(jí)之前的信息還是升級(jí)之后的信息,均能確保操作系統(tǒng)能夠正常啟動(dòng),保證了升級(jí)可靠性。需要說明的是,寫入預(yù)升級(jí)MTD分區(qū)描述信息文件的步驟106和寫入升級(jí)數(shù)據(jù)的步驟107不一定按照先步驟106再步驟107的順序,也可以是先寫入升級(jí)數(shù)據(jù)、再寫入MTD分區(qū)描述信息,即先步驟107再步驟106,或者兩部分交叉寫入。步驟108 :啟動(dòng)機(jī)頂盒系統(tǒng)的uboot,讀取已經(jīng)存儲(chǔ)在存儲(chǔ)器中的預(yù)升級(jí)MTD分區(qū)描述信息,組成MTD分區(qū)描述信息寫入?yún)?shù)。由于MTD分區(qū)描述信息是在機(jī)頂盒操作系統(tǒng)uboot啟動(dòng)時(shí)通過寫入?yún)?shù)寫入到內(nèi)核中去的,所以,在將預(yù)升級(jí)MTD分區(qū)描述信息寫入到相應(yīng)升級(jí)后的MTD分區(qū)中之后,如果沒有重新啟動(dòng)機(jī)頂盒,系統(tǒng)MTD分區(qū)描述信息并不會(huì)升級(jí)。等到升級(jí)過程結(jié)束,重新啟動(dòng)機(jī)頂盒的uboot之后,先讀取已經(jīng)存儲(chǔ)在存儲(chǔ)器中的預(yù)升級(jí)MTD分區(qū)描述信息、也即升級(jí)之后的MTD分區(qū)描述信息;然后,利用升級(jí)之后的MTD分區(qū)描述信息、按照寫入?yún)?shù)的格式重新組裝MTD分區(qū)描述信息寫入?yún)?shù)。當(dāng)然,如果MTD分區(qū)描述信息未升級(jí),則uboot啟動(dòng)后,讀取的是預(yù)留分區(qū)中的原MTD分區(qū)描述信息,仍然按照原分區(qū)描述信息對(duì)存儲(chǔ)器進(jìn)行MTD分區(qū)。步驟109 uboot將寫入?yún)?shù)寫入到系統(tǒng)內(nèi)核中。由于寫入?yún)?shù)是由升級(jí)后的MTD分區(qū)描述信息構(gòu)成的,因此,實(shí)現(xiàn)了對(duì)MTD分區(qū)描述信息的升級(jí)。升級(jí)之后,flash存儲(chǔ)器的MTD分區(qū)數(shù)量和大小將按照新的分區(qū)描述信息來劃分,從而提高了存儲(chǔ)器MTD分區(qū)的可調(diào)性和使用靈活性。而且,在完成MTD分區(qū)描述信息的升級(jí)之后,預(yù)升級(jí)MTD分區(qū)描述信息將變?yōu)樵璏TD分區(qū)描述信息而在存儲(chǔ)器中備份存儲(chǔ)。如上所述,由于升級(jí)之前的原MTD分區(qū)個(gè)數(shù)、大小與升級(jí)之后的MTD分區(qū)個(gè)數(shù)和大小可能都不相同,升級(jí)后的一個(gè)MTD分區(qū)可能跨越原來的多個(gè)MTD分區(qū)。在機(jī)頂盒uboot重啟之前的軟件升級(jí)過程中,要求升級(jí)數(shù)據(jù)(包括預(yù)升級(jí)MTD分區(qū)描述信息)按照升級(jí)后的MTD分區(qū)進(jìn)行寫入存儲(chǔ)。但由于實(shí)際MTD分區(qū)還沒有變化,因此,升級(jí)數(shù)據(jù)要寫入的、升級(jí)后的分區(qū)的起始地址和結(jié)束地址不一定在原來某一個(gè)分區(qū)內(nèi)。而又由于基于MTD分區(qū)的flash又是按照分區(qū)進(jìn)行數(shù)據(jù)的讀寫操作,所以,如果直接使用MTD命令完成升級(jí)數(shù)據(jù)的寫入將會(huì)比較復(fù)雜,導(dǎo)致升級(jí)速度較慢。為解決該問題,該實(shí)施例結(jié)合flash存儲(chǔ)器是以塊(block,一般為256K個(gè)字節(jié))作為擦除操作單元、而MTD分區(qū)的大小必須是flash塊的整數(shù)倍、分區(qū)起始地址是flash某個(gè)塊的起始地址的現(xiàn)狀,采用了將要存儲(chǔ)的升級(jí)數(shù)據(jù)根據(jù)flash擦除操作單元的塊的大小進(jìn)行分割的升級(jí)數(shù)據(jù)寫入方法,以保證分割后的數(shù)據(jù)一定是在一個(gè)固定的原MTD分區(qū)內(nèi),不會(huì)出現(xiàn)跨原分區(qū)寫入的情況,提高了數(shù)據(jù)寫入速度。具體實(shí)現(xiàn)過程請(qǐng)參考圖2所示。如圖2所示,采用M TD分區(qū)和數(shù)據(jù)分割實(shí)現(xiàn)升級(jí)數(shù)據(jù)寫入的過程如下
步驟21 :開始升級(jí)。步驟22 :從軟件升級(jí)文件中解析出預(yù)升級(jí)MTD分區(qū)描述信息。具體來說,是從軟件升級(jí)文件中的MTD分區(qū)描述信息文件中解析出MTD分區(qū)描述信息。步驟23 :根據(jù)預(yù)升級(jí)MTD分區(qū)描述信息獲取到升級(jí)后的MTD分區(qū)Y0到Y(jié)m共m個(gè)MTD分區(qū),并從軟件升級(jí)文件中獲取每個(gè)分區(qū)所對(duì)應(yīng)的升級(jí)數(shù)據(jù)。設(shè)置一個(gè)變量M,賦初值為O。步驟24:對(duì)Ym分區(qū)進(jìn)行數(shù)據(jù)升級(jí)。這里,以Ym代表從Y。到Y(jié)m的一個(gè)分區(qū),M=0,1,也即從分區(qū)Y。開始,依次對(duì)m個(gè)MTD分區(qū)進(jìn)行數(shù)據(jù)升級(jí)。具體升級(jí)過程為步驟241至步驟244的第②部分流程所示。步驟25 :判斷所有MTD分區(qū)是否都升級(jí)完畢。若是,執(zhí)行步驟26 ;若否,將變量M加1,再轉(zhuǎn)至步驟24,對(duì)下一個(gè)分區(qū)進(jìn)行數(shù)據(jù)升級(jí)。在該實(shí)施例中,由于變量M每升級(jí)完一個(gè)分區(qū),均會(huì)自動(dòng)加1,所以,判斷所有MTD分區(qū)均升級(jí)完畢的依據(jù)是變量M是否等于m。若是,說明所有m個(gè)分區(qū)均升級(jí)完畢;若皿小于m,說明還有分區(qū)未升級(jí),則繼續(xù)執(zhí)行升級(jí)過程。步驟26:在所有分區(qū)升級(jí)完畢后,結(jié)束升級(jí)數(shù)據(jù)的寫入流程.
以分區(qū)Ym為例,對(duì)該分區(qū)寫入數(shù)據(jù)、實(shí)現(xiàn)數(shù)據(jù)升級(jí)的過程為
步驟241 :將Ym分區(qū)中要存儲(chǔ)的數(shù)據(jù)分割成大小為256K個(gè)字節(jié)的x個(gè)子塊Ym到Y(jié)M_X。其中,256K個(gè)字節(jié)是flash存儲(chǔ)器一個(gè)擦除操作單元的大小。然后,設(shè)置一個(gè)變量X,賦初值為O。步驟242 :處理YM_X子塊的數(shù)據(jù)升級(jí)。這里,以YM_X代表從Yshi到Y(jié)M_X中的一個(gè)子塊,其中,X=O,I,…X。也即從Ym開始,依次對(duì)X個(gè)子塊分別進(jìn)行數(shù)據(jù)的寫入升級(jí)。每個(gè)子塊具體寫入數(shù)據(jù)的過程參見步驟2421至步驟2426的第③部分流程所示。步驟243 :判斷Ym分區(qū)中要存儲(chǔ)的各子塊是否均升級(jí)完畢。若是,執(zhí)行步驟244 ;否則,將X加1,轉(zhuǎn)至步驟242,繼續(xù)升級(jí)下一個(gè)子塊數(shù)據(jù),直至所有的子塊數(shù)據(jù)均升級(jí)完畢。在該實(shí)施例中,由于每升級(jí)完一個(gè)子塊,變量X均會(huì)自動(dòng)加1,所以,判斷所有子塊均升級(jí)完畢的依據(jù)是變量X是否等于X。若是,說明所有X個(gè)子塊均升級(jí)完畢;若夂小于X,說明還有子塊未寫入到分區(qū)中,則繼續(xù)執(zhí)行子塊數(shù)據(jù)的寫入過程。步驟244 :在MTD分區(qū)Ym中的所有子塊均寫入到相應(yīng)的分區(qū)中之后,Ym分區(qū)數(shù)據(jù)升級(jí)完成。步驟242中完成子塊YM_X數(shù)據(jù)升級(jí)的具體步驟如下步驟2421 :計(jì)算子塊YM_X的起始地址。在該實(shí)施例中,由于將MTD分區(qū)Ym中的所有升級(jí)數(shù)據(jù)分割成X個(gè)大小均為256KB大小的子塊,所以,第X個(gè)子塊Ym在整個(gè)分區(qū)中的起始地址與分區(qū)Ym的起始地址和該子塊在該分區(qū)內(nèi)所有子塊中的位置有關(guān)系。具體來說,當(dāng)前第X個(gè)子塊YM_X的起始地址應(yīng)該是(分區(qū)Ym的起始地址+256K * X)。其中,分區(qū)Ym的起始地址可以從MTD分區(qū)描述信息中獲得,因此,子塊Ym的起始地址能夠獲知。步驟2422 :根據(jù)預(yù)留分區(qū)內(nèi)升級(jí)之前的MTD分區(qū)描述信息獲取當(dāng)前子塊YM_X對(duì)應(yīng)的原始分區(qū)的起始地址和偏移地址。如前所述,由于要寫入的子塊YM_X的數(shù)據(jù)是升級(jí)之后的MTD分區(qū)Ym中的數(shù)據(jù),而在系統(tǒng)重啟之前,當(dāng)前flash的MTD分區(qū)描述信息仍然是升級(jí)之前的原MTD分區(qū)描述信息,如果采用MTD指令寫入子塊數(shù)據(jù),指令中的起始地址和偏移地址仍然是原MTD分區(qū)描述信息中的地址。因此,為方便、準(zhǔn)確地將升級(jí)數(shù)據(jù)寫入到升級(jí)后的MTD分區(qū)Ym中,需要對(duì)升級(jí)后 的MTD分區(qū)Ym與升級(jí)前的原MTD分區(qū)描述信息作地址映射。具體來說,是根據(jù)步驟2421中所獲得的子塊Ym的起始地址,找到該起始地址在升級(jí)之前的原MTD分區(qū)描述信息中相對(duì)應(yīng)的原始分區(qū)的起始地址和偏移地址。在找到相對(duì)應(yīng)的起始地址和偏移地址之后,就可以直接采用MTD指令進(jìn)行擦除和寫操作。步驟2423 :根據(jù)原分區(qū)起始地址和偏移地址擦除相應(yīng)存儲(chǔ)區(qū)域的數(shù)據(jù)。而且,所擦除的MTD分區(qū)的大小與待寫入的子塊YM_X的數(shù)據(jù)大小是相等的。 步驟2424 :讀取子塊YM_X對(duì)應(yīng)的升級(jí)數(shù)據(jù)。步驟2425 :將子塊數(shù)據(jù)寫入到擦除后的存儲(chǔ)區(qū)域中。步驟2426 :YM_X子塊寫入完成。通過采用步驟2421至步驟2426的子塊數(shù)據(jù)寫入過程,既能保證分區(qū)擦除和數(shù)據(jù)寫入過程均是針對(duì)升級(jí)之前的同一個(gè)MTD分區(qū)內(nèi)進(jìn)行的操作,且寫入的子塊數(shù)據(jù)又是在升級(jí)之后所對(duì)應(yīng)的升級(jí)MTD分區(qū)之內(nèi),有效兼顧了數(shù)據(jù)的寫入準(zhǔn)確性和升級(jí)速度。請(qǐng)參考圖3,該圖3所示為本發(fā)明基于MTD分區(qū)的軟件升級(jí)裝置一個(gè)實(shí)施例的結(jié)構(gòu)框圖。該實(shí)施例以具有Iinux操作系統(tǒng)的機(jī)頂盒產(chǎn)品軟件升級(jí)為例,實(shí)現(xiàn)基于MTD分區(qū)的軟件升級(jí)裝置包括如下相互協(xié)同工作的各單元部分
軟件升級(jí)文件接收和存儲(chǔ)單元301,用來接收外部(傳輸升級(jí)文件的設(shè)備)傳輸?shù)能浖?jí)文件并存儲(chǔ)。預(yù)升級(jí)MTD分區(qū)描述信息解析單元302,與軟件升級(jí)文件接收和存儲(chǔ)單元301相連接,用來從存儲(chǔ)的軟件升級(jí)文件中解析出文件形式存在的預(yù)升級(jí)MTD分區(qū)描述信息。升級(jí)數(shù)據(jù)解析單元303,與軟件升級(jí)文件接收和存儲(chǔ)單元301相連接,用來從軟件升級(jí)文件中解析出升級(jí)后的每個(gè)MTD分區(qū)中的升級(jí)數(shù)據(jù)。原MTD分區(qū)描述信息存儲(chǔ)單元304,用來存儲(chǔ)以文件形式存在的原MTD分區(qū)描述信
肩、O原MTD分區(qū)描述信息備份存儲(chǔ)單元305,作為備份存儲(chǔ)單元,存儲(chǔ)與原MTD分區(qū)描述信息存儲(chǔ)單元304相同形式和內(nèi)容的原MTD分區(qū)描述信息。在該實(shí)施例中,原MTD分區(qū)描述信息存儲(chǔ)單元304和原MTD分區(qū)描述信息備份存儲(chǔ)單元305采用機(jī)頂盒flash存儲(chǔ)器中的兩個(gè)不同的預(yù)留MTD分區(qū)來實(shí)現(xiàn),以實(shí)現(xiàn)MTD分區(qū)描述信息的有效備份。數(shù)據(jù)寫入單元306,與預(yù)升級(jí)MTD分區(qū)描述信息解析單元302、升級(jí)數(shù)據(jù)解析單元303及原MTD分區(qū)描述信息存儲(chǔ)單元304和原MTD分區(qū)描述信息備份存儲(chǔ)單元305相連接,用來根據(jù)原MTD分區(qū)描述信息和預(yù)升級(jí)MTD分區(qū)描述信息中的MTD分區(qū)對(duì)應(yīng)關(guān)系將預(yù)升級(jí)MTD分區(qū)描述信息和升級(jí)數(shù)據(jù)依次寫入至相應(yīng)存儲(chǔ)位置。uboot處理單元308,用來執(zhí)行uboot有關(guān)工作,并將相關(guān)寫入?yún)?shù)寫入到Iinux系統(tǒng)內(nèi)核309中。寫入?yún)?shù)組裝單元307,與預(yù)升級(jí)MTD分區(qū)描述信息解析單元302和uboot處理單元308相連接,用來根據(jù)預(yù)升級(jí)MTD分區(qū)描述信息重新組裝MTD分區(qū)描述信息寫入?yún)?shù),并將該參數(shù)傳輸至uboot處理單元306。
對(duì)于同時(shí)升級(jí)MTD分區(qū)描述信息的軟件升級(jí)來說,升級(jí)后的數(shù)據(jù)是根據(jù)升級(jí)的MTD分區(qū)描述信息所對(duì)應(yīng)的MTD分區(qū)來存儲(chǔ)的,且預(yù)升級(jí)MTD分區(qū)描述信息也需要寫入到升級(jí)后的MTD相應(yīng)分區(qū)中。為實(shí)現(xiàn)升級(jí)后的MTD分區(qū)與升級(jí)之前的MTD分區(qū)的地址映射,保證升級(jí)數(shù)據(jù)的準(zhǔn)確、安全升級(jí),數(shù)據(jù)寫入單元可以采用下述結(jié)構(gòu)來實(shí)現(xiàn),具體包括下述子單元子塊分割子單元,用來將預(yù)升級(jí)MTD分區(qū)描述信息和升級(jí)數(shù)據(jù)分別分割成若干個(gè)指定大小的子塊;
子塊起始地址確定子單元,與所述預(yù)升級(jí)MTD分區(qū)描述信息解析單元和子塊分割子單元相連接,用來根據(jù)預(yù)升級(jí)MTD分區(qū)描述信息中的MTD分區(qū)起始地址和當(dāng)前要寫入的子塊在其所屬預(yù)升級(jí)MTD分區(qū)描述信息或升級(jí)數(shù)據(jù)的所有子塊中的位置計(jì)算子塊的起始地址;子塊映射地址確定子單元,與子塊起始地址確定子單元和所述原MTD分區(qū)描述信息存儲(chǔ)單元及原MTD分區(qū)描述信息備份存儲(chǔ)單元相連接,根據(jù)原MTD分區(qū)描述信息和子塊的起始地址獲取該子塊所對(duì)應(yīng)的原MTD分區(qū)的起始地址和偏移地址,作為子塊的映射地址;數(shù)據(jù)擦除子單元,與子塊映射地址確定子單元相連接,用來根據(jù)原MTD分區(qū)的起始地址和偏移地址擦除與子塊大小相等的存儲(chǔ)區(qū)域中的數(shù)據(jù);
子塊數(shù)據(jù)寫入子單元,與子塊映射地址確定子單元和子塊分割子單元相連接,用來將子塊的數(shù)據(jù)寫入到擦除后的存儲(chǔ)區(qū)域中。該實(shí)施例的軟件升級(jí)裝置中的各單元部分協(xié)同工作,在有關(guān)軟件程序的配合下,按照?qǐng)DI和圖2的方法流程實(shí)現(xiàn)快速、準(zhǔn)確的MTD分區(qū)描述信息和數(shù)據(jù)的同時(shí)升級(jí)。以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對(duì)其進(jìn)行限制;盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說明,對(duì)于本領(lǐng)域的普通技術(shù)人員來說,依然可以對(duì)前述實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明所要求保護(hù)的技術(shù)方案的精神和范圍。
權(quán)利要求
1.一種基于MTD分區(qū)的軟件升級(jí)方法,其特征在于,在基于MTD分區(qū)的存儲(chǔ)器中預(yù)先設(shè)置至少兩個(gè)分區(qū),分別存儲(chǔ)相同內(nèi)容的、升級(jí)之前的原MTD分區(qū)描述信息,所述升級(jí)方法包括下述步驟 al、將預(yù)升級(jí)MTD分區(qū)描述信息和升級(jí)后的每個(gè)MTD分區(qū)中的升級(jí)數(shù)據(jù)添加到軟件升級(jí)文件中,預(yù)升級(jí)MTD分區(qū)描述信息對(duì)應(yīng)的升級(jí)后的MTD分區(qū)中包括有至少兩個(gè)用來存儲(chǔ)預(yù)升級(jí)MTD分區(qū)描述信息的MTD分區(qū); a2、升級(jí)過程中讀取軟件升級(jí)文件,解析出預(yù)升級(jí)MTD分區(qū)描述信息和升級(jí)數(shù)據(jù);a3、讀取存儲(chǔ)器的原MTD分區(qū)描述信息,根據(jù)原MTD分區(qū)描述信息和預(yù)升級(jí)MTD分區(qū)描述信息中的MTD分區(qū)對(duì)應(yīng)關(guān)系將預(yù)升級(jí)MTD分區(qū)描述信息和升級(jí)數(shù)據(jù)依次寫入至相應(yīng)存儲(chǔ)位置; a4、啟動(dòng)系統(tǒng)的uboot,讀取存儲(chǔ)在存儲(chǔ)器中的預(yù)升級(jí)MTD分區(qū)描述信息,組裝MTD分區(qū) 描述信息寫入?yún)?shù),并將該參數(shù)寫入到系統(tǒng)內(nèi)核中。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述原MTD分區(qū)描述信息以XML文件形式存儲(chǔ)在存儲(chǔ)器中,所述預(yù)升級(jí)分區(qū)描述信息以XML文件形式添加到軟件升級(jí)文件中。
3.根據(jù)權(quán)利要求I所述的方法,其特征在于,在基于MTD分區(qū)的存儲(chǔ)器中預(yù)先設(shè)置有兩個(gè)存儲(chǔ)所述原MTD分區(qū)描述信息的分區(qū);所述預(yù)升級(jí)分區(qū)描述信息對(duì)應(yīng)的升級(jí)后的MTD分區(qū)中包括有兩個(gè)用來存儲(chǔ)預(yù)升級(jí)MTD分區(qū)描述信息的MTD分區(qū)。
4.根據(jù)權(quán)利要求I至3中任一項(xiàng)所述的方法,其特征在于,所述步驟a3包括下述子步驟 a31、將預(yù)升級(jí)MTD分區(qū)描述信息和升級(jí)數(shù)據(jù)分別分割成若干個(gè)指定大小的子塊;a32、根據(jù)預(yù)升級(jí)MTD分區(qū)描述信息中的MTD分區(qū)起始地址和當(dāng)前要寫入的子塊在其所屬預(yù)升級(jí)MTD分區(qū)描述信息或升級(jí)數(shù)據(jù)的所有子塊中的位置計(jì)算子塊的起始地址; a33、讀取所述原MTD分區(qū)描述信息,根據(jù)該原MTD分區(qū)描述信息和子塊的起始地址獲取該子塊所對(duì)應(yīng)的原MTD分區(qū)的起始地址和偏移地址; a34、根據(jù)原MTD分區(qū)的起始地址和偏移地址擦除與子塊大小相等的存儲(chǔ)區(qū)域; a35、將子塊的數(shù)據(jù)寫入到擦除后的存儲(chǔ)區(qū)域中。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述子塊的大小與所述基于MTD分區(qū)的存儲(chǔ)器的一個(gè)擦除操作單元的大小相等。
6.根據(jù)權(quán)利要求I至3中任一項(xiàng)所述的方法,其特征在于,所述軟件升級(jí)文件包括有依次存儲(chǔ)的預(yù)升級(jí)MTD分區(qū)描述信息校驗(yàn)字段、預(yù)升級(jí)MTD分區(qū)描述信息長度字段、預(yù)升級(jí)MTD分區(qū)描述信息、升級(jí)后的每個(gè)MTD分區(qū)中的升級(jí)數(shù)據(jù)校驗(yàn)字段、升級(jí)數(shù)據(jù)的長度字段及升級(jí)數(shù)據(jù)。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述預(yù)升級(jí)MTD分區(qū)描述信息校驗(yàn)字段和所述升級(jí)數(shù)據(jù)校驗(yàn)字段均為CRC校驗(yàn)字段。
8.一種基于MTD分區(qū)的軟件升級(jí)裝置,其特征在于,所述裝置包括 原MTD分區(qū)描述信息存儲(chǔ)單元,用來存儲(chǔ)原MTD分區(qū)描述信息; 至少一個(gè)原MTD分區(qū)描述信息備份存儲(chǔ)單元,作為備份存儲(chǔ)單元,存儲(chǔ)與原MTD分區(qū)描述信息存儲(chǔ)單元相同內(nèi)容的原MTD分區(qū)描述信息; 軟件升級(jí)文件接收和存儲(chǔ)單元,用來接收外部傳輸?shù)能浖?jí)文件并存儲(chǔ);預(yù)升級(jí)MTD分區(qū)描述信息解析單元,與軟件升級(jí)文件接收和存儲(chǔ)單元相連接,用來從軟件升級(jí)文件中解析出預(yù)升級(jí)MTD分區(qū)描述信息; 升級(jí)數(shù)據(jù)解析單元,與軟件升級(jí)文件接收和存儲(chǔ)單元相連接,用來從軟件升級(jí)文件中解析出升級(jí)后的每個(gè)MTD分區(qū)中的升級(jí)數(shù)據(jù); 數(shù)據(jù)寫入單元,與預(yù)升級(jí)MTD分區(qū)描述信息解析單元、升級(jí)數(shù)據(jù)解析單元及原MTD分區(qū)描述信息存儲(chǔ)單元和原MTD分區(qū)描述信息備份存儲(chǔ)單元相連接,用來根據(jù)原MTD分區(qū)描述信息和預(yù)升級(jí)MTD分區(qū)描述信息中的MTD分區(qū)對(duì)應(yīng)關(guān)系將預(yù)升級(jí)MTD分區(qū)描述信息和升級(jí)數(shù)據(jù)依次寫入至相應(yīng)存儲(chǔ)位置; uboot處理單元,用來執(zhí)行uboot有關(guān)工作,并將相關(guān)寫入?yún)?shù)寫入到系統(tǒng)內(nèi)核中;寫入?yún)?shù)組裝單元,與預(yù)升級(jí)MTD分區(qū)描述信息解析單元和uboot處理單元相連接,用來組裝MTD分區(qū)描述信息寫入?yún)?shù),并將該參數(shù)傳輸至uboot處理單元。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述原MTD分區(qū)描述信息存儲(chǔ)單元及所述原MTD分區(qū)描述信息備份存儲(chǔ)單元中以XML文件形式存儲(chǔ)MTD分區(qū)描述信息;所述預(yù)升級(jí)MTD分區(qū)描述信息以XML文件形式存儲(chǔ)在所述軟件升級(jí)文件中。
10.根據(jù)權(quán)利要求8或9所述的裝置,其特征在于,所述數(shù)據(jù)寫入單元包括下述子單元 子塊分割子單元,用來將預(yù)升級(jí)MTD分區(qū)描述信息和升級(jí)數(shù)據(jù)分別分割成若干個(gè)指定大小的子塊; 子塊起始地址確定子單元,與所述預(yù)升級(jí)MTD分區(qū)描述信息解析單元和子塊分割子單元相連接,用來根據(jù)預(yù)升級(jí)MTD分區(qū)描述信息中的MTD分區(qū)起始地址和當(dāng)前要寫入的子塊在其所屬預(yù)升級(jí)MTD分區(qū)描述信息或升級(jí)數(shù)據(jù)的所有子塊中的位置計(jì)算子塊的起始地址;子塊映射地址確定子單元,與子塊起始地址確定子單元和所述原MTD分區(qū)描述信息存儲(chǔ)單元及原MTD分區(qū)描述信息備份存儲(chǔ)單元相連接,根據(jù)原MTD分區(qū)描述信息和子塊的起始地址獲取該子塊所對(duì)應(yīng)的原MTD分區(qū)的起始地址和偏移地址,作為子塊的映射地址;數(shù)據(jù)擦除子單元,與子塊映射地址確定子單元相連接,用來根據(jù)原MTD分區(qū)的起始地址和偏移地址擦除與子塊大小相等的存儲(chǔ)區(qū)域中的數(shù)據(jù); 子塊數(shù)據(jù)寫入子單元,與子塊映射地址確定子單元和子塊分割子單元相連接,用來將子塊的數(shù)據(jù)寫入到擦除后的存儲(chǔ)區(qū)域中。
全文摘要
本發(fā)明公開了一種基于MTD分區(qū)的軟件升級(jí)方法和裝置。所述方法包括下述步驟將預(yù)升級(jí)MTD分區(qū)描述信息和升級(jí)數(shù)據(jù)添加到軟件升級(jí)文件中;升級(jí)過程中讀取軟件升級(jí)文件,解析出預(yù)升級(jí)MTD分區(qū)描述信息和升級(jí)數(shù)據(jù);根據(jù)原MTD分區(qū)描述信息和預(yù)升級(jí)MTD分區(qū)描述信息中的MTD分區(qū)對(duì)應(yīng)關(guān)系將預(yù)升級(jí)MTD分區(qū)描述信息和升級(jí)數(shù)據(jù)依次寫入至相應(yīng)存儲(chǔ)位置;啟動(dòng)系統(tǒng)uboot,讀取存儲(chǔ)在存儲(chǔ)器中的預(yù)升級(jí)MTD分區(qū)描述信息,組裝MTD分區(qū)描述信息寫入?yún)?shù),并寫入到系統(tǒng)內(nèi)核中。應(yīng)用本發(fā)明的方法能夠在升級(jí)過程中對(duì)MTD分區(qū)描述信息進(jìn)行升級(jí),提高了存儲(chǔ)器MTD分區(qū)的可調(diào)性和使用靈活性。
文檔編號(hào)G06F9/445GK102945179SQ20121049232
公開日2013年2月27日 申請(qǐng)日期2012年11月28日 優(yōu)先權(quán)日2012年11月28日
發(fā)明者李鐵柱 申請(qǐng)人:青島海信寬帶多媒體技術(shù)有限公司