本發(fā)明涉及計算機領(lǐng)域,尤其涉及一種系統(tǒng)固件映像文件的生成方法及系統(tǒng)。
背景技術(shù):
在嵌入式系統(tǒng)中引入了基于存儲塊的升級方式,這種升級方式不受文件系統(tǒng)的限制,可用于任何文件系統(tǒng),而且使用此種升級方式升級的設(shè)備,其固件在存儲器件上的分布都和映像文件一致,有利于我們在設(shè)備上使用校驗程序,一校驗系統(tǒng)固件是否被損壞。
但現(xiàn)有的系統(tǒng)固件映像文件生成方法不能很好的支持這種升級方式,現(xiàn)有的系統(tǒng)固件映像文件生成方法是將文件按照字母排列順序逐個拼接而成的,兩個子文件之間的緊鄰著,若新版本中在前的子文件比舊版本中在前的子文件大一些,就需要把舊版本中在后的子文件拷貝出來,放入緩存區(qū),才能將新版本的在前的子文件寫入對應(yīng)的位置,這種情況被稱為“文件重疊”,會增加系統(tǒng)固件升級過程中的時間開銷和磁盤緩存開銷,甚至可能出現(xiàn)系統(tǒng)固件升級錯誤的情況。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于提供一種系統(tǒng)固件映像文件的生成方法及系統(tǒng),能夠避免系統(tǒng)固件升級過程出現(xiàn)文件重疊的情況,有效減少系統(tǒng)固件升級過程中的時間開銷和磁盤緩存開銷。
為實現(xiàn)上述目的,本發(fā)明提供一種系統(tǒng)固件映像文件的生成方法,該方法包括:
取出系統(tǒng)固件中的一個子文件,獲取所述子文件的文件大小;
根據(jù)所述文件大小得到所述子文件占用的實際空間大小和所述子文件實際分配的空閑空間大小;
將所述子文件在系統(tǒng)固件映像文件中的寫入地址加上所述子文件占用的實際空間大小和所述子文件的實際分配空閑空間大小,得到所述子文件后的下一個子文件在系統(tǒng)固件映像文件中的寫入地址。
其中,所述取出系統(tǒng)固件中的一個子文件,獲取所述子文件的文件大小之前,包括:
獲取系統(tǒng)固件子文件的分布情況,根據(jù)所述分布情況得到所述子文件在系統(tǒng)固件映像文件中的寫入地址。
其中,所述根據(jù)所述文件大小得到所述子文件占用的實際空間大小和所述子文件的實際分配空閑空間大小包括:
將所述系統(tǒng)固件分區(qū)劃分為多個大小相同的分片,每個分片的大小定義為單位分片大小,其中,一個分片用于存放系統(tǒng)固件中的一個子文件;
設(shè)置所述子文件的準(zhǔn)備率,其中,所述準(zhǔn)備率為系統(tǒng)固件分區(qū)中總的空閑空間大小與所述系統(tǒng)固件分區(qū)中全部子文件占用的空間大小的比值;
根據(jù)所述文件大小和所述單位分片大小計算得到所述子文件占用的實際空間大?。?/p>
根據(jù)所述文件大小和所述準(zhǔn)備率,計算得到所述子文件的理論分配空閑空間大??;根據(jù)所述理論分配空閑空間大小和所述單位分片大小,計算得到所述子文件的實際分配空閑空間大小。
其中,所述方法包括:
定義累計余數(shù);
將所述理論分配空閑空間大小超出所述實際分配空閑空間大小的部分計入所述累計余數(shù);
將所述子文件在系統(tǒng)固件映像文件中的寫入地址加上所述子文件占用的實際空間大小和所述子文件實際分配的空閑空間大小之后,包括:
判斷所述累計余數(shù)是否大于單位分片大小,若是,則將所述子文件在系統(tǒng)固件映像文件中的寫入地址再加上單位分片大小,得到所述子文件后的下一個子文件在系統(tǒng)固件映像文件中的寫入地址;若否,執(zhí)行后續(xù)步驟。
其中,所述得到所述子文件后的下一個子文件在系統(tǒng)固件映像文件中的寫入地址之后,包括:
判斷所述系統(tǒng)固件中全部子文件是否處理完成,若是,結(jié)束流程;若否,返回取出系統(tǒng)固件中的一個子文件,獲取所述子文件的文件大小的步驟,并繼續(xù)后續(xù)步驟。
其中,所述設(shè)置所述子文件的準(zhǔn)備率包括:
判斷所述子文件是否為APP文件,若是,則將所述子文件的準(zhǔn)備率設(shè)置為第一準(zhǔn)備率,若否,則將所述子文件的準(zhǔn)備率設(shè)置第二準(zhǔn)備率;
其中,所述第一準(zhǔn)備率大于所述第二準(zhǔn)備率。
其中,所述根據(jù)所述文件大小和所述單位分片大小計算得到所述子文件占用的實際空間大小具體為:
根據(jù)所述文件大小和所述單位分片大小,得到所述子文件占用的分片個數(shù),將所述分片個數(shù)乘以所述單位分片大小,得到所述子文件占用的實際空間大小;
其中,所述子文件占用的實際空間大小為所述單位分片大小的整數(shù)倍。
其中,所述根據(jù)所述文件大小和所述準(zhǔn)備率,計算得到所述子文件理論分配的空閑空間大??;根據(jù)所述子文件理論分配的空閑空間大小和所述單位分片大小,計算得到所述子文件實際分配的空閑空間大小具體為:
將所述文件大小乘以所述準(zhǔn)備率,得到所述子文件理論分配的空閑空間大小;
將所述子文件理論分配的空閑空間大小除以所述單位分片大小,得到一商數(shù);將所述商數(shù)乘以所述單位分片大小,得到所述子文件實際分配的空閑空間大小。
另一方面,本發(fā)明提出了一種系統(tǒng)固件映像文件的生成系統(tǒng),該系統(tǒng)包括:
子文件獲取模塊,用于取出系統(tǒng)固件中的一個子文件,獲取所述子文件的文件大??;
計算模塊,用于根據(jù)所述文件大小得到所述子文件占用的實際空間大小和所述子文件實際分配的空閑空間大??;
寫入地址設(shè)置模塊,用于將所述子文件在系統(tǒng)固件映像文件中的寫入地址加上所述子文件占用的實際空間大小和所述子文件的實際分配空閑空間大小,得到所述子文件后的下一個子文件在系統(tǒng)固件映像文件中的寫入地址。
其中,所述系統(tǒng)還包括:
完成判斷模塊,用于判斷所述系統(tǒng)固件中全部子文件是否處理完成;
操作執(zhí)行模塊,用于根據(jù)所述完成判斷模塊的判斷結(jié)果結(jié)束流程,或向所述子文件獲取模塊發(fā)送繼續(xù)執(zhí)行動作的指令。
有益效益:區(qū)別于現(xiàn)有技術(shù)的情況,本發(fā)明通過取出系統(tǒng)固件中的一個子文件,獲取所述子文件的文件大?。桓鶕?jù)所述文件大小得到所述子文件占用的實際空間大小和所述子文件實際分配的空閑空間大?。粚⑺鲎游募谙到y(tǒng)固件映像文件中的寫入地址加上所述子文件占用的實際空間大小和所述子文件的實際分配空閑空間大小,得到所述子文件后的下一個子文件在系統(tǒng)固件映像文件中的寫入地址。通過這種方式,本發(fā)明使系統(tǒng)固件映像文件中的兩個相鄰子文件之間具有一定的空閑空間,在在系統(tǒng)固件升級過程中,即使新版本的子文件比舊版本的同一子文件大,也不需要將該子文件的后一個子文件拷貝至緩存區(qū)后在寫入對應(yīng)位置,可以直接將新版本的子文件直接寫入對應(yīng)位置,避免了系統(tǒng)固件升級過程中出現(xiàn)文件重疊的情況,有效減少系統(tǒng)固件升級過程中的時間開銷和磁盤緩存開銷。
附圖說明
圖1是本發(fā)明系統(tǒng)固件映像文件生成方法一實施例的流程示意圖;
圖2是圖1中步驟S102的具體流程示意圖;
圖3是圖2中步驟S1022的具體流程示意圖;
圖4是本發(fā)明系統(tǒng)固件映像文件生成方法另一實施例的流程圖;
圖5是本發(fā)明系統(tǒng)固件映像文件生成方法另一實施例的流程圖;
圖6是本發(fā)明系統(tǒng)固件映像文件生成方法另一實施例的流程圖;
圖7是本發(fā)明系統(tǒng)固件映像文件生成系統(tǒng)一實施例的功能模塊示意圖;
圖8是本發(fā)明系統(tǒng)固件映像文件生成系統(tǒng)另一實施例的功能模塊示意圖;
圖9是本發(fā)明系統(tǒng)固件映像文件的生成處理裝置一實施例的結(jié)構(gòu)示意圖。
具體實施方式
為使本領(lǐng)域的技術(shù)人員更好地理解本發(fā)明的技術(shù)方案,下面結(jié)合附圖和具體實施方式對本發(fā)明所提供的一種生成系統(tǒng)固件映像文件的方法及系統(tǒng)做進一步詳細(xì)描述。
參照圖1,圖1是本發(fā)明系統(tǒng)固件映像文件生成方法一實施例的流程示意圖,該系統(tǒng)固件映像文件生成方法包括如下步驟:
S101、取出系統(tǒng)固件中的一個子文件,獲取所述子文件的文件大小。
從系統(tǒng)固件的文件目錄中取出一個需要寫入系統(tǒng)固件映像文件中的子文件??蛇x的,取出系統(tǒng)固件中的一個子文件是按照子文件在系統(tǒng)固件中排放順序,從系統(tǒng)固件的文件目錄中的第一個子文件開始依次取出相應(yīng)的子文件,第一次取出系統(tǒng)固件對應(yīng)的目錄中的第一個子文件;第一個子文件寫入系統(tǒng)固件映像文件中后,再從系統(tǒng)固件對應(yīng)的目錄中取出第二個子文件,直至將該系統(tǒng)固件對應(yīng)的目錄中的全部文件取出并寫入系統(tǒng)固件映像文件中。
取出系統(tǒng)固件中的一個子文件的同時,獲取所述子文件的文件大小。
S102、根據(jù)所述文件大小得到所述子文件占用的實際空間大小和所述子文件實際分配的空閑空間大小。
每個子文件的文件大小不同,導(dǎo)致每個子文件占用的空間大小和需要分配的空閑空間大小也不同。
進一步的,如圖2所示,步驟S102具體包括如下步驟:
S1021、將所述系統(tǒng)固件分區(qū)劃分為多個大小相同的分片,每個分片的大小定義為單位分片大小。
系統(tǒng)固件分區(qū)是用于存放系統(tǒng)固件文件的存儲分區(qū),系統(tǒng)固件分區(qū)的大小必須等于系統(tǒng)固件映像文件的大小,系統(tǒng)固件映像文件包含看系統(tǒng)固件的所有數(shù)據(jù),并且系統(tǒng)固件映像文件的排列情況和設(shè)備上系統(tǒng)固件分區(qū)的排列情況一致,在系統(tǒng)開發(fā)中常通過將系統(tǒng)固件映像文件寫入設(shè)備上系統(tǒng)固件分的方式來更新設(shè)備上的系統(tǒng)固件。
將系統(tǒng)固件分區(qū)劃分為多個小的區(qū)域,每個區(qū)域定義為分片,每個分片的大小相同,每個區(qū)域劃分到的大小即為每個分片的大小,將每個分片的大小定義為單位分片大小。本實施例對單位分片大小的具體數(shù)值不做限定,單位分片大小可以根據(jù)系統(tǒng)固件分區(qū)的總大小進行設(shè)置。
S1022、設(shè)置所述子文件的準(zhǔn)備率。
所述子文件的準(zhǔn)備率定義為所述子文件被分配的空閑空間大小與系統(tǒng)固件子文件本身大小的比值;若系統(tǒng)固件子文件中每個子文件的準(zhǔn)備率相同,則可以等效為系統(tǒng)固件中總的空閑空間的大小與系統(tǒng)固件子文件的總文件大小的比值。
本實施例中子文件的準(zhǔn)備率的一種計算方法具體如下:
令系統(tǒng)固件中的文件總大小為S,系統(tǒng)固件中空閑空間的大小為Sf,則該系統(tǒng)固件中的子文件的準(zhǔn)備率的計算公式為:P=Sf/S。
但系統(tǒng)固件子文件中由于文件類型不同,而不同類型的文件在系統(tǒng)固件升級時文件大小發(fā)生變化的可能性也不同,則需要對不同類型的子文件設(shè)置不同的準(zhǔn)備率。通常APP文件在系統(tǒng)固件升級時文件大小發(fā)生變化的可能性較大,而其他文件在系統(tǒng)固件升級時文件大小發(fā)生變化的可能性較小,將APP文件除外的其他文件定義為普通文件,本實施例中子文件的準(zhǔn)備率的另一種計算方法具體如下:
令系統(tǒng)固件中的APP文件的總大小為Sa,普通文件的總大小為So,文件系統(tǒng)本身的meta數(shù)據(jù)占用的大小為Sfs,系統(tǒng)固件分區(qū)的總大小為X,令系統(tǒng)固件分區(qū)中的總的空閑空間的大小為Sf,則Sf=X-Sa-So-Sfs;令A(yù)PP文件的加權(quán)因子為Fa,普通文件的加權(quán)因子為Fo,則令A(yù)PP文件的準(zhǔn)備率為Pa,則Pa的計算公式為:(Fa*Sf)/(Sa*Fa+So*Fo);令普通文件的準(zhǔn)備率為Po,則Po的計算公式為:(Fo*Sf)/(Sa*Fa+So*Fo)。其中,APP文件的加權(quán)因子為Fa比普通文件的加權(quán)因子為Fo大;加權(quán)因子表示了文件在分配空閑空間時的比重,加權(quán)因子的值可以根據(jù)實際需求進行設(shè)置。
舉例說明,設(shè)置APP文件的加權(quán)因子Fa為1.2,普通文件的加權(quán)因子Fo為1;通過對系統(tǒng)固件中系統(tǒng)固件子文件的分布情況進行分析可以得到APP文件的總大小Sa為500KB,普通文件的總大小So為200KB,文件系統(tǒng)本身的meta數(shù)據(jù)占用的大小Sfs為100KB,系統(tǒng)固件分區(qū)的總大小X為1000KB,則可以得到系統(tǒng)固件分區(qū)中的總的空閑空間的大小Sf為200KB,根據(jù)上述公式可以算出APP文件的準(zhǔn)備率Pa為0.3,普通文件的準(zhǔn)備率Po為0.25。
進一步的,如圖3所示,步驟S1022還包括如下步驟:
S10221、判斷所述子文件是否為APP文件。
S10222、將所述子文件的準(zhǔn)備率設(shè)置為第一準(zhǔn)備率。
若步驟S10221中的判斷結(jié)果為是,即所述子文件為APP文件,則將所述子文件的準(zhǔn)備率設(shè)置為第一準(zhǔn)備率。本實施例中將APP文件的準(zhǔn)備率用Pa表示,則此時將所述子文件的準(zhǔn)備率設(shè)置為Pa。根據(jù)上述舉例說明計算得到的結(jié)果,將所述子文件的準(zhǔn)備率設(shè)置為0.3。
S10223、將所述子文件的準(zhǔn)備率設(shè)置第二準(zhǔn)備率。
若步驟S10221中的判斷結(jié)果為否,即所述子文件為普通文件,則將所述子文件的準(zhǔn)備率設(shè)置為第二準(zhǔn)備率。本實施例中將普通文件的準(zhǔn)備率用Po表示,則此時將所述子文件的準(zhǔn)備率設(shè)置為Po。根據(jù)上述舉例說明計算得到的結(jié)果,將所述子文件的準(zhǔn)備率設(shè)置為0.25。
本實施例中,第一準(zhǔn)備率為APP文件的準(zhǔn)備率,第二準(zhǔn)備率為普通文件的準(zhǔn)備率,因此第一準(zhǔn)備率大于第二準(zhǔn)備率。
S1023、根據(jù)所述文件大小和所述單位分片大小計算得到所述子文件占用的實際空間大小。
獲取的子文件存放入步驟S1021中劃分的分片內(nèi),一個分片中只能存放一個相同的系統(tǒng)固件子文件,或存放一個相同的系統(tǒng)固件子文件的一部分,即一個分片中存放的子文件均是同一個系統(tǒng)固件子文件,即使一個分片存放入系統(tǒng)固件子文件后還有空余的空間,也不能用來存放另個一系統(tǒng)固件子文件,因此系統(tǒng)固件子文件占用的實際空間大小為單位分片大小的整數(shù)倍。
得到所述子文件占用的實際空間大小的具體步驟為:
根據(jù)取出的系統(tǒng)固件子文件的文件大小和劃分的單位分片大小,得到該子文件需要占用的分片個數(shù),將得到的分片個數(shù)乘以單位分片大小,即得到該子文件占用的實際空間大小。
舉例說明,若取出的系統(tǒng)固件子文件的文件大小為25KB,劃分的單位分片大小為4KB,則該子文件需要真用的分片個數(shù)為7,將得到的分片個數(shù)乘以單位分片大小得到的值28KB,則該子文件占用的實際空間大小為28KB。
S1024、根據(jù)所述文件大小和所述準(zhǔn)備率,計算得到所述子文件的理論分配空閑空間大小。
根據(jù)取出的系統(tǒng)固件子文件的文件大小和步驟S1022中設(shè)置的相應(yīng)的準(zhǔn)備率,將該子文件的文件大小乘以相應(yīng)的準(zhǔn)備率,即得到該子文件的理論分配空閑空間大小。
舉例說明,取出的系統(tǒng)固件子文件的文件大小為25KB,若該子文件為APP文件,則該子文件的準(zhǔn)備率為0.3,將25KB乘以0.3即得到子文件的理論分配空閑空間大小為7.5KB。
S1025、根據(jù)所述理論分配空閑空間大小和所述單位分片大小,計算得到所述子文件的實際分配空閑空間大小。
由于系統(tǒng)固件子文件的實際分配空閑空間大小也需要用單位分片大小表示,則系統(tǒng)固件子文件的實際分配空閑空間大小也要用整數(shù)倍的單位分片大小來進行表示。
計算得到所述子文件的實際分配空閑空間大小具體為:
將步驟S1024中得到的理論分配空閑空間大小除以步驟S1021中劃分的單位分片大小,得到一商數(shù),將該商數(shù)乘以單位分片大小,即得到該子文件的實際分配空閑空間大小。
舉例說明,若步驟S1024中得到的理論分配空閑空間大小為7.5KB,步驟S1021中劃分的單位分片大小為4KB,兩者相除的商數(shù)為1,將該商數(shù)乘以單位分片大小,得到該子文件的實際分配空閑空間大小為4KB。
S103、將所述子文件在系統(tǒng)固件映像文件中的寫入地址加上所述子文件占用的實際空間大小和所述子文件的實際分配空閑空間大小,得到所述子文件后的下一個子文件在系統(tǒng)固件映像文件中的寫入地址。
將步驟S101中取出的子文件在系統(tǒng)固件映像文件中的寫入地址加上步驟S102中得到的該子文件占用的實際空間大小,該部分用于該子文件寫入系統(tǒng)固件映像文件中,例如,該子文件在系統(tǒng)固件映像文件中的寫入地址為A,步驟S102中得到的該子文件占用的實際空間大小為28KB,則將A加上28KB,得到了第二個地址為A+28KB,在A和A+28KB之間的空間用于該子文件的寫入,將該子文件從寫入地址A開始寫入系統(tǒng)固件映像文件中。再將第二地址A+28KB加上步驟S102中得到的該子文件的實際分配空閑空間大小,根據(jù)步驟S102中的舉例,若該子文件的實際分配空閑空間大小為4KB,則得到第三個地址為A+28KB+4KB,得到的第三個地址即為該子文件后的下一個子文件在系統(tǒng)固件映像文件中的寫入地址。由此,該子文件和該子文件后的下一個子文件之間留有步驟S102中計算得到的該子文件的實際分配空閑空間大小。
本實施例能夠使系統(tǒng)固件映像文件中,兩個相鄰的子文件之間留有相應(yīng)的空閑空間,在系統(tǒng)固件升級時,即使新版本中在前的子文件的文件大小大于就版本中在前的子文件的文件大小,也不需要將在后的子文件拷貝至緩存區(qū),避免了系統(tǒng)固件升級過程中出現(xiàn)文件重疊的情況,有效減少系統(tǒng)固件升級過程中的時間開銷和磁盤緩存開銷。
進一步的,如圖4所示,在步驟S101之前還包括如下步驟:
S104、獲取系統(tǒng)固件子文件的分布情況,根據(jù)所述分布情況得到所述子文件在系統(tǒng)固件映像文件中的寫入地址。
對系統(tǒng)固件子文件的分布情況進行分析,由于在系統(tǒng)固件子文件中存儲有寫入的子文件和文件系統(tǒng)本身的meta數(shù)據(jù),文件系統(tǒng)本身的meta數(shù)據(jù)包括系統(tǒng)文件中子文件的屬性、子文件的長度以及子文件的地址位置等;文件系統(tǒng)本身的meta數(shù)據(jù)通常放置在文件系統(tǒng)的開頭,會對子文件的寫入地址有影響,需要對系統(tǒng)固件子文件的分布情況進行分析,從而得到文件系統(tǒng)本身的meta數(shù)據(jù)所占用的空間,根據(jù)分析結(jié)構(gòu)獲取系統(tǒng)固件子文件在系統(tǒng)固件映像文件中的地址,從而獲取所述子文件在系統(tǒng)固件映像文件中的寫入地址。
由于取出系統(tǒng)固件中的一個子文件是按照子文件在系統(tǒng)固件中排放順序,從第一個子文件開始依次取出相應(yīng)的子文件,第一次取出系統(tǒng)固件對應(yīng)的目錄中的第一個子文件,所以此時根據(jù)所述分布情況得到的子文件在系統(tǒng)固件映像文件中的寫入地址為首個系統(tǒng)固件子文件在系統(tǒng)固件映像文件中的地址,即子文件的起始地址,將首個系統(tǒng)固件子文件在系統(tǒng)固件映像文件中的地址設(shè)置為該子文件在系統(tǒng)固件映像文件中的寫入地址。若不考慮文件系統(tǒng)本身的meta數(shù)據(jù),則該子文件在系統(tǒng)固件映像文件中的寫入地址為0。
進一步的,如圖5所示,本實施例在步驟S103中,將所述子文件在系統(tǒng)固件映像文件中的寫入地址加上所述子文件占用的實際空間大小和所述子文件的實際分配空閑空間大小之后,得到子文件后的下一個子文件在系統(tǒng)固件映像文件中的寫入地址之前,還包括如下步驟:
S105、定義累計余數(shù)。
S106、將所述理論分配空閑空間大小超出所述實際分配空閑空間大小的部分計入所述累計余數(shù)。
根據(jù)步驟S1025可知,子文件理論分配空閑空間大小比實際分配空閑空間大小要大一部分,則定義累積余數(shù),將理論分配空閑空間大小超出實際分配空閑空間大小的部分計入該累計余數(shù)。
舉例說明,若步驟S1024中得到的理論分配空閑空間大小為7.5KB,該子文件的實際分配空閑空間大小為4KB,則將超出的3.5KB計入累積余數(shù)。
S107、判斷所述累計余數(shù)是否大于單位分片大小。
逐個將子文件寫入系統(tǒng)固件映像文件中,由于對于每個子文件來說,理論分配空閑空間大小總比實際分配空閑空間大小要大一部分,而對于每個子文件來說,理論分配空閑空間大小超出實際分配空閑空間大小的部分均會計入該累計余數(shù),導(dǎo)致累計余數(shù)不斷累加,為了將計入累計余數(shù)的空間有效的利用并分配到子文件后,本實施例增加了對累積余數(shù)的大小進行判斷的步驟,判斷累計余數(shù)是否大于單位分片大小。
S108、將所述子文件在系統(tǒng)固件映像文件中的寫入地址再加上單位分片大小,得到所述子文件后的下一個子文件在系統(tǒng)固件映像文件中的寫入地址。
若步驟S107中的判斷結(jié)果為累計余數(shù)大于單位分片大小,將所述子文件在系統(tǒng)固件映像文件中的寫入地址再加上單位分片大小,即在步驟S103中將所述子文件在系統(tǒng)固件映像文件中的寫入地址加上所述子文件占用的實際空間大小和所述子文件的實際分配空閑空間大小之后,再加上單位分片大小。例如,步驟S103中舉例為將所述子文件在系統(tǒng)固件映像文件中的寫入地址加上所述子文件占用的實際空間大小和所述子文件的實際分配空閑空間大小后得到的第三個地址為A+28KB+4KB,若此時累計余數(shù)為7KB,累計余數(shù)大于單位分片大小,則在第三個地址的基礎(chǔ)上再加上單位分片大小4KB,得到第四個地址為A+28KB+4KB+4KB,此時第四個地址為該子文件后的下一個子文件在系統(tǒng)固件映像文件中的寫入地址。
S109、執(zhí)行后續(xù)步驟。
若步驟S107中的判斷結(jié)果為累計余數(shù)小于或等于單位分片大小,則在將所述子文件在系統(tǒng)固件映像文件中的寫入地址加上所述子文件占用的實際空間大小和所述子文件的實際分配空閑空間大小之后,得到所述子文件后的下一個子文件在系統(tǒng)固件映像文件中的寫入地址。例如,步驟S103中舉例為將所述子文件在系統(tǒng)固件映像文件中的寫入地址加上所述子文件占用的實際空間大小和所述子文件的實際分配空閑空間大小后得到的第三個地址為A+28KB+4KB,若此時累計余數(shù)為3.5KB,累計余數(shù)小于單位分片大小,則得到的第三個地址即為該子文件后的下一個子文件在系統(tǒng)固件映像文件中的寫入地址。
進一步的,如圖6所示,本實施例還包括:
S1010、判斷所述系統(tǒng)固件中全部子文件是否處理完成。
得到該子文件后的下一個子文件在系統(tǒng)固件映像文件中的寫入地址之后,判斷系統(tǒng)固件中的子文件是否全部處理完成。
S1011、結(jié)束流程。
若步驟S1010的判斷結(jié)果為是,即系統(tǒng)固件中的子文件全部處理完成,則結(jié)束此次系統(tǒng)固件映像文件的生產(chǎn)步驟。
S1012、返回取出系統(tǒng)固件中的一個子文件,獲取所述子文件的文件大小的步驟,并繼續(xù)后續(xù)步驟。
若步驟S1010的判斷結(jié)果為否,即系統(tǒng)固件中的子文件未全部處理完成,則返回步驟S101,繼續(xù)從系統(tǒng)固件的文件目錄中取出一個需要寫入系統(tǒng)固件映像文件中的子文件,此時按照子文件在系統(tǒng)固件中排放順序依次取出相應(yīng)的子文件。
本實施例通過在一個子文件的寫入地址之后加上一定空間大小,使得該子文件和其之后的子文件之間留有預(yù)設(shè)的空閑空間,在系統(tǒng)固件升級過程中,即使新版本的子文件比舊版本的同一子文件占用的空間大,也不需要將該子文件之后的下一個子文件拷貝至緩存區(qū),避免了系統(tǒng)固件升級過程中出現(xiàn)文件重疊的情況,有效減少系統(tǒng)固件升級過程中的時間開銷和磁盤緩存開銷。
參閱圖7,圖7為本發(fā)明系統(tǒng)固件映像文件生成系統(tǒng)一實施例的功能模塊示意圖。本實施例中包括:
子文件獲取模塊101,用于取出系統(tǒng)固件中的一個子文件,獲取所述子文件的文件大小。
計算模塊102,用于根據(jù)所述文件大小得到所述子文件占用的實際空間大小和所述子文件實際分配的空閑空間大小。
寫入地址設(shè)置模塊103,用于將所述子文件在系統(tǒng)固件映像文件中的寫入地址加上所述子文件占用的實際空間大小和所述子文件的實際分配空閑空間大小,得到所述子文件后的下一個子文件在系統(tǒng)固件映像文件中的寫入地址。
本實施例與上述的生成系統(tǒng)固件映像文件的一方法實施例中的步驟S101、S102和S103相對應(yīng),此處不再贅述。
參閱圖8,本發(fā)明生成系統(tǒng)固件映像文件的一系統(tǒng)實施例還包括:
完成判斷模塊104,用于判斷所述系統(tǒng)固件中全部子文件是否處理完成。
操作執(zhí)行模塊105,用于根據(jù)所述完成判斷模塊104的判斷結(jié)果結(jié)束流程,或向所述子文件獲取模塊101發(fā)送繼續(xù)執(zhí)行動作的指令。
若系統(tǒng)固件中全部子文件處理完成,則操作執(zhí)行模塊105發(fā)出結(jié)束流程指令,結(jié)束流程,完成此次系統(tǒng)固件映像文件的生產(chǎn);若系統(tǒng)固件中全部子文件未處理完成,則操作執(zhí)行模塊105向子文件獲取模塊101發(fā)送繼續(xù)執(zhí)行動作的指令,子文件獲取模塊101繼續(xù)執(zhí)行取出系統(tǒng)固件中的一個子文件,獲取所述子文件的文件大小的步驟,此處與上述的生成系統(tǒng)固件映像文件的一方法實施例相對應(yīng),此處不再贅述。
參閱圖9,圖9為本發(fā)明系統(tǒng)固件映像文件的生成處理裝置一實施例。該生成處理裝置可以執(zhí)行上述系統(tǒng)固件映像文件生成方法實施例中的執(zhí)行步驟。相關(guān)內(nèi)容請參加上述方法實施例的詳細(xì)說明,此處不再贅述。
本實施例中,該處理裝置包括處理器91和存儲器92,存儲器92與處理器91耦合。
存儲器92用于存儲操作系統(tǒng),處理器91執(zhí)行的指令以及處理器91獲取到的信息和數(shù)據(jù)等。
處理器91用于執(zhí)行以下動作:
取出存儲器92中存儲的系統(tǒng)固件中的一個子文件,獲取所述子文件的文件大小。
根據(jù)所述文件大小得到所述子文件占用的實際空間大小和所述子文件實際分配的空閑空間大小。將得到的子文件占用的實際空間大小和子文件實際分配的空閑空間大小存入存儲器92中。
將所述子文件在系統(tǒng)固件映像文件中的寫入地址加上所述子文件占用的實際空間大小和所述子文件的實際分配空閑空間大小,得到所述子文件后的下一個子文件在系統(tǒng)固件映像文件中的寫入地址。將得到的子文件后的下一個子文件在系統(tǒng)固件映像文件中的寫入地址存入存儲器92中。
可選的,處理器91用于從存儲器92保存的系統(tǒng)固件中獲取系統(tǒng)固件子文件的分布情況,根據(jù)所述分布情況得到所述子文件在系統(tǒng)固件映像文件中的寫入地址。將得到子文件在系統(tǒng)固件映像文件中的寫入地址存入存儲器92中。
可選的,處理器91用于將所述系統(tǒng)固件分區(qū)劃分為多個大小相同的分片,每個分片的大小定義為單位分片大小,其中,一個分片用于存放系統(tǒng)固件中的一個子文件。設(shè)置所述子文件的準(zhǔn)備率,其中,所述準(zhǔn)備率為系統(tǒng)固件分區(qū)中總的空閑空間大小與所述系統(tǒng)固件分區(qū)中全部子文件占用的空間大小的比值。處理器91設(shè)置子文件的準(zhǔn)備率后,將設(shè)置的準(zhǔn)備率存入存儲器92中。處理器91繼續(xù)根據(jù)所述文件大小和所述單位分片大小計算得到所述子文件占用的實際空間大小。根據(jù)所述文件大小和所述準(zhǔn)備率,計算得到所述子文件的理論分配空閑空間大小。根據(jù)所述理論分配空閑空間大小和所述單位分片大小,計算得到所述子文件的實際分配空閑空間大小。
可選的,處理器91用于從存儲器92中獲取保存的理論分配空閑空間大小和實際分配空閑空間大小,并將所述理論分配空閑空間大小超出所述實際分配空閑空間大小的部分計入所述累計余數(shù)。判斷所述累計余數(shù)是否大于單位分片大小,根據(jù)判斷結(jié)果執(zhí)行相應(yīng)操作。
可選的,處理器91用于判斷所述系統(tǒng)固件中全部子文件是否處理完成,根據(jù)判斷結(jié)果執(zhí)行相應(yīng)操作。
可選的,處理器91用于判斷所述子文件是否為APP文件,根據(jù)判斷結(jié)果執(zhí)行相應(yīng)操作。
本發(fā)明通過在一個子文件的寫入地址之后加上一定空間大小,使得該子文件和其之后的子文件之間留有預(yù)設(shè)的空閑空間,在系統(tǒng)固件升級過程中,即使新版本的子文件比舊版本的同一子文件占用的空間大,也不需要將該子文件之后的下一個子文件拷貝至緩存區(qū),避免了系統(tǒng)固件升級過程中出現(xiàn)文件重疊的情況,有效減少系統(tǒng)固件升級過程中的時間開銷和磁盤緩存開銷。
以上所述僅為本發(fā)明的實施方式,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護范圍。