固件壓縮方法、固件解壓方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本公開(kāi)涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別涉及一種固件壓縮方法、固件解壓方法和裝置。
【背景技術(shù)】
[0002]固件是指擔(dān)任著電子設(shè)備中最底層工作的軟件,用于保證電子設(shè)備的正常運(yùn)行。一般來(lái)說(shuō),電子設(shè)備的功能越復(fù)雜,電子設(shè)備所需的固件就會(huì)越大,也即存儲(chǔ)該固件所需的存儲(chǔ)空間也越大。
[0003]為了減小固件在電子設(shè)備中占據(jù)的存儲(chǔ)空間,相關(guān)技術(shù)通常將固件作為一個(gè)整體進(jìn)行壓縮;當(dāng)電子設(shè)備需要運(yùn)行固件時(shí),電子設(shè)備對(duì)壓縮后的固件進(jìn)行解壓;然后根據(jù)解壓后的代碼段所對(duì)應(yīng)的第一解壓地址,將解壓得到的固件中的代碼段拷貝至該第一解壓地址;根據(jù)解壓后的數(shù)據(jù)段所對(duì)應(yīng)的第二解壓地址,將解壓后的數(shù)據(jù)段拷貝至該第二解壓地址。
【發(fā)明內(nèi)容】
[0004]本公開(kāi)提供了一種固件壓縮方法、固件解壓方法和裝置。所述技術(shù)方案如下:
[0005]根據(jù)本公開(kāi)實(shí)施例的第一方面,提供一種固件壓縮方法,包括:
[0006]獲取固件中的代碼段和數(shù)據(jù)段;
[0007]對(duì)代碼段和數(shù)據(jù)段分別進(jìn)行壓縮;
[0008]配置固件所對(duì)應(yīng)的第一信息段,第一信息段包括壓縮后的代碼段在電子設(shè)備中的第一地址信息、壓縮后的數(shù)據(jù)段在電子設(shè)備中的第二地址信息、壓縮后的代碼段在電子設(shè)備中所對(duì)應(yīng)的第一解壓地址以及壓縮后的數(shù)據(jù)段在電子設(shè)備中所對(duì)應(yīng)的第二解壓地址。
[0009]可選地,獲取固件中的代碼段和數(shù)據(jù)段,包括:
[0010]確定代碼段的第三存儲(chǔ)地址以及數(shù)據(jù)段的第四存儲(chǔ)地址;
[0011]根據(jù)第三存儲(chǔ)地址讀取代碼段,根據(jù)第四存儲(chǔ)地址讀取數(shù)據(jù)段。
[0012]可選地,確定代碼段的第三存儲(chǔ)地址以及數(shù)據(jù)段的第四存儲(chǔ)地址,包括:
[0013]讀取固件所對(duì)應(yīng)的第二信息段;
[0014]當(dāng)?shù)诙畔⒍沃写鎯?chǔ)有第三存儲(chǔ)地址和第四存儲(chǔ)地址時(shí),根據(jù)讀取到的內(nèi)容確定第三存儲(chǔ)地址和第四存儲(chǔ)地址;
[0015]當(dāng)?shù)诙畔⒍沃写鎯?chǔ)有代碼段的起始存儲(chǔ)地址、代碼段的大小、數(shù)據(jù)段的起始存儲(chǔ)地址以及數(shù)據(jù)段的大小時(shí),根據(jù)讀取到的代碼段的起始存儲(chǔ)地址和代碼段的大小確定第三存儲(chǔ)地址,并根據(jù)讀取到的數(shù)據(jù)段的起始存儲(chǔ)地址和數(shù)據(jù)段的大小確定第四存儲(chǔ)地址。
[0016]可選地,配置固件所對(duì)應(yīng)的第一信息段,包括:
[0017]配置壓縮后的代碼段在電子設(shè)備中的第一存儲(chǔ)地址以及壓縮后的數(shù)據(jù)段在電子設(shè)備中的第二存儲(chǔ)地址,將第一存儲(chǔ)地址確定為第一地址信息,并將第二存儲(chǔ)地址確定為第二地址信息;或者,配置壓縮后的代碼段以及壓縮后的數(shù)據(jù)段在電子設(shè)備中分別對(duì)應(yīng)的起始存儲(chǔ)地址,獲取壓縮后的代碼段的大小和壓縮后的數(shù)據(jù)段的大??;將壓縮后的代碼段的起始存儲(chǔ)地址以及壓縮后的代碼段的大小確定為第一地址信息;將壓縮后的數(shù)據(jù)段的起始存儲(chǔ)地址以及壓縮后的代碼段的大小確定為第二地址信息;
[0018]配置第一解壓地址以及第二解壓地址。
[0019]可選地,配置固件所對(duì)應(yīng)的第一信息段,還包括:
[0020]獲取代碼段的大小和數(shù)據(jù)段的大??;
[0021]將代碼段的大小和數(shù)據(jù)段的大小存儲(chǔ)至第一信息段。
[0022]可選地,對(duì)代碼段和數(shù)據(jù)段分別進(jìn)行壓縮,包括:
[0023]將代碼段和數(shù)據(jù)段中的至少一個(gè)進(jìn)行拆分;
[0024]若拆分后的代碼段包括m段,則對(duì)代碼段中的m段分別進(jìn)行壓縮,并對(duì)數(shù)據(jù)段進(jìn)行壓縮;
[0025]若拆分后的數(shù)據(jù)段包括η段,則對(duì)代碼段進(jìn)行壓縮,并對(duì)數(shù)據(jù)段中的η段分別進(jìn)行壓縮;
[0026]若拆分后的代碼段包括m段且拆分后的數(shù)據(jù)段包括η段,則對(duì)代碼段中的m段分別進(jìn)行壓縮,并對(duì)數(shù)據(jù)段中的η段分別進(jìn)行壓縮。
[0027]根據(jù)本公開(kāi)實(shí)施例的第二方面,提供一種固件解壓方法,包括:
[0028]讀取固件所對(duì)應(yīng)的第一信息段,第一信息段包括壓縮后的固件中的代碼段的第一地址信息、壓縮后的固件中的數(shù)據(jù)段的第二地址信息、壓縮后的代碼段所對(duì)應(yīng)的第一解壓地址以及壓縮后的數(shù)據(jù)段所對(duì)應(yīng)的第二解壓地址;
[0029]根據(jù)第一地址信息獲取壓縮后的代碼段,根據(jù)第二地址信息獲取壓縮后的數(shù)據(jù)段;
[0030]將壓縮后的代碼段解壓至第一解壓地址,將壓縮后的數(shù)據(jù)段解壓至第二解壓地址。
[0031]可選地,根據(jù)第一地址信息獲取壓縮后的代碼段,根據(jù)第二地址信息獲取壓縮后的數(shù)據(jù)段,包括:
[0032]根據(jù)第一地址信息確定第一存儲(chǔ)地址,根據(jù)第二地址信息確定第二存儲(chǔ)地址;
[0033]從第一存儲(chǔ)地址中讀取壓縮后的代碼段,從第二存儲(chǔ)地址中讀取壓縮后的數(shù)據(jù)段。
[0034]可選地,根據(jù)第一地址信息確定第一存儲(chǔ)地址,根據(jù)第二地址信息確定第二存儲(chǔ)地址,包括:
[0035]若第一地址信息為第一存儲(chǔ)地址,第二地址信息為第二存儲(chǔ)地址,則根據(jù)讀取到的內(nèi)容確定第一存儲(chǔ)地址和第二存儲(chǔ)地址;
[0036]若第一地址信息為壓縮后的代碼段的起始存儲(chǔ)地址以及壓縮后的代碼段的大小,第二地址信息為壓縮后的數(shù)據(jù)段的起始存儲(chǔ)地址以及壓縮后的數(shù)據(jù)段的大小,則根據(jù)壓縮后的代碼段的起始存儲(chǔ)地址以及大小確定第一存儲(chǔ)地址,根據(jù)壓縮后的數(shù)據(jù)段的起始存儲(chǔ)地址以及大小確定第二存儲(chǔ)地址。
[0037]可選地,第一信息段中還包括壓縮前的代碼段的大小以及壓縮前的數(shù)據(jù)段的大小,方法還包括:
[0038]計(jì)算壓縮前的代碼段以及壓縮前的數(shù)據(jù)段的總大?。?br>[0039]檢測(cè)總大小是否超過(guò)電子設(shè)備的固件運(yùn)行空間;
[0040]若總大小超過(guò)固件運(yùn)行空間,則提示固件有誤。
[0041]根據(jù)本公開(kāi)實(shí)施例的第三方面,提供一種固件壓縮裝置,包括:
[0042]獲取模塊,被配置為獲取固件中的代碼段和數(shù)據(jù)段;
[0043]壓縮模塊,被配置為對(duì)代碼段和數(shù)據(jù)段分別進(jìn)行壓縮;
[0044]信息段配置模塊,被配置為配置固件所對(duì)應(yīng)的第一信息段,第一信息段包括壓縮后的代碼段在電子設(shè)備中的第一地址信息、壓縮后的數(shù)據(jù)段在電子設(shè)備中的第二地址信息、壓縮后的代碼段在電子設(shè)備中所對(duì)應(yīng)的第一解壓地址以及壓縮后的數(shù)據(jù)段在電子設(shè)備中所對(duì)應(yīng)的第二解壓地址。
[0045]可選地,該獲取模塊,包括:
[0046]地址確定子模塊,被配置為確定代碼段的第三存儲(chǔ)地址以及數(shù)據(jù)段的第四存儲(chǔ)地址;
[0047]獲取子模塊,被配置為根據(jù)第三存儲(chǔ)地址讀取代碼段,根據(jù)第四存儲(chǔ)地址讀取數(shù)據(jù)段。
[0048]可選地,該地址確定子模塊,包括:
[0049]信息段讀取子模塊,被配置為讀取固件所對(duì)應(yīng)的第二信息段;
[0050]第一確定子模塊,被配置為在第二信息段中存儲(chǔ)有第三存儲(chǔ)地址和第四存儲(chǔ)地址時(shí),根據(jù)讀取到的內(nèi)容確定第三存儲(chǔ)地址和第四存儲(chǔ)地址;
[0051]第二確定子模塊,被配置為在第二信息段中存儲(chǔ)有代碼段的起始存儲(chǔ)地址、代碼段的大小、數(shù)據(jù)段的起始存儲(chǔ)地址以及數(shù)據(jù)段的大小時(shí),根據(jù)讀取到的代碼段的起始存儲(chǔ)地址和代碼段的大小確定第三存儲(chǔ)地址,并根據(jù)讀取到的數(shù)據(jù)段的起始存儲(chǔ)地址和數(shù)據(jù)段的大小確定第四存儲(chǔ)地址。
[0052]可選地,該信息段配置模塊,包括:
[0053]第一配置子模塊,被配置為配置壓縮后的代碼段在電子設(shè)備中的第一存儲(chǔ)地址以及壓縮后的數(shù)據(jù)段在電子設(shè)備中的第二存儲(chǔ)地址,將第一存儲(chǔ)地址確定為第一地址信息,并將第二存儲(chǔ)地址確定為第二地址信息;或者,配置壓縮后的代碼段以及壓縮后的數(shù)據(jù)段在電子設(shè)備中分別對(duì)應(yīng)的起始存儲(chǔ)地址,獲取壓縮后的代碼段的大小和壓縮后的數(shù)據(jù)段的大小;將壓縮后的代碼段的起始存儲(chǔ)地址以及壓縮后的代碼段的大小確定為第一地址信息;將壓縮后的數(shù)據(jù)段的起始存儲(chǔ)地址以及壓縮后的代碼段的大小確定為第二地址信息;
[0054]第二配置子模塊,被配置為配置第一解壓地址以及第二解壓地址。
[0055]可選地,該信息段配置模塊,還包括:
[0056]大小獲取子模塊,被配置為獲取代碼段的大小和數(shù)據(jù)段的大小;
[0057]大小存儲(chǔ)子模塊,被配置為將代碼段的大小和數(shù)據(jù)段的大小存儲(chǔ)至第一信息段。
[0058]可選地,該壓縮模塊,包括:
[0059]拆分子模塊,被配置為將代碼段和數(shù)據(jù)段中的至少一個(gè)進(jìn)行拆分;
[0060]第一壓縮子模塊,被配置為在拆分后的代碼段包括m段時(shí),對(duì)代碼段中的m段分別進(jìn)行壓縮,并對(duì)數(shù)據(jù)段進(jìn)行壓縮;
[0061]第二壓縮子模塊,被配置為在拆分后的數(shù)據(jù)段包括η段時(shí),對(duì)代碼段進(jìn)行壓縮,并對(duì)數(shù)據(jù)段中的η段分別進(jìn)行壓縮;
[0062]第三壓縮子模塊,被配置為在拆分后的代碼段包括m段且拆分后的數(shù)據(jù)段包括η段時(shí),對(duì)代碼段中的m段分別進(jìn)行壓縮,并對(duì)數(shù)據(jù)段中的η段分別進(jìn)行壓縮。
[0063]根據(jù)本公開(kāi)實(shí)施例的第四方面,提供一種固件解壓裝置,包括:
[0064]信息段讀取模塊,被配置為讀取固件所對(duì)應(yīng)的第一信息段,第一信息段包括壓縮后的固件中的代碼段的第一地址信息、壓縮后的固件中的數(shù)據(jù)段的第二地址信息、壓縮后的代碼段所對(duì)應(yīng)的第一解壓地址以及壓縮后的數(shù)據(jù)段所對(duì)應(yīng)的第二解壓地址;
[0065]獲取模塊,被配置為根據(jù)第一地址信息獲取壓縮后的代碼段,根據(jù)第二地址信息獲取壓縮后的數(shù)據(jù)段;
[0066]解壓模塊,被配置為將壓縮后的代碼段解壓至第一解壓地址,將壓縮后的數(shù)據(jù)段解壓至第二解壓地址。
[0067]可選地,該獲取模塊,包括:
[0068]地址確定子模塊,被配置為根據(jù)第一地址信息確定第一存儲(chǔ)地址,根據(jù)第二地址信息確定第二存儲(chǔ)地址;
[0069]獲取子模塊,被配置為從第一存儲(chǔ)地址中讀取壓縮后的代碼段,從第二存儲(chǔ)地址中讀取壓縮后的數(shù)據(jù)段。
[0070]可選地,該地址確定子模塊,包括:
[0071]第一確定子模塊,被配置為在第一地址信息為第一存儲(chǔ)地址,第二地址信息為第二存儲(chǔ)地址時(shí),根據(jù)讀取到的內(nèi)容確定第一存儲(chǔ)地址和第二存儲(chǔ)地址;
[0072]第二確定子模塊,被配置為在第一地址信息為壓縮后的代碼段的起始存儲(chǔ)地址以及壓縮后的代碼段的大小,第二地址信息為壓縮后的數(shù)據(jù)段的起始存儲(chǔ)地址以及壓縮后的數(shù)據(jù)段的大小時(shí),根據(jù)壓縮后的代碼段的起始存儲(chǔ)地址以及大小確定第一存儲(chǔ)地址,根據(jù)壓縮后的數(shù)據(jù)段的起始存儲(chǔ)地址以及大小確定第二存儲(chǔ)地址。
[0073]可選地,第一信息段中還包括壓縮前的代碼段的大小以及壓縮前的數(shù)據(jù)段的大小,該裝置還包括:
[0074]計(jì)算模塊,被配置為計(jì)算壓縮前的代碼段以及壓縮前的數(shù)據(jù)段的總大??;
[0075]檢測(cè)模塊,被配置為檢測(cè)總大小是否超過(guò)電子設(shè)備的固件運(yùn)行空間;
[0076]提示模塊,被配置為在檢測(cè)模塊的檢測(cè)結(jié)果為總大小超過(guò)固件運(yùn)行空間時(shí),提示固件有誤。
[0077]根據(jù)本公開(kāi)實(shí)施例的第五方面,提供一種固件壓縮裝置,包括:
當(dāng)前第1頁(yè)
1 
2 
3 
4 
5 
6