本申請涉及軟件和計算機網絡,尤其涉及一種適于嵌入式系統(tǒng)的差量式補丁升級方法及裝置。
背景技術:
在嵌入式系統(tǒng)中,對其閃存flash內的文件進行升級時,需要對整個文件進行升級。由于受到嵌入式系統(tǒng)硬件或者網絡的影響,容易造成升級過程時間過長,即超時引起文件升級失敗,影響用戶使用體驗。
技術實現要素:
為克服相關技術中存在的問題,本申請實施例提供一種適于嵌入式系統(tǒng)的差量式補丁升級方法及裝置,用以解決相關技術中的技術問題。
根據本申請實施例的第一方面,提供一種適于嵌入式系統(tǒng)的差量式補丁升級方法,所述方法包括:
獲取需要升級軟件的原始文件與所述需要升級軟件對應的目標文件;
確定所述原始文件和所述目標文件存在差異數據時生成所述原始文件的補丁文件;
根據所述補丁文件對所述需要升級軟件進行更新。
可選地,根據所述原始文件和所述目標文件的差異數據生成所述原始文件的補丁文件的步驟,包括:
依次從所述原始文件和所述目標文件中讀取預設大小的文件數據,得到原始單元數據和目標單元數據;
比較所述原始單元數據和所述目標單元數據是否存在差異數據;
若存在差異數據,則生成預設大小且數據內容為所述目標單元數據的補丁單元;所述原始文件的多個原始單元數據對應的補丁單元形成補丁文件。
可選地,根據所述補丁文件對所述需要升級軟件進行更新的步驟,包括:
從所述補丁文件中獲取每個補丁單元;
從所述補丁單元中讀取對應的偏移地址;
將所述偏移地址作為起始地址,將每個補丁單元寫入對應的存儲空間,從而完成對所述需要升級軟件的更新。
可選地,所述方法還包括驗證所述需要升級軟件進行更新完成的步驟,包括:
獲取每個補丁單元中的數據寫入存儲空間后的結束地址;
根據所述結束地址和所述起始地址獲取實際更新數據;
若所述實際更新數據與所述補丁單元中的數據大小相同且數據內容一致,則確定更新完成,否則更新失敗。
可選地,根據所述補丁文件對所述需要升級軟件進行更新的步驟之前,包括:
確定所述原始文件為所述需要升級軟件的全部數據或者分區(qū)數據;
若所述原始文件為所述需要升級軟件的全部數據,則對所述全部數據進行更新;
若所述原始文件為所述需要升級軟件的分區(qū)數據,則對所述分區(qū)數據進行更新。
根據本申請實施例的第二方面,提供一種適于嵌入式系統(tǒng)的差量式補丁升級裝置,所述裝置包括:
文件獲取模塊,用于獲取需要升級軟件的原始文件與所述需要升級軟件對應的目標文件;
補丁生成模塊,用于在確定所述原始文件和所述目標文件存在差異數據時生成所述原始文件的補丁文件;
補丁更新模塊,用于根據所述補丁文件對所述需要升級軟件進行更新。
可選地,所述文件獲取模塊包括:
單元數據獲取單元,用于依次從所述原始文件和所述目標文件中讀取預設大小的文件數據,得到原始單元數據和目標單元數據;
單元數據比較單元,用于比較所述原始單元數據和所述目標單元數據是否存在差異數據;
補丁文件生成單元,用于在所述原始單元數據和所述目標單元數據存在差異數據時,生成預設大小且數據內容為所述目標單元數據的補丁單元;所述原始文件的多個原始單元數據對應的補丁單元形成補丁文件。
可選地,所述補丁更新模塊包括:
補丁單元獲取單元,用于從所述補丁文件中獲取每個補丁單元;
偏移地址讀取單元,用于從所述補丁單元中讀取對應的偏移地址;
補丁單元寫入單元,用于把所述偏移地址作為起始地址,將每個補丁單元寫入對應的存儲空間,從而完成對所述需要升級軟件的更新。
可選地,所述裝置還包括更新驗證模塊,所述更新驗證模塊包括:
結束地址獲取單元,用于獲取每個補丁單元中的數據寫入存儲空間后的結束地址;
更新數據獲取單元,用于根據所述結束地址和所述起始地址獲取實際更新數據;
更新驗證單元,用于在所述實際更新數據與所述補丁單元中的數據大小相同且數據內容一致時,則確定更新完成,否則更新失敗。
可選地,所述補丁更新模塊還包括:
更新條件獲取單元,用于獲取所述嵌入式系統(tǒng)的當前運行環(huán)境是否滿足更新條件;
補丁更新單元,用于在滿足更新條件時,讀取所述補丁文件對所述需要升級軟件進行更新。
本申請的實施例提供的技術方案可以包括以下有益效果:
本申請實施例提供的上述方法,可以獲取需要升級軟件的原始文件與對應的目標文件,然后確定所述原始文件和所述目標文件存在差異數據時生成所述原始文件的補丁文件,最后根據上述補丁文件對需要升級軟件進行更新??梢?,本申請實施例根據差異數據生成補丁文件,由于該補丁文件僅包括差異數據,且分為多個補丁單元,從而可以減小每次補丁更新時的數據量,解決相關技術中升級文件過大用時過長導致升級失敗的問題,從而提升用戶體驗。
應當理解的是,以上的一般描述和后文的細節(jié)描述僅是示例性和解釋性的,并不能限制本申請。
附圖說明
此處的附圖被并入說明書中并構成本說明書的一部分,示出了符合本發(fā)明的實施例,并與說明書一起用于解釋本發(fā)明的原理。
圖1是本申請一實施例提供的適于嵌入式系統(tǒng)的差量式補丁升級方法的流程示意圖;
圖2是本申請另一實施例提供的適于嵌入式系統(tǒng)的差量式補丁升級方法的流程示意圖;
圖3是本申請再一實施例提供的適于嵌入式系統(tǒng)的差量式補丁升級方法的流程示意圖;
圖4是本申請又一實施例提供的適于嵌入式系統(tǒng)的差量式補丁升級方法的流程示意圖;
圖5是本申請又一實施例提供的適于嵌入式系統(tǒng)的差量式補丁升級方法的流程示意圖;
圖6是本申請又一實施例提供的適于嵌入式系統(tǒng)的差量式補丁升級方法的流程示意圖;
圖7是本申請又一實施例提供的適于嵌入式系統(tǒng)的差量式補丁升級方法的流程示意圖;
圖8是本申請一實施例提供的適于嵌入式系統(tǒng)的差量式補丁升級裝置的結構示意圖;
圖9是本申請另一實施例提供的適于嵌入式系統(tǒng)的差量式補丁升級裝置的結構示意圖;
圖10是本申請再一實施例提供的適于嵌入式系統(tǒng)的差量式補丁升級裝置的結構示意圖;
圖11是本申請又一實施例提供的適于嵌入式系統(tǒng)的差量式補丁升級裝置的結構示意圖;
圖12是本申請又一實施例提供的適于嵌入式系統(tǒng)的差量式補丁升級裝置的結構示意圖;
圖13是本申請又一實施例提供的適于嵌入式系統(tǒng)的差量式補丁升級裝置的結構示意圖。
具體實施方式
這里將詳細地對示例性實施例進行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數字表示相同或相似的要素。以下示例性實施例中所描述的實施方式并不代表與本發(fā)明相一致的所有實施方式。相反,它們僅是與如所附權利要求書中所詳述的、本發(fā)明的一些方面相一致的裝置和方法的例子。
圖1是根據一示例性實施例示出的適于嵌入式系統(tǒng)的差量式補丁升級方法的流程示意圖。如圖1所示,該差量式補丁升級方法,包括:
步驟101,獲取需要升級軟件的原始文件與所述需要升級軟件對應的目標文件。
需要說明的是,上述原始文件可以是嵌入式系統(tǒng)的系統(tǒng)文件,或者運行在該嵌入式系統(tǒng)的應用軟件的應用文件。上述目標文件是為上述原始文件需要更新的數據。
在步驟101中,獲取需要升級軟件的原始文件,可以直接獲取原始文件在存儲位置的起始地址。在確定原始文件的起始地址后,可以讀取該原始文件中的全部數據。
在步驟101中,在確定需要升級軟件之后,可以直接下載需要升級軟件的目標文件。當然,也可以直接下載到嵌入式系統(tǒng)對應存儲設備flash中,確定該目標文件的存儲位置的起始地址。
需要說明的是,本申請實施例中確定需要升級軟件可以由用戶主動申請,也可以由嵌入式系統(tǒng)定時或者隨機檢測。當檢測到需要升級軟件相對應的目標文件時,則獲取原始文件和目標文件各自的起始地址。
步驟102,確定所述原始文件和所述目標文件存在差異數據時生成所述原始文件的補丁文件。
在步驟102中,從各自的起始地址分別讀取原始文件和目標文件。作為一實施例,可以將原始文件和目標文件全部讀取。然后比較該原始文件和目標文件,從而可以確定兩者之間的差異數據;然后在原始文件與目標文件存在差異數據時,生成該原始文件的補丁文件。例如,該補丁文件可以包括多個預設大小的補丁單元。
作為另一實施例,如圖2所示,根據差異數據生成原始文件的補丁文件的步驟包括:
步驟201,依次從原始文件和目標文件中讀取預設大小的文件數據,得到原始單元數據和目標單元數據;
步驟202,比較原始單元數據和目標單元數據是否存在差異數據;
步驟203,若存在差異數據,則生成預設大小且數據內容為所述目標單元數據的生成補丁單元;上述原始文件的多個原始單元數據對應的補丁單元形成補丁文件。
需要說明的是,本申請實施例中,預設大小可以根據嵌入式系統(tǒng)中存儲設備flash的最小擦寫單元的大小進行設置。例如,flash的最小擦寫單元的大小為4kb字節(jié),則該預設大小可以設置為4kb字節(jié)。當然,本領域技術人員也可以根據實際場景進行設置,例如設置2kb字節(jié),8kb字節(jié),16kb字節(jié)等,本申請實施例不作限定。
本申請一實施例中,每次讀取預設大小的文件數據,即每次從原始文件讀取到原始單元數據,再從目標文件讀取到目標單元數據。然后,比較每次讀取的原始單元數據和目標單元數據,可以確定單元數據兩個之間的差異數據,然后根據該目標單元數據生成該原始單元數據的補丁單元。之后,繼續(xù)從原始文件和目標文件讀取預設大小的文件數據,然后繼續(xù)比較原始單元數據和目標單元數據,在單元數據兩者之間存在差異數據時,生成預設大小且數據內定與對應目標單元數據相同的的對應于該原始單元數據的補丁單元。直至原始文件與目標文件全部比較完成,得到的多個補丁單元形成該目標文件的補丁文件。
可見,本申請實施例中,比較原始文件與目標文件時,以預設大小為單位進行對比;當原始文件和目標文件每個單位存在差異數據時,針對該單位生成補丁單元。與整個原始文件比較相比,將原始文件拆分為預設大小的原始單元數據,可以減少每次生成補丁文件的大小。
步驟103,根據所述補丁文件對所述需要升級軟件進行更新。
在步驟103中,作為一實施例,如圖3所示,對需要升級軟件更新的步驟包括:
步驟301,從補丁文件中獲取每個補丁單元;
步驟302,從補丁單元中讀取對應的偏移地址;
步驟303,將偏移地址作為起始地址,將每個補丁單元寫入對應的存儲空間,從而完成對需要升級軟件的更新。
本申請實施例中,每次從補丁文件中讀取一個補丁單元,然后從該補丁單元中讀取對應的偏移地址。需要說明的是,該偏移地址是對應于原始單元數據的起始地址的偏移量。
本申請實施例中,上述偏移地址作為該補丁單元的起始地址,然后將該補丁單元對應的數據依次寫入到起始地址。將補丁文件的多個補丁單元依次寫入到各自對應的存儲位置。
實際應用中,需要升級軟件并非全部需要更新,而是分區(qū)需要更新。為此,在步驟103之前,如圖4所示,本申請一實施例提供的差量式補丁升級方法還包括:
步驟401,確定原始文件為需要升級軟件的全部數據或者分區(qū)數據;
步驟402,若原始文件為需要升級軟件的全部數據,則對全部數據進行更新;
步驟403,若原始文件為需要升級軟件的分區(qū)數據,則對分區(qū)數據進行更新。
本申請一實施例中,獲取原始文件的起始地址,若該起始位置為需要升級軟件的起始地址,則確定該原始文件為需要升級軟件的全部數據;若該起始位置為需要升級軟件的其中一個分區(qū)的起始地址,則確定該原始文件需要升級軟件的分區(qū)數據。
本申請另一實施例中,可以獲取需要升級軟件對應的全部數據的大小,然后與原始文件的大小相比較,若兩者相等,則確定原始文件為需要升級軟件的全部數據;若兩者不等,則確定該原始文件需要升級軟件的分區(qū)數據。
為保證更新的準確性,如圖5所示,本申請?zhí)峁┑牟盍渴窖a丁升級方法還包括:
步驟501,獲取每個補丁單元中的數據寫入存儲空間后的結束地址;
步驟502,根據結束地址和起始地址獲取實際更新數據;
步驟503,若實際更新數據與補丁單元中的數據大小相同且數據內容一致,則確定更新完成,否則更新失敗。
本申請一實施例中,獲取每個補丁單元中的數據寫入存儲空間后對應的結束地址。根據該補丁單元的起始地址和結束地址獲取實際更新數據。將上述實際更新數據與該補丁單元中數據大小是否相等且數據內容是否一致,在補丁單元中數據大小與實際更新數據大小相等且數據內容一致時,確定更新完成且準確。否則補丁單元更新失敗,重新更新。
在需要升級軟件更新的過程中,可能會遇到斷電等情況,導致更新過程失敗。為此,如圖6所示,本申請一實施例提供的差量式補丁升級方法還包括:
步驟601,獲取嵌入式系統(tǒng)的當前運行環(huán)境是否滿足更新條件;
步驟602,當滿足更新條件時,則讀取補丁文件對需要升級軟件進行更新。
本申請一實施例中,在更新過程失敗后,嵌入式系統(tǒng)獲取當前運行環(huán)境,該當前運行環(huán)境可以包括是否上電、內存空間是否充足、目標文件是否存在、補丁文件是否存在等,當當前運行環(huán)境滿足更新條件時,嵌入式系統(tǒng)讀取補丁文件繼續(xù)對需要升級軟件進行更新。更新過程可以參考上文,在此不再贅述。
下面,以預設大小為4kb字節(jié)為例說明本申請?zhí)峁┑牟盍渴窖a丁升級方法。
如圖8所示,分別從原始文件和目標文件中讀取4kb字節(jié)的原始單元數據和目標單元數據,判斷原始單元數據和目標單元數據是否存在差異數據,若沒有差異數據,則繼續(xù)獲取4kb字節(jié)的原始單元數據和目標單元數據;若存在差異數據,則生成該原始單元數據的補丁單元,該補丁單元中的數據內容與目標單元數據相同。若原始文件和目標文件沒有對比完成,則繼續(xù)對比,直至對比完成,上述原始單元數據對應的補丁單元形成補丁文件。
在形成補丁文件之后,對需要升級軟件進行更新。從補丁文件中讀取補丁單元,并從該補丁單元中讀取其偏移地址,然后以該偏移地址作為對應原始單元數據的起始地址,然后寫入到存儲空間中更新文件。確定該原始文件是否為分區(qū)數據,則為分區(qū)數據則對該原始文件的分區(qū)進行更新,直至更新完成。若不是分區(qū)數據,則繼續(xù)更新文件。
至此,本申請?zhí)峁┑牟盍渴窖a丁升級方法,通過對原始文件和目標文件進行分單元比較,在兩個單元存在差異數據時,針對每個單元生成相應的補丁單元。在更新過程中,以每個補丁單元作為升級數據??梢?,本申請實施例通過減小每次更新時的補丁文件的大小,可以解決需要升級軟件在升級超時時而引起的失敗的問題,從而可以提升升級速度,提升升級速率。
本申請一實施例還提供了一種適于嵌入式系統(tǒng)的差量式補丁升級裝置,如圖8所示,所述裝置包括:
文件獲取模塊801,用于獲取需要升級軟件的原始文件與所述需要升級軟件對應的目標文件;
補丁生成模塊802,用于在確定所述原始文件和所述目標文件存在差異數據時生成所述原始文件的補丁文件;
補丁更新模塊803,用于根據所述補丁文件對所述需要升級軟件進行更新。
可選地,如圖9所示,文件獲取模塊801包括:
單元數據獲取單元901,用于依次從所述原始文件和所述目標文件中讀取預設大小的文件數據,得到原始單元數據和目標單元數據;
單元數據比較單元902,用于比較所述原始單元數據和所述目標單元數據是否存在差異數據;
補丁文件生成單元903,用于在所述原始單元數據和所述目標單元數據存在差異數據時,生成預設大小且數據內容為所述目標單元數據的補丁單元;所述原始文件的多個原始單元數據對應的補丁單元形成補丁文件。
可選地,如圖10所示,補丁更新模塊803包括:
補丁單元獲取單元,用于從所述補丁文件中獲取每個補丁單元;
偏移地址讀取單元,用于從所述補丁單元中讀取對應的偏移地址;
補丁單元寫入單元,用于把所述偏移地址作為起始地址,將每個補丁單元寫入對應的存儲空間,從而完成對所述需要升級軟件的更新。
可選地,上述裝置還包括更新驗證模塊1100。如圖11所示,更新驗證模塊1100包括:
結束地址獲取單元1101,用于獲取每個補丁單元中的數據寫入存儲空間后的結束地址;
更新數據獲取單元1102,用于根據所述結束地址和所述起始地址獲取實際更新數據;
更新驗證單元1103,用于在所述實際更新數據與所述補丁單元中的數據大小相同且數據內容一致時,則確定更新完成,否則更新失敗。
可選地,如圖12所示,上述補丁更新模塊803還包括:
數據量確定單元1201,用于確定所述原始文件為所述需要升級軟件的全部數據或者分區(qū)數據;
補丁更新單元1202,用于在所述原始文件為所述需要升級軟件的全部數據時,對所述全部數據進行更新;以及在所述原始文件為所述需要升級軟件的分區(qū)數據時,則對所述分區(qū)數據進行更新。
可選地,如圖13所示,補丁更新模塊803還包括:
更新條件獲取單元1301,用于獲取所述嵌入式系統(tǒng)的當前運行環(huán)境是否滿足更新條件;
補丁更新單元1302,用于在滿足更新條件時,讀取所述補丁文件對所述需要升級軟件進行更新。
關于上述實施例中的裝置,其中各個單元或者模塊執(zhí)行操作的具體方式已經在有關該方法的實施例中進行了詳細描述,此處將不做詳細闡述說明。
本領域技術人員在考慮說明書及實踐這里公開的公開后,將容易想到本申請的其它實施方案。本申請旨在涵蓋本申請的任何變型、用途或者適應性變化,這些變型、用途或者適應性變化遵循本申請的一般性原理并包括本申請未公開的本技術領域中的公知常識或慣用技術手段。說明書和實施例僅被視為示例性的,本申請的真正范圍和精神由下面的權利要求指出。
應當理解的是,本申請并不局限于上面已經描述并在附圖中示出的精確結構,并且可以在不脫離其范圍進行各種修改和改變。本申請的范圍僅由所附的權利要求來限制。