国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      固件比對(duì)方法和裝置與流程

      文檔序號(hào):11519387閱讀:313來源:國(guó)知局
      固件比對(duì)方法和裝置與流程

      本發(fā)明涉及通信技術(shù)領(lǐng)域,尤其是涉及一固件比對(duì)方法和裝置。



      背景技術(shù):

      zigbee(紫蜂協(xié)議)是一種類似于wi-fi的無線通訊協(xié)議,采用zigbee技術(shù)進(jìn)行通信的設(shè)備稱為zigbee設(shè)備。與wi-fi相比,zigbee具有組網(wǎng)方便、功耗較低的優(yōu)點(diǎn),在一些網(wǎng)絡(luò)規(guī)模較大、功耗要求較高的場(chǎng)景(如智能家居領(lǐng)域)中得到廣泛的應(yīng)用,因此廣泛應(yīng)用于物聯(lián)網(wǎng)(internetofthings,iot)技術(shù)領(lǐng)域。每個(gè)zigbee設(shè)備都有套固定軟件系統(tǒng),簡(jiǎn)稱為固件,在實(shí)際應(yīng)用中,當(dāng)zigbee設(shè)備中的固件產(chǎn)生缺陷或者功能需要擴(kuò)展時(shí),就需要對(duì)zigbee設(shè)備的固件進(jìn)行升級(jí)更新。

      目前,對(duì)zigbee設(shè)備等物聯(lián)網(wǎng)設(shè)備的固件普遍采用整包升級(jí)的升級(jí)方式,無論新固件相比于舊固件做了多少更改都需要將整個(gè)新固件的數(shù)據(jù)傳輸?shù)皆O(shè)備端再進(jìn)行升級(jí)。然而,采用zigbee協(xié)議的設(shè)備之間互相通信的傳輸速率較低,因此在部署了zigbee設(shè)備的網(wǎng)絡(luò)中,對(duì)zigbee設(shè)備進(jìn)行固件升級(jí)通常需要耗費(fèi)較長(zhǎng)的時(shí)間(每個(gè)設(shè)備都要數(shù)十分鐘),特別是當(dāng)zigbee設(shè)備比較多時(shí),完成所有設(shè)備的升級(jí)所耗費(fèi)的時(shí)間將會(huì)非常長(zhǎng),導(dǎo)致升級(jí)效率極低,升級(jí)成本較高。

      如果像手機(jī)等移動(dòng)終端那樣進(jìn)行差分升級(jí),則需要對(duì)新舊固件進(jìn)行比對(duì),獲取新舊固件的差異信息。然而,與移動(dòng)終端具有文件系統(tǒng)的固件不同,zigbee設(shè)備的固件是二進(jìn)制數(shù)據(jù),如果直接將兩個(gè)固件比對(duì)將具有很大的盲目性,比對(duì)效率極低,而且比對(duì)效果差,不能得到較優(yōu)的比對(duì)結(jié)果。

      因此,如何改進(jìn)zigbee設(shè)備的固件的比對(duì)方式,提高比對(duì)效率和比對(duì)效果,實(shí)現(xiàn)zigbee設(shè)備等物聯(lián)網(wǎng)設(shè)備的固件的差分升級(jí),是當(dāng)前亟需解決的技術(shù)問題。



      技術(shù)實(shí)現(xiàn)要素:

      本發(fā)明實(shí)施例的主要目的在于提供一種固件比對(duì)方法和裝置,旨在提高比對(duì)效率和比對(duì)效果。

      為達(dá)以上目的,一方面提出一種固件比對(duì)方法,所述方法包括以下步驟:

      獲取第一固件和第二固件的內(nèi)存映射文件;

      分別根據(jù)所述第一固件的內(nèi)存映射文件和所述第二固件的內(nèi)存映射文件建立參數(shù)條目;

      比對(duì)所述第一固件的參數(shù)條目與所述第二固件的參數(shù)條目,根據(jù)比對(duì)結(jié)果獲取所述第一固件與所述第二固件的差異信息。

      可選地,所述分別根據(jù)所述第一固件的內(nèi)存映射文件和所述第二固件的內(nèi)存映射文件建立參數(shù)條目包括:

      從所述第一固件的內(nèi)存映射文件中獲取每一個(gè)參數(shù)所在的文件名、參數(shù)名和參數(shù)內(nèi)容,將每一個(gè)參數(shù)所在的文件名、參數(shù)名和參數(shù)內(nèi)容建立為一個(gè)參數(shù)條目;從所述第二固件的內(nèi)存映射文件中獲取每一個(gè)參數(shù)所在的文件名、參數(shù)名和參數(shù)內(nèi)容,將每一個(gè)參數(shù)所在的文件名、參數(shù)名和參數(shù)內(nèi)容建立為一個(gè)參數(shù)條目。

      可選地,所述比對(duì)所述第一固件的參數(shù)條目與所述第二固件的參數(shù)條目包括:

      依次從所述第一固件的參數(shù)條目中提取出一個(gè)參數(shù)條目作為比對(duì)條目;

      判斷所述第二固件的參數(shù)條目中是否有與所述比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目;

      當(dāng)沒有與所述比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目時(shí),判定所述比對(duì)條目對(duì)應(yīng)的參數(shù)為所述第一固件中相對(duì)于所述第二固件新增的參數(shù);

      當(dāng)有與所述比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目時(shí),判斷所述比對(duì)條目與所述目標(biāo)條目的參數(shù)內(nèi)容是否相同;

      當(dāng)所述比對(duì)條目與所述目標(biāo)條目的參數(shù)內(nèi)容不同時(shí),判定所述比對(duì)條目對(duì)應(yīng)的參數(shù)為所述第一固件中相對(duì)于所述第二固件做過更改的參數(shù);

      當(dāng)所述比對(duì)條目與所述目標(biāo)條目的參數(shù)內(nèi)容相同時(shí),判定所述比對(duì)條目對(duì)應(yīng)的參數(shù)為所述第一固件中相對(duì)于所述第二固件未作更改的參數(shù)。

      可選地,所述判斷所述第二固件的參數(shù)條目中是否有與所述比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目包括:

      判斷所述第二固件的參數(shù)條目中是否有與所述比對(duì)條目具有相同的文件名的參數(shù)條目;

      當(dāng)有與所述比對(duì)條目具有相同的文件名的參數(shù)條目時(shí),判斷所述參數(shù)條目中是否有與所述比對(duì)條目具有相同的參數(shù)名的參數(shù)條目;

      當(dāng)有與所述比對(duì)條目具有相同參數(shù)名的參數(shù)條目時(shí),判定所述第二固件的參數(shù)條目中有與所述比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目。

      可選地,所述分別根據(jù)所述第一固件的內(nèi)存映射文件和所述第二固件的內(nèi)存映射文件建立參數(shù)條目的步驟之后還包括:

      以所述參數(shù)條目中的文件名作為排序鍵值,根據(jù)字符順序分別對(duì)所述第一固件中的所有參數(shù)條目和所述第二固件中的所有參數(shù)條目進(jìn)行排序。

      可選地,所述分別根據(jù)所述第一固件的內(nèi)存映射文件和所述第二固件的內(nèi)存映射文件建立參數(shù)條目的步驟之后還包括:

      以所述參數(shù)條目中的文件名作為第一排序鍵值,參數(shù)名作為第二排序鍵值,根據(jù)字符順序分別對(duì)所述第一固件中的所有參數(shù)條目和所述第二固件中的所有參數(shù)條目進(jìn)行排序。

      可選地,所述參數(shù)條目包括函數(shù)條目和變量條目。

      另一方面,提出一種固件比對(duì)裝置,所述裝置包括:

      獲取模塊,用于獲取第一固件和第二固件的內(nèi)存映射文件;

      建立模塊,用于分別根據(jù)所述第一固件的內(nèi)存映射文件和所述第二固件的內(nèi)存映射文件建立參數(shù)條目;

      比對(duì)模塊,用于比對(duì)所述第一固件的參數(shù)條目與所述第二固件的參數(shù)條目,根據(jù)比對(duì)結(jié)果獲取所述第一固件與所述第二固件的差異信息。

      可選地,所述建立模塊包括:

      第一建立單元,用于從所述第一固件的內(nèi)存映射文件中獲取每一個(gè)參數(shù)所在的文件名、參數(shù)名和參數(shù)內(nèi)容,將每一個(gè)參數(shù)所在的文件名、參數(shù)名和參數(shù)內(nèi)容建立為一個(gè)參數(shù)條目;

      第二建立單元,用于從所述第二固件的內(nèi)存映射文件中獲取每一個(gè)參數(shù)所在的文件名、參數(shù)名和參數(shù)內(nèi)容,將每一個(gè)參數(shù)所在的文件名、參數(shù)名和參數(shù)內(nèi)容建立為一個(gè)參數(shù)條目。

      可選地,所述比對(duì)模塊包括:

      提取單元,用于依次從所述第一固件的參數(shù)條目中提取出一個(gè)參數(shù)條目作為比對(duì)條目;

      第一判斷單元,用于判斷所述第二固件的參數(shù)條目中是否有與所述比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目;當(dāng)沒有與所述比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目時(shí),判定所述比對(duì)條目對(duì)應(yīng)的參數(shù)為所述第一固件中相對(duì)于所述第二固件新增的參數(shù);

      第二判斷單元,用于當(dāng)有與所述比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目時(shí),判斷所述比對(duì)條目與所述目標(biāo)條目的參數(shù)內(nèi)容是否相同;當(dāng)所述比對(duì)條目與所述目標(biāo)條目的參數(shù)內(nèi)容不同時(shí),判定所述比對(duì)條目對(duì)應(yīng)的參數(shù)為所述第一固件中相對(duì)于所述第二固件做過更改的參數(shù);當(dāng)所述比對(duì)條目與所述目標(biāo)條目的參數(shù)內(nèi)容相同時(shí),判定所述比對(duì)條目對(duì)應(yīng)的參數(shù)為所述第一固件中相對(duì)于所述第二固件未作更改的參數(shù)。

      可選地,所述第一判斷單元用于:

      判斷所述第二固件的參數(shù)條目中是否有與所述比對(duì)條目具有相同的文件名的參數(shù)條目;當(dāng)有與所述比對(duì)條目具有相同的文件名的參數(shù)條目時(shí),判斷所述參數(shù)條目中是否有與所述比對(duì)條目具有相同的參數(shù)名的參數(shù)條目;當(dāng)有與所述比對(duì)條目具有相同參數(shù)名的參數(shù)條目時(shí),判定所述第二固件的參數(shù)條目中有與所述比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目。

      可選地,所述裝置還包括排序模塊,所述排序模塊用于:以所述參數(shù)條目中的文件名作為排序鍵值,根據(jù)字符順序分別對(duì)所述第一固件中的所有參數(shù)條目和所述第二固件中的所有參數(shù)條目進(jìn)行排序。

      可選地,所述裝置還包括排序模塊,所述排序模塊用于:以所述參數(shù)條目中的文件名作為第一排序鍵值,參數(shù)名作為第二排序鍵值,根據(jù)字符順序分別對(duì)所述第一固件中的所有參數(shù)條目和所述第二固件中的所有參數(shù)條目進(jìn)行排序。

      本發(fā)明實(shí)施例所提供的一種固件比對(duì)方法,根據(jù)兩個(gè)固件的內(nèi)存映射文件分別建立各自的參數(shù)條目作為最小的參照單元,通過對(duì)兩個(gè)固件最小的參照單元進(jìn)行針對(duì)性的比對(duì),可以快速準(zhǔn)確的獲取最優(yōu)的比對(duì)結(jié)果,得到準(zhǔn)確的差異信息,大大提高了固件的比對(duì)效率和比對(duì)效果,為物聯(lián)網(wǎng)設(shè)備的固件實(shí)現(xiàn)差分升級(jí)創(chuàng)造了條件,可以有效提高升級(jí)效率。

      附圖說明

      圖1是本發(fā)明的網(wǎng)關(guān)升級(jí)方法一實(shí)施例的流程圖;

      圖2是圖1中步驟s13的具體流程圖;

      圖3是圖2中步驟s132的具體流程圖;

      圖4是本發(fā)明的網(wǎng)關(guān)升級(jí)裝置第一實(shí)施例的模塊示意圖;

      圖5是圖4中的建立模塊的模塊示意圖;

      圖6是圖4中的比對(duì)模塊的模塊示意圖;

      圖7是本發(fā)明的網(wǎng)關(guān)升級(jí)裝置第二實(shí)施例的模塊示意圖。

      本發(fā)明目的的實(shí)現(xiàn)、功能特點(diǎn)及優(yōu)點(diǎn)將結(jié)合實(shí)施例,參照附圖做進(jìn)一步說明。

      具體實(shí)施方式

      應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明的一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。

      需要說明,本發(fā)明實(shí)施例中所有方向性指示(諸如上、下、左、右、前、后……)僅用于解釋在某一特定姿態(tài)(如附圖所示)下各部件之間的相對(duì)位置關(guān)系、運(yùn)動(dòng)情況等,如果該特定姿態(tài)發(fā)生改變時(shí),則該方向性指示也相應(yīng)地隨之改變。

      另外,在本發(fā)明中涉及“第一”、“第二”等的描述僅用于描述目的,而不能理解為指示或暗示其相對(duì)重要性或者隱含指明所指示的技術(shù)特征的數(shù)量。由此,限定有“第一”、“第二”的特征可以明示或者隱含地包括至少一個(gè)該特征。另外,各個(gè)實(shí)施例之間的技術(shù)方案可以相互結(jié)合,但是必須是以本領(lǐng)域普通技術(shù)人員能夠?qū)崿F(xiàn)為基礎(chǔ),當(dāng)技術(shù)方案的結(jié)合出現(xiàn)相互矛盾或無法實(shí)現(xiàn)時(shí)應(yīng)當(dāng)認(rèn)為這種技術(shù)方案的結(jié)合不存在,也不在本發(fā)明要求的保護(hù)范圍之內(nèi)。

      參見圖1,提出本發(fā)明的固件比對(duì)方法一實(shí)施例,所述方法可以應(yīng)用于服務(wù)器、網(wǎng)關(guān)、終端設(shè)備等,所述方法包括以下步驟:

      s11、獲取第一固件和第二固件的內(nèi)存映射文件。

      s12、分別根據(jù)第一固件的內(nèi)存映射文件和第二固件的內(nèi)存映射文件建立參數(shù)條目。

      s13、比對(duì)第一固件的參數(shù)條目與第二固件的參數(shù)條目,根據(jù)比對(duì)結(jié)果獲取第一固件與第二固件的差異信息。

      本發(fā)明實(shí)施例所述的固件,主要指為二進(jìn)制數(shù)據(jù)的zigbee設(shè)備的固件,當(dāng)然也可以是其它的固件。本發(fā)明實(shí)施例中,第一固件和第二固件為兩個(gè)不同的固件,通常為兩個(gè)不同版本的固件,如:第一固件為新版本的固件,簡(jiǎn)稱新固件,第二固件為舊版本的固件,簡(jiǎn)稱舊固件。

      由于zigbee設(shè)備的固件是二進(jìn)制數(shù)據(jù),直接將兩個(gè)固件比對(duì)具有很大的盲目性且不能得到一個(gè)最優(yōu)的比對(duì)結(jié)果。一般情況從源代碼到固件生成過程中會(huì)伴隨著一個(gè)內(nèi)存映射文件的生成,該內(nèi)存映射文件里面描述了功能模塊對(duì)應(yīng)的固件地址,利用這些描述信息就能夠準(zhǔn)確高效比對(duì)出不同版本固件的異同。

      因此,步驟s11中,首先獲取第一固件和第二固件兩個(gè)固件各自的內(nèi)存映射文件(.map)。本發(fā)明實(shí)施例中,內(nèi)存映射文件中包括了多個(gè)代碼段(code)和多個(gè)數(shù)據(jù)段(data),其中代碼段是由各種函數(shù)組成,而數(shù)據(jù)段是由各種變量組成。也就是說,本發(fā)明實(shí)施例中,內(nèi)存映射文件主要包括函數(shù)和變量?jī)煞N參數(shù)。當(dāng)然,在其它實(shí)施例中,固件的內(nèi)存映射文件也可能還包括其它參數(shù),或者包括函數(shù)、變量和其它參數(shù)中的任意一種或者至少兩種參數(shù)。

      步驟s12中,從第一固件的內(nèi)存映射文件中獲取每一個(gè)參數(shù)所在的文件名、參數(shù)名和參數(shù)內(nèi)容,將每一個(gè)參數(shù)所在的文件名、參數(shù)名和參數(shù)內(nèi)容建立為一個(gè)參數(shù)條目,獲取至少兩個(gè)參數(shù)條目;從第二固件的內(nèi)存映射文件中獲取每一個(gè)參數(shù)所在的文件名、參數(shù)名和參數(shù)內(nèi)容,將每一個(gè)參數(shù)所在的文件名、參數(shù)名和參數(shù)內(nèi)容建立為一個(gè)參數(shù)條目,獲取至少兩個(gè)參數(shù)條目。

      本發(fā)明實(shí)施例中,內(nèi)存映射文件包括函數(shù)和變量?jī)煞N參數(shù),因此建立的參數(shù)條目包括函數(shù)條目和變量條目。每一個(gè)函數(shù)條目由函數(shù)所在的文件名、函數(shù)名和代碼段(即參數(shù)內(nèi)容)組成,每一個(gè)變量條目由變量所在的文件名、變量名和變量值(即參數(shù)內(nèi)容)組成。

      例如,針對(duì)固件的內(nèi)存映射文件中的代碼段,建立該內(nèi)存映射文件中代碼段的所有函數(shù)條目。具體的,從內(nèi)存映射文件中獲取某個(gè)函數(shù)的描述信息,根據(jù)描述信息獲取該函數(shù)所在的文件名(函數(shù)所在的文件名指的是承載函數(shù)的源文件的名稱),以及該函數(shù)的長(zhǎng)度和在固件中的起始地址,根據(jù)該函數(shù)的長(zhǎng)度和在固件中的起始地址從固件中找到對(duì)應(yīng)的代碼,獲取該函數(shù)的函數(shù)名和代碼段;然后把該函數(shù)所在的文件名、函數(shù)名和代碼段保存到同一個(gè)條目中,完成一個(gè)函數(shù)條目的建立。以此類推,完成所有函數(shù)條目的建立。

      可選地,當(dāng)代碼段較長(zhǎng)時(shí),也可以直接將函數(shù)的長(zhǎng)度和在固件中的起始地址作為函數(shù)條目的參數(shù)內(nèi)容。

      可選地,當(dāng)代碼段較長(zhǎng)時(shí),也可以對(duì)代碼段進(jìn)行哈希算法校驗(yàn),如安全哈希算法(securehashalgorithm,sha1)校驗(yàn)、信息摘要算法5(message-digestalgorithm5,md5)校驗(yàn)等,獲得對(duì)應(yīng)的哈希值(如sha1值、md5值等),將哈希值作為函數(shù)條目的參數(shù)內(nèi)容。

      又如,針對(duì)固件的內(nèi)存映射文件中的數(shù)據(jù)段,建立該內(nèi)存映射文件中數(shù)據(jù)段的所有變量條目。具體的,從內(nèi)存映射文件中獲取某個(gè)變量的描述信息,根據(jù)描述信息獲取該變量所在的文件名(變量所在的文件名指的是承載數(shù)據(jù)的源文件的名稱)以及該變量的地址,根據(jù)變量的地址從固件中找到對(duì)應(yīng)的數(shù)據(jù),獲取該變量的變量名和變量值;然后把該變量所在的文件名、變量名和變量值保存到同一個(gè)條目中,完成一個(gè)函數(shù)條目的建立。以此類推,完成所有變量條目的建立。

      進(jìn)一步地,為了提高后續(xù)步驟s13的比對(duì)效率,在步驟s12之后、s13之前,還可以對(duì)建立的參數(shù)條目按照預(yù)設(shè)的排序規(guī)則進(jìn)行排序。例如,按照預(yù)設(shè)的排序規(guī)則對(duì)第一固件中的所有函數(shù)條目進(jìn)行排序,所有變量條目進(jìn)行排序;按照預(yù)設(shè)的排序規(guī)則對(duì)第二固件中的所有函數(shù)條目進(jìn)行排序,所有變量條目進(jìn)行排序。

      可選地,以參數(shù)條目中的文件名作為排序鍵值,根據(jù)字符順序分別對(duì)第一固件中的所有參數(shù)條目和第二固件中的所有參數(shù)條目進(jìn)行排序,并可以生成排序列表,所述字符如字母、數(shù)字等,如以“a、b、c、d…”的順序排序或以“1、2、3、4…”的順序排序。具體的,首先以文件名的第一個(gè)字符作為排序鍵值對(duì)參數(shù)條目進(jìn)行排序,對(duì)于第一個(gè)字符相同的參數(shù)條目,再以文件名的第二個(gè)字符作為排序鍵值進(jìn)行排序,依此類推。

      可選地,以參數(shù)條目中的文件名作為第一排序鍵值,參數(shù)名作為第二排序鍵值,根據(jù)字符順序分別對(duì)第一固件中的所有參數(shù)條目和第二固件中的所有參數(shù)條目進(jìn)行排序,并可以生成排序列表,所述字符如字母、數(shù)字等,如以“a、b、c、d…”的順序排序或以“1、2、3、4…”的順序排序。具體的,首先像前一個(gè)方案那樣,依次以文件名的各個(gè)字符作為第一排序鍵值對(duì)參數(shù)條目進(jìn)行排序,對(duì)于文件名相同的參數(shù)條目,再依次以參數(shù)名的各個(gè)字符作為第二排序鍵值進(jìn)行排序。

      本領(lǐng)域技術(shù)人員可以理解,除了前述列舉的排序規(guī)則外,還可以采用現(xiàn)有技術(shù)中的類似規(guī)則或其它規(guī)則進(jìn)行排序,本發(fā)明對(duì)此不再一一列舉贅述。

      步驟s13中,本發(fā)明實(shí)施例分別比對(duì)第一固件的函數(shù)條目與第二固件的函數(shù)條目,以及第一固件的變量條目和第二固件的變量條目,根據(jù)比對(duì)結(jié)果獲取兩個(gè)固件的函數(shù)和變量?jī)煞N參數(shù)數(shù)據(jù)的差異信息。

      如圖2所示,比對(duì)第一固件的參數(shù)條目與第二固件的參數(shù)條目的具體流程如下:

      s131、依次從第一固件的參數(shù)條目中提取出一個(gè)參數(shù)條目作為比對(duì)條目。

      本步驟s131中,依次將第一固件中的每一個(gè)參數(shù)條目提取出來作為比對(duì)條目,以與第二固件中的所有參數(shù)條目進(jìn)行比對(duì)。例如,依次將第一固件中的每一個(gè)函數(shù)條目提取出來作為比對(duì)條目,以與第二固件中的所有函數(shù)條目進(jìn)行比對(duì);依次將第一固件中的每一個(gè)變量條目提取出來作為比對(duì)條目,以與第二固件中的所有變量條目進(jìn)行比對(duì)。

      可選地,當(dāng)?shù)谝还碳械膮?shù)條目預(yù)先按照字符順序進(jìn)行了排序時(shí),則可以按照參數(shù)條目的文件名和參數(shù)名的字符順序依次提取參數(shù)條目。

      s132、判斷第二固件的參數(shù)條目中是否有與比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目。當(dāng)沒有與比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目時(shí),進(jìn)入步驟s133;當(dāng)有與比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目時(shí),進(jìn)入步驟s134。

      本步驟s132中,將第一固件中提取出來的比對(duì)條目與第二固件中的所有參數(shù)條目進(jìn)行比較,判斷第二固件的參數(shù)條目中是否有與比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目。

      如圖3所示,判斷第二固件的參數(shù)條目中是否有與比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目的具體流程如下:

      s101、判斷第二固件的參數(shù)條目中是否有與比對(duì)條目具有相同的文件名的參數(shù)條目。當(dāng)有與比對(duì)條目具有相同的文件名的參數(shù)條目時(shí),進(jìn)入步驟s102;當(dāng)沒有與比對(duì)條目具有相同的文件名的參數(shù)條目時(shí),進(jìn)入步驟s104。

      本步驟s101中,將比對(duì)條目的文件名與第二固件的所有參數(shù)條目的文件名進(jìn)行比較,看能否從這些參數(shù)條目中查找出與比對(duì)條目具有相同的文件名的一個(gè)或至少兩個(gè)參數(shù)條目。

      可選地,當(dāng)?shù)诙碳械膮?shù)條目預(yù)先以文件名作為排序鍵值按照字符順序進(jìn)行了排序時(shí),則可以按照參數(shù)條目的文件名的字符順序依次在第二固件的參數(shù)條目中進(jìn)行查找,從而提高查找效率。例如,如果比對(duì)條目的文件名的首字母為b,則直接在第二固件中文件名的首字母為b的參數(shù)條目系列中去查找,如果沒有查找到,則結(jié)束查找,不用再到其它參數(shù)條目系列中去查找了,從而節(jié)省查找時(shí)間,加快查找速度。

      s102、判斷與比對(duì)條目具有相同的文件名的參數(shù)條目中是否有與比對(duì)條目具有相同的參數(shù)名的參數(shù)條目。當(dāng)有與比對(duì)條目具有相同參數(shù)名的參數(shù)條目時(shí),進(jìn)入步驟s103;當(dāng)沒有與比對(duì)條目具有相同參數(shù)名的參數(shù)條目時(shí),進(jìn)入步驟s104。

      當(dāng)?shù)诙碳膮?shù)條目中有與比對(duì)條目具有相同的文件名的參數(shù)條目時(shí),進(jìn)一步將比對(duì)條目的參數(shù)名與這些參數(shù)條目的文件名進(jìn)行比較,看能否查找出與比對(duì)條目具有相同的參數(shù)名的參數(shù)條目。

      可選地,當(dāng)?shù)诙碳械膮?shù)條目預(yù)先以參數(shù)名作為排序鍵值按照字符順序進(jìn)行了排序時(shí),則可以按照參數(shù)條目的參數(shù)名的字符順序依次在第二固件的參數(shù)條目中進(jìn)行查找,從而提高查找效率。例如,如果比對(duì)條目的函數(shù)名的emberinit,則直接在第二固件中函數(shù)名的首字母為e的函數(shù)條目系列中去查找,如果沒有查找到,則結(jié)束查找,不用再到其它函數(shù)條目系列中去查找了,從而節(jié)省查找時(shí)間,加快查找速度。

      s103、判定第二固件的參數(shù)條目中有與比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目。

      當(dāng)?shù)诙碳哪硞€(gè)參數(shù)條目與比對(duì)條目既有相同的文件名又有相同的參數(shù)名,則認(rèn)定該參數(shù)條目為目標(biāo)條目,即判定第二固件的參數(shù)條目中有與比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目。

      s104、判定第二固件的參數(shù)條目中沒有與比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目。

      當(dāng)?shù)诙碳袥]有任何一個(gè)參數(shù)條目與比對(duì)條目具有相同的文件名時(shí),或者雖然有某一個(gè)或某些參數(shù)條目與比對(duì)條目具有相同的文件名但不具有相同的參數(shù)名時(shí),則判定第二固件的參數(shù)條目中沒有與比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目。

      s133、判定比對(duì)條目對(duì)應(yīng)的參數(shù)為第一固件中相對(duì)于第二固件新增的參數(shù)。

      當(dāng)?shù)诙碳膮?shù)條目中沒有與比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目時(shí),則判定該比對(duì)條目對(duì)應(yīng)的參數(shù)為第一固件中相對(duì)于第二固件新增的參數(shù)。

      s134、判斷比對(duì)條目與目標(biāo)條目的參數(shù)內(nèi)容是否相同。當(dāng)比對(duì)條目與所述目標(biāo)條目的參數(shù)內(nèi)容不同時(shí),進(jìn)入步驟s135;當(dāng)比對(duì)條目與目標(biāo)條目的參數(shù)內(nèi)容相同時(shí),進(jìn)入步驟s136。

      當(dāng)?shù)诙碳膮?shù)條目中有與比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目時(shí),則進(jìn)一步比較比對(duì)條目與目標(biāo)條目的參數(shù)內(nèi)容,判斷二者的參數(shù)內(nèi)容是否相同。

      例如,當(dāng)參數(shù)條目為變量條目時(shí),比較比對(duì)條目與目標(biāo)條目的變量值是否相同。

      又如,當(dāng)參數(shù)條目為函數(shù)條目時(shí),比較比對(duì)條目與目標(biāo)條目的代碼段是否完全相同。可選地,當(dāng)函數(shù)條目的參數(shù)內(nèi)容為函數(shù)的長(zhǎng)度和在固件中的起始地址作為函數(shù)條目時(shí),則需要根據(jù)比對(duì)條目和目標(biāo)條目的參數(shù)內(nèi)容分別從第一固件和第二固件中提取出對(duì)應(yīng)的代碼段進(jìn)行比較??蛇x地,當(dāng)函數(shù)條目的參數(shù)內(nèi)容為哈希值時(shí),則直接比較比對(duì)條目與目標(biāo)條目的哈希值是否相同,如比較二者的sha1值是否相同。

      s135、判定比對(duì)條目對(duì)應(yīng)的參數(shù)為第一固件中相對(duì)于第二固件做過更改的參數(shù)。

      當(dāng)?shù)诙碳膮?shù)條目中有與比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目,但該目標(biāo)條目與第一固件中的比對(duì)條目的參數(shù)內(nèi)容不同時(shí),則判定該比對(duì)條目對(duì)應(yīng)的參數(shù)為第一固件中相對(duì)于第二固件做過更改的參數(shù)。

      s136、判定比對(duì)條目對(duì)應(yīng)的參數(shù)為第一固件中相對(duì)于第二固件未作更改的參數(shù)。

      當(dāng)?shù)诙碳膮?shù)條目中有與比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目,且該目標(biāo)條目與第一固件中的比對(duì)條目的參數(shù)內(nèi)容相同時(shí),則判定該比對(duì)條目對(duì)應(yīng)的參數(shù)為第一固件中相對(duì)于第二固件未作更改的參數(shù),即該參數(shù)在兩個(gè)固件中沒有變化。

      最終,根據(jù)比對(duì)結(jié)果獲取第一固件與第二固件的差異信息,該差異信息包括:第一固件中相對(duì)于第二固件未作更改的參數(shù)、做過更改的參數(shù)和新增的參數(shù)。從而找到了兩個(gè)固件的相同部分和不同部分。可選地,對(duì)于做過更改的參數(shù)或新增的參數(shù),后續(xù)進(jìn)行差分升級(jí)時(shí)處理方式相同。

      舉例而言:

      針對(duì)函數(shù)條目,從新固件的函數(shù)條目的排序列表a中依次提取出一個(gè)函數(shù)條目,根據(jù)該函數(shù)條目的文件名,從舊固件的排序列表b中尋找具有相同文件名的一個(gè)或多個(gè)函數(shù)條目,并從找到的函數(shù)條目中確認(rèn)與排序列表a中提取出的函數(shù)條目有著相同函數(shù)名的一個(gè)或多個(gè)函數(shù)條目,將排序列表a中提取出的函數(shù)條目的代碼段(或sha1值)與排序列表b中所確認(rèn)的函數(shù)條目的代碼段(或sha1值)進(jìn)行對(duì)比;如果代碼段(或sha1值)也相同,則表明排序列表a中提取出的函數(shù)條目對(duì)應(yīng)的函數(shù)為新固件中相對(duì)于舊固件未作更改的函數(shù);如果代碼段(或sha1值)不相同,則表明排序列表a中提取出的函數(shù)條目對(duì)應(yīng)的函數(shù)為新固件中相對(duì)于舊固件做過更改的函數(shù)。如果排序列表b中沒有找到與排序列表a中提取出的函數(shù)條目具有相同的文件名的函數(shù)條目,或者雖然具有相同的文件名但不具有相同的函數(shù)名,則說明排序列表a中提取出的函數(shù)條目對(duì)應(yīng)的函數(shù)為新固件中相對(duì)于就固件新增的函數(shù)。

      同理,針對(duì)變量條目,從新固件的變量條目的排序列表a中依次提取出一個(gè)變量條目,根據(jù)該變量條目的文件名,從舊固件的排序列表b中尋找具有相同文件名的一個(gè)或多個(gè)變量條目,并從找到的變量條目中確認(rèn)與排序列表a中提取出的變量條目有著相同變量名的一個(gè)或多個(gè)變量條目,將排序列表a中提取出的變量條目的變量值與排序列表b中所確認(rèn)的變量條目的變量值進(jìn)行對(duì)比;如果變量值也相同,則表明排序列表a中提取出的變量條目對(duì)應(yīng)的變量為新固件中相對(duì)于舊固件未作更改的變量;如果變量值不相同,則表明排序列表a中提取出的變量條目對(duì)應(yīng)的變量為新固件中相對(duì)于舊固件做過更改的變量。如果排序列表b中沒有找到與排序列表a中提取出的變量條目具有相同的文件名的變量條目,或者雖然具有相同的文件名但不具有相同的變量名,則說明排序列表a中提取出的變量條目對(duì)應(yīng)的變量為新固件中相對(duì)于就固件新增的變量。

      進(jìn)一步地,當(dāng)獲取第一固件與第二固件的差異信息后,根據(jù)該差異信息生成差異描述文件,該差異描述文件中包括兩個(gè)固件的相同部分和不同部分的描述信息,后續(xù)則根據(jù)該差異描述文件中的描述信息進(jìn)行固件升級(jí)。

      例如,差異描述文件的描述信息包括兩部分,第一部分描述zigbee設(shè)備中的新固件與舊固件中所有相同數(shù)據(jù)的地址段(每個(gè)地址段包括起始地址和結(jié)束地址)以及該部分?jǐn)?shù)據(jù)在固件下載區(qū)對(duì)應(yīng)的目標(biāo)起始地址;第二部分描述的是差異數(shù)據(jù)(即舊固件中不存在的數(shù)據(jù),或新固件中新增的數(shù)據(jù)和更改的數(shù)據(jù))和數(shù)據(jù)校驗(yàn)值以及該部分?jǐn)?shù)據(jù)在固件下載區(qū)的目標(biāo)起始地址和結(jié)束地址。

      由于差異描述文件的數(shù)據(jù)量遠(yuǎn)遠(yuǎn)小于所需要升級(jí)的新固件的數(shù)據(jù)量,因此將差異描述文件發(fā)送給設(shè)備端進(jìn)行差分升級(jí)將克服傳統(tǒng)升級(jí)方式中時(shí)間長(zhǎng)、消耗資源多的缺點(diǎn),從而可以提高升級(jí)效率。

      本發(fā)明實(shí)施例的固件比對(duì)方法,根據(jù)兩個(gè)固件的內(nèi)存映射文件分別建立各自的參數(shù)條目作為最小的參照單元,通過對(duì)兩個(gè)固件最小的參照單元進(jìn)行針對(duì)性的比對(duì),可以快速準(zhǔn)確的獲取最優(yōu)的比對(duì)結(jié)果,大大提高了固件的比對(duì)效率和比對(duì)效果,為物聯(lián)網(wǎng)設(shè)備的固件實(shí)現(xiàn)差分升級(jí)創(chuàng)造了條件,可以有效提高升級(jí)效率。

      參見圖4,提出本發(fā)明的固件比對(duì)裝置第一實(shí)施例,所述裝置可以應(yīng)用于服務(wù)器、網(wǎng)關(guān)、終端設(shè)備等,所述裝置包括獲取模塊10、建立模塊20和比對(duì)模塊30,其中:獲取模塊10用于獲取第一固件和第二固件的內(nèi)存映射文件;建立模塊20用于分別根據(jù)第一固件的內(nèi)存映射文件和第二固件的內(nèi)存映射文件建立參數(shù)條目;比對(duì)模塊30用于比對(duì)第一固件的參數(shù)條目與第二固件的參數(shù)條目,根據(jù)比對(duì)結(jié)果獲取第一固件與第二固件的差異信息。

      本發(fā)明實(shí)施例中,內(nèi)存映射文件中包括了多個(gè)代碼段(code)和多個(gè)數(shù)據(jù)段(data),其中代碼段是由各種函數(shù)組成,而數(shù)據(jù)段是由各種變量組成。也就是說,本發(fā)明實(shí)施例中,內(nèi)存映射文件主要包括函數(shù)和變量?jī)煞N參數(shù)。當(dāng)然,在其它實(shí)施例中,固件的內(nèi)存映射文件也可能還包括其它參數(shù),或者包括函數(shù)、變量和其它參數(shù)中的任意一種或者至少兩種參數(shù)。

      如圖5所示,建立模塊20包括第一建立單元21和第二建立單元22。第一建立單元21用于從第一固件的內(nèi)存映射文件中獲取每一個(gè)參數(shù)所在的文件名、參數(shù)名和參數(shù)內(nèi)容,將每一個(gè)參數(shù)所在的文件名、參數(shù)名和參數(shù)內(nèi)容建立為一個(gè)參數(shù)條目,獲取至少兩個(gè)參數(shù)條目;第二建立單元22用于從第二固件的內(nèi)存映射文件中獲取每一個(gè)參數(shù)所在的文件名、參數(shù)名和參數(shù)內(nèi)容,將每一個(gè)參數(shù)所在的文件名、參數(shù)名和參數(shù)內(nèi)容建立為一個(gè)參數(shù)條目,獲取至少兩個(gè)參數(shù)條目。

      本發(fā)明實(shí)施例中,內(nèi)存映射文件包括函數(shù)和變量?jī)煞N參數(shù),因此建立的參數(shù)條目包括函數(shù)條目和變量條目。每一個(gè)函數(shù)條目由函數(shù)所在的文件名、函數(shù)名和代碼段(即參數(shù)內(nèi)容)組成,每一個(gè)變量條目由變量所在的文件名、變量名和變量值(即參數(shù)內(nèi)容)組成。

      例如,針對(duì)固件的內(nèi)存映射文件中的代碼段,建立模塊20建立該內(nèi)存映射文件中代碼段的所有函數(shù)條目。具體的,建立模塊20從內(nèi)存映射文件中獲取某個(gè)函數(shù)的描述信息,根據(jù)描述信息獲取該函數(shù)所在的文件名(函數(shù)所在的文件名指的是承載函數(shù)的源文件的名稱),以及該函數(shù)的長(zhǎng)度和在固件中的起始地址,根據(jù)該函數(shù)的長(zhǎng)度和在固件中的起始地址從固件中找到對(duì)應(yīng)的代碼,獲取該函數(shù)的函數(shù)名和代碼段;然后把該函數(shù)所在的文件名、函數(shù)名和代碼段保存到同一個(gè)條目中,完成一個(gè)函數(shù)條目的建立。以此類推,完成所有函數(shù)條目的建立。

      可選地,當(dāng)代碼段較長(zhǎng)時(shí),建立模塊20也可以直接將函數(shù)的長(zhǎng)度和在固件中的起始地址作為函數(shù)條目的參數(shù)內(nèi)容。

      可選地,當(dāng)代碼段較長(zhǎng)時(shí),建立模塊20也可以對(duì)代碼段進(jìn)行哈希算法校驗(yàn),如安全哈希算法(securehashalgorithm,sha1)校驗(yàn)、信息摘要算法5(message-digestalgorithm5,md5)校驗(yàn)等,獲得對(duì)應(yīng)的哈希值(如sha1值、md5值等),將哈希值作為函數(shù)條目的參數(shù)內(nèi)容。

      又如,針對(duì)固件的內(nèi)存映射文件中的數(shù)據(jù)段,建立模塊20建立該內(nèi)存映射文件中數(shù)據(jù)段的所有變量條目。具體的,建立模塊20從內(nèi)存映射文件中獲取某個(gè)變量的描述信息,根據(jù)描述信息獲取該變量所在的文件名(變量所在的文件名指的是承載數(shù)據(jù)的源文件的名稱)以及該變量的地址,根據(jù)變量的地址從固件中找到對(duì)應(yīng)的數(shù)據(jù),獲取該變量的變量名和變量值;然后把該變量所在的文件名、變量名和變量值保存到同一個(gè)條目中,完成一個(gè)函數(shù)條目的建立。以此類推,完成所有變量條目的建立。

      本發(fā)明實(shí)施例中,比對(duì)模塊30分別比對(duì)第一固件的函數(shù)條目與第二固件的函數(shù)條目,以及第一固件的變量條目和第二固件的變量條目,根據(jù)比對(duì)結(jié)果獲取兩個(gè)固件的函數(shù)和變量?jī)煞N參數(shù)數(shù)據(jù)的差異信息。

      如圖6所示,比對(duì)模塊30包括提取單元31、第一判斷單元32和第二判斷單元33。

      提取單元31:用于依次從第一固件的參數(shù)條目中提取出一個(gè)參數(shù)條目作為比對(duì)條目。

      例如,提取單元31依次將第一固件中的每一個(gè)函數(shù)條目提取出來作為比對(duì)條目,以與第二固件中的所有函數(shù)條目進(jìn)行比對(duì);依次將第一固件中的每一個(gè)變量條目提取出來作為比對(duì)條目,以與第二固件中的所有變量條目進(jìn)行比對(duì)。

      第一判斷單元32:用于判斷第二固件的參數(shù)條目中是否有與比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目;當(dāng)沒有與比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目時(shí),判定比對(duì)條目對(duì)應(yīng)的參數(shù)為第一固件中相對(duì)于第二固件新增的參數(shù);當(dāng)有與比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目時(shí),通知第二判斷單元33。

      具體的,第一判斷單元32首先判斷第二固件的參數(shù)條目中是否有與比對(duì)條目具有相同的文件名的參數(shù)條目;當(dāng)有與比對(duì)條目具有相同的文件名的參數(shù)條目時(shí),再判斷與比對(duì)條目具有相同的文件名的參數(shù)條目中是否有與比對(duì)條目具有相同的參數(shù)名的參數(shù)條目;當(dāng)有與比對(duì)條目具有相同參數(shù)名的參數(shù)條目時(shí),判定第二固件的參數(shù)條目中有與比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目。如果第二固件中沒有任何一個(gè)參數(shù)條目與比對(duì)條目具有相同的文件名時(shí),或者雖然有某一個(gè)或某些參數(shù)條目與比對(duì)條目具有相同的文件名但不具有相同的參數(shù)名時(shí),第一判斷單元32則判定第二固件的參數(shù)條目中沒有與比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目。

      第二判斷單元33:用于當(dāng)?shù)诙碳膮?shù)條目中有與比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目時(shí),判斷比對(duì)條目與目標(biāo)條目的參數(shù)內(nèi)容是否相同;當(dāng)比對(duì)條目與目標(biāo)條目的參數(shù)內(nèi)容不同時(shí),判定比對(duì)條目對(duì)應(yīng)的參數(shù)為第一固件中相對(duì)于第二固件做過更改的參數(shù);當(dāng)比對(duì)條目與目標(biāo)條目的參數(shù)內(nèi)容相同時(shí),判定比對(duì)條目對(duì)應(yīng)的參數(shù)為第一固件中相對(duì)于第二固件未作更改的參數(shù)。

      當(dāng)?shù)诙碳膮?shù)條目中有與比對(duì)條目具有相同的文件名和參數(shù)名的目標(biāo)條目時(shí),第二判斷單則進(jìn)一步比較比對(duì)條目與目標(biāo)條目的參數(shù)內(nèi)容,判斷二者的參數(shù)內(nèi)容是否相同。

      例如,當(dāng)參數(shù)條目為變量條目時(shí),第二判斷單元33比較比對(duì)條目與目標(biāo)條目的變量值是否相同。

      又如,當(dāng)參數(shù)條目為函數(shù)條目時(shí),第二判斷單元33比較比對(duì)條目與目標(biāo)條目的代碼段是否完全相同。可選地,當(dāng)函數(shù)條目的參數(shù)內(nèi)容為函數(shù)的長(zhǎng)度和在固件中的起始地址作為函數(shù)條目時(shí),第二判斷單元33則需要根據(jù)比對(duì)條目和目標(biāo)條目的參數(shù)內(nèi)容分別從第一固件和第二固件中提取出對(duì)應(yīng)的代碼段進(jìn)行比較??蛇x地,當(dāng)函數(shù)條目的參數(shù)內(nèi)容為哈希值時(shí),第二判斷單元33則直接比較比對(duì)條目與目標(biāo)條目的哈希值是否相同,如比較二者的sha1值是否相同。

      最終,比對(duì)模塊30根據(jù)比對(duì)結(jié)果獲取第一固件與第二固件的差異信息,該差異信息包括:第一固件中相對(duì)于第二固件未作更改的參數(shù)、做過更改的參數(shù)和新增的參數(shù)。從而找到了兩個(gè)固件的相同部分和不同部分??蛇x地,對(duì)于做過更改的參數(shù)或新增的參數(shù),后續(xù)進(jìn)行差分升級(jí)時(shí)處理方式相同。

      舉例而言:

      針對(duì)函數(shù)條目,比對(duì)模塊30從新固件的函數(shù)條目的排序列表a中依次提取出一個(gè)函數(shù)條目,根據(jù)該函數(shù)條目的文件名,從舊固件的排序列表b中尋找具有相同文件名的一個(gè)或多個(gè)函數(shù)條目,并從找到的函數(shù)條目中確認(rèn)與排序列表a中提取出的函數(shù)條目有著相同函數(shù)名的一個(gè)或多個(gè)函數(shù)條目,將排序列表a中提取出的函數(shù)條目的代碼段(或sha1值)與排序列表b中所確認(rèn)的函數(shù)條目的代碼段(或sha1值)進(jìn)行對(duì)比;如果代碼段(或sha1值)也相同,則判定排序列表a中提取出的函數(shù)條目對(duì)應(yīng)的函數(shù)為新固件中相對(duì)于舊固件未作更改的函數(shù);如果代碼段(或sha1值)不相同,則判定排序列表a中提取出的函數(shù)條目對(duì)應(yīng)的函數(shù)為新固件中相對(duì)于舊固件做過更改的函數(shù)。如果排序列表b中沒有找到與排序列表a中提取出的函數(shù)條目具有相同的文件名的函數(shù)條目,或者雖然具有相同的文件名但不具有相同的函數(shù)名,則判定排序列表a中提取出的函數(shù)條目對(duì)應(yīng)的函數(shù)為新固件中相對(duì)于就固件新增的函數(shù)。

      同理,針對(duì)變量條目,比對(duì)模塊30從新固件的變量條目的排序列表a中依次提取出一個(gè)變量條目,根據(jù)該變量條目的文件名,從舊固件的排序列表b中尋找具有相同文件名的一個(gè)或多個(gè)變量條目,并從找到的變量條目中確認(rèn)與排序列表a中提取出的變量條目有著相同變量名的一個(gè)或多個(gè)變量條目,將排序列表a中提取出的變量條目的變量值與排序列表b中所確認(rèn)的變量條目的變量值進(jìn)行對(duì)比;如果變量值也相同,則判定排序列表a中提取出的變量條目對(duì)應(yīng)的變量為新固件中相對(duì)于舊固件未作更改的變量;如果變量值不相同,則判定排序列表a中提取出的變量條目對(duì)應(yīng)的變量為新固件中相對(duì)于舊固件做過更改的變量。如果排序列表b中沒有找到與排序列表a中提取出的變量條目具有相同的文件名的變量條目,或者雖然具有相同的文件名但不具有相同的變量名,則判定排序列表a中提取出的變量條目對(duì)應(yīng)的變量為新固件中相對(duì)于就固件新增的變量。

      進(jìn)一步地,當(dāng)獲取第一固件與第二固件的差異信息后,比對(duì)模塊30還根據(jù)該差異信息生成差異描述文件,該差異描述文件中包括兩個(gè)固件的相同部分和不同部分的描述信息,后續(xù)則可以根據(jù)該差異描述文件中的描述信息進(jìn)行固件升級(jí)。

      例如,差異描述文件的描述信息包括兩部分,第一部分描述zigbee設(shè)備中的新固件與舊固件中所有相同數(shù)據(jù)的地址段(每個(gè)地址段包括起始地址和結(jié)束地址)以及該部分?jǐn)?shù)據(jù)在固件下載區(qū)對(duì)應(yīng)的目標(biāo)起始地址;第二部分描述的是差異數(shù)據(jù)(即舊固件中不存在的數(shù)據(jù),或新固件中新增的數(shù)據(jù)和更改的數(shù)據(jù))和數(shù)據(jù)校驗(yàn)值以及該部分?jǐn)?shù)據(jù)在固件下載區(qū)的目標(biāo)起始地址和結(jié)束地址。

      進(jìn)一步地,如圖7所示,在本發(fā)明的固件比對(duì)裝置的第二實(shí)施例中,該裝置還包括排序模塊40,該排序模塊40用于對(duì)建立的參數(shù)條目按照預(yù)設(shè)的排序規(guī)則進(jìn)行排序,以提高比對(duì)模塊30后續(xù)對(duì)參數(shù)條目比對(duì)的效率。例如,排序模塊40按照預(yù)設(shè)的排序規(guī)則對(duì)第一固件中的所有函數(shù)條目進(jìn)行排序,所有變量條目進(jìn)行排序;按照預(yù)設(shè)的排序規(guī)則對(duì)第二固件中的所有函數(shù)條目進(jìn)行排序,所有變量條目進(jìn)行排序。

      可選地,排序模塊40以參數(shù)條目中的文件名作為排序鍵值,根據(jù)字符順序分別對(duì)第一固件中的所有參數(shù)條目和第二固件中的所有參數(shù)條目進(jìn)行排序,并可以生成排序列表,所述字符如字母、數(shù)字等,如以“a、b、c、d…”的順序排序或以“1、2、3、4…”的順序排序。具體的,排序模塊40首先以文件名的第一個(gè)字符作為排序鍵值對(duì)參數(shù)條目進(jìn)行排序,對(duì)于第一個(gè)字符相同的參數(shù)條目,再以文件名的第二個(gè)字符作為排序鍵值進(jìn)行排序,依此類推。

      可選地,排序模塊40以參數(shù)條目中的文件名作為第一排序鍵值,參數(shù)名作為第二排序鍵值,根據(jù)字符順序分別對(duì)第一固件中的所有參數(shù)條目和第二固件中的所有參數(shù)條目進(jìn)行排序,并可以生成排序列表,所述字符如字母、數(shù)字等,如以“a、b、c、d…”的順序排序或以“1、2、3、4…”的順序排序。具體的,排序模塊40首先像前一個(gè)方案那樣,依次以文件名的各個(gè)字符作為第一排序鍵值對(duì)參數(shù)條目進(jìn)行排序,對(duì)于文件名相同的參數(shù)條目,再依次以參數(shù)名的各個(gè)字符作為第二排序鍵值進(jìn)行排序。

      本領(lǐng)域技術(shù)人員可以理解,除了前述列舉的排序規(guī)則外,還可以采用現(xiàn)有技術(shù)中的類似規(guī)則或其它規(guī)則進(jìn)行排序,本發(fā)明對(duì)此不再一一列舉贅述。

      當(dāng)?shù)谝还碳械膮?shù)條目預(yù)先按照字符順序進(jìn)行了排序時(shí),比對(duì)模塊30的提取單元31則可以按照參數(shù)條目的文件名和參數(shù)名的字符順序依次提取參數(shù)條目。

      當(dāng)?shù)诙碳械膮?shù)條目預(yù)先以文件名作為排序鍵值按照字符順序進(jìn)行了排序時(shí),比對(duì)模塊30的第一判斷單元32則可以按照參數(shù)條目的文件名的字符順序依次在第二固件的參數(shù)條目中進(jìn)行查找,從而提高查找效率。例如,如果比對(duì)條目的文件名的首字母為b,第一判斷單元32則直接在第二固件中文件名的首字母為b的參數(shù)條目系列中去查找,如果沒有查找到,則結(jié)束查找,不用再到其它參數(shù)條目系列中去查找了,從而節(jié)省查找時(shí)間,加快查找速度。

      當(dāng)?shù)诙碳械膮?shù)條目預(yù)先以參數(shù)名作為排序鍵值按照字符順序進(jìn)行了排序時(shí),比對(duì)模塊30的第一判斷單元32則可以按照參數(shù)條目的參數(shù)名的字符順序依次在第二固件的參數(shù)條目中進(jìn)行查找,從而提高查找效率。例如,如果比對(duì)條目的函數(shù)名的emberinit,則直接在第二固件中函數(shù)名的首字母為e的函數(shù)條目系列中去查找,如果沒有查找到,則結(jié)束查找,不用再到其它函數(shù)條目系列中去查找了,從而節(jié)省查找時(shí)間,加快查找速度。

      本發(fā)明實(shí)施例的固件比對(duì)裝置,根據(jù)兩個(gè)固件的內(nèi)存映射文件分別建立各自的參數(shù)條目作為最小的參照單元,通過對(duì)兩個(gè)固件最小的參照單元進(jìn)行針對(duì)性的比對(duì),可以快速準(zhǔn)確的獲取最優(yōu)的比對(duì)結(jié)果,大大提高了固件的比對(duì)效率和比對(duì)效果,為物聯(lián)網(wǎng)設(shè)備的固件實(shí)現(xiàn)差分升級(jí)創(chuàng)造了條件,可以有效提高升級(jí)效率。

      通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到上述實(shí)施例方法可借助軟件加必需的通用硬件平臺(tái)的方式來實(shí)現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實(shí)施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)(如rom/ram、磁碟、光盤)中,包括若干指令用以使得一臺(tái)終端設(shè)備(可以是手機(jī),計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述的方法。

      應(yīng)當(dāng)理解的是,以上僅為本發(fā)明的優(yōu)選實(shí)施例,不能因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。

      當(dāng)前第1頁1 2 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1