国产精品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>

      固件升級(jí)方法和裝置與流程

      文檔序號(hào):11287134閱讀:273來(lái)源:國(guó)知局
      固件升級(jí)方法和裝置與流程

      本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別是涉及一種固件升級(jí)方法和裝置。



      背景技術(shù):

      固件是指設(shè)備內(nèi)部保存的設(shè)備“驅(qū)動(dòng)程序”,通過(guò)固件,操作系統(tǒng)才能按照標(biāo)準(zhǔn)的設(shè)備驅(qū)動(dòng)實(shí)現(xiàn)特定機(jī)器的運(yùn)行動(dòng)作,如pos(pointofsale)終端的固件有wifi模塊驅(qū)動(dòng)程序、磁卡感應(yīng)模塊驅(qū)動(dòng)程序等。傳統(tǒng)的固件升級(jí)方法是將固件升級(jí)功能集成到操作系統(tǒng)中,與操作系統(tǒng)一起完成升級(jí)。

      然而,傳統(tǒng)的這種固件升級(jí)方法使得用戶無(wú)法自主選擇單個(gè)固件的升級(jí),同時(shí)頻繁的升級(jí)操作系統(tǒng),給用戶帶來(lái)不便。



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

      本發(fā)明實(shí)施例提供了一種固件升級(jí)方法和裝置,可以實(shí)現(xiàn)固件的個(gè)性化升級(jí),提高了固件升級(jí)的便利性。

      一種固件升級(jí)方法,所述方法包括:

      讀取預(yù)設(shè)固件升級(jí)文件,并將所述預(yù)設(shè)固件升級(jí)文件映射至內(nèi)存中;

      獲取所述預(yù)設(shè)固件升級(jí)文件的函數(shù)入口地址;

      根據(jù)所述函數(shù)入口地址從所述內(nèi)存中的預(yù)設(shè)固件升級(jí)文件獲取固件升級(jí)數(shù)據(jù);

      按照所述預(yù)設(shè)固件升級(jí)文件中的與所述固件升級(jí)數(shù)據(jù)對(duì)應(yīng)的預(yù)存固件升級(jí)協(xié)議,將所述固件升級(jí)數(shù)據(jù)寫入到與所述預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊中。

      在其中一個(gè)實(shí)施例中,在所述將所述預(yù)設(shè)固件升級(jí)文件映射至內(nèi)存中之前,還包括:驗(yàn)證所述預(yù)設(shè)固件升級(jí)文件的安全性;若所述預(yù)設(shè)固件升級(jí)文件驗(yàn)證為安全,則進(jìn)入將所述預(yù)設(shè)固件升級(jí)文件映射至內(nèi)存中的步驟。

      在其中一個(gè)實(shí)施例中,所述驗(yàn)證所述預(yù)設(shè)固件升級(jí)文件的安全性,包括:獲取所述預(yù)設(shè)固件升級(jí)文件的數(shù)字簽名;利用預(yù)存的秘鑰算法對(duì)獲取的數(shù)字簽名進(jìn)行解密,得到預(yù)設(shè)固件升級(jí)文件的第一消息摘要;根據(jù)消息摘要算法計(jì)算出預(yù)設(shè)固件升級(jí)文件的第二消息摘要;將所述第一消息摘要與所述第二消息摘要進(jìn)行對(duì)比,若所述第一消息摘要與所述第二消息摘要對(duì)比一致,則所述預(yù)設(shè)固件升級(jí)文件驗(yàn)證為安全,否則,所述預(yù)設(shè)固件升級(jí)文件驗(yàn)證為不安全。

      在其中一個(gè)實(shí)施例中,所述根據(jù)所述函數(shù)入口地址從所述內(nèi)存中的預(yù)設(shè)固件升級(jí)文件獲取固件升級(jí)數(shù)據(jù),包括:獲取與所述預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊的型號(hào);根據(jù)所述函數(shù)入口地址從所述內(nèi)存中的預(yù)設(shè)固件升級(jí)文件獲取與所述固件模塊的型號(hào)對(duì)應(yīng)的固件升級(jí)數(shù)據(jù)。

      在其中一個(gè)實(shí)施例中,所述按照所述預(yù)設(shè)固件升級(jí)文件中的與所述固件升級(jí)數(shù)據(jù)對(duì)應(yīng)的預(yù)存固件升級(jí)協(xié)議,將所述固件升級(jí)數(shù)據(jù)寫入到與所述預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊中,包括:獲取固件接口函數(shù)表的起始地址和結(jié)束地址;根據(jù)所述固件接口函數(shù)表的起始地址和結(jié)束地址遍歷固件接口函數(shù)表,分別獲取與所述固件升級(jí)數(shù)據(jù)對(duì)應(yīng)的讀函數(shù)的第一存儲(chǔ)地止和寫函數(shù)的第二存儲(chǔ)地址;按照所述預(yù)設(shè)固件升級(jí)文件中的與固件升級(jí)數(shù)據(jù)對(duì)應(yīng)的預(yù)存固件升級(jí)協(xié)議的讀寫順序,根據(jù)第一存儲(chǔ)地址調(diào)用讀函數(shù),以使讀函數(shù)從與所述預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊中讀取所述預(yù)存固件升級(jí)協(xié)議中的讀數(shù)據(jù),根據(jù)所述第二存儲(chǔ)地址調(diào)用寫入函數(shù),以使所述寫函數(shù)將所述固件升級(jí)數(shù)據(jù)寫入到與所述預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊中。

      一種固件升級(jí)裝置,所述裝置包括:

      升級(jí)文件讀取模塊,用于讀取預(yù)設(shè)固件升級(jí)文件;

      升級(jí)文件映射模塊,用于將所述預(yù)設(shè)固件升級(jí)文件映射至內(nèi)存中;

      函數(shù)入口地址獲取模塊,用于獲取所述預(yù)設(shè)固件升級(jí)文件的函數(shù)入口地址;

      升級(jí)數(shù)據(jù)獲取模塊,用于根據(jù)所述函數(shù)入口地址從所述內(nèi)存中的預(yù)設(shè)固件升級(jí)文件獲取固件升級(jí)數(shù)據(jù);

      升級(jí)數(shù)據(jù)寫入模塊,用于按照所述預(yù)設(shè)固件升級(jí)文件中的與所述固件升級(jí)數(shù)據(jù)對(duì)應(yīng)的預(yù)存固件升級(jí)協(xié)議,將所述固件升級(jí)數(shù)據(jù)寫入到與所述預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊中。

      在其中一個(gè)實(shí)施例中,所述裝置還包括:安全驗(yàn)證模塊,用于驗(yàn)證所述預(yù)設(shè)固件升級(jí)文件的安全性;所述升級(jí)文件映射模塊用于若所述預(yù)設(shè)固件升級(jí)文件驗(yàn)證為安全,則進(jìn)入將所述預(yù)設(shè)固件升級(jí)文件映射至內(nèi)存中的步驟。

      在其中一個(gè)實(shí)施例中,所述安全驗(yàn)證模塊用于獲取所述預(yù)設(shè)固件升級(jí)文件的數(shù)字簽名;利用預(yù)存的秘鑰算法對(duì)獲取的數(shù)字簽名進(jìn)行解密,得到所述預(yù)設(shè)固件升級(jí)文件的第一消息摘要;根據(jù)消息摘要算法計(jì)算出所述預(yù)設(shè)固件升級(jí)文件的第二消息摘要;將所述第一消息摘要與所述第二消息摘要進(jìn)行對(duì)比,若所述第一消息摘要與所述第二消息摘要對(duì)比一致,則所述預(yù)設(shè)固件升級(jí)文件驗(yàn)證為安全,否則,所述預(yù)設(shè)固件升級(jí)文件驗(yàn)證為不安全。

      在其中一個(gè)實(shí)施例中,所述升級(jí)數(shù)據(jù)獲取模塊用于獲取與所述預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊的型號(hào);根據(jù)所述函數(shù)入口地址從所述內(nèi)存中的預(yù)設(shè)固件升級(jí)文件獲取與所述固件模塊的型號(hào)對(duì)應(yīng)的固件升級(jí)數(shù)據(jù)。

      在其中一個(gè)實(shí)施例中,所述升級(jí)數(shù)據(jù)寫入模塊用于獲取固件接口函數(shù)表的起始地址和結(jié)束地址;根據(jù)所述固件接口函數(shù)表的起始地址和結(jié)束地址遍歷固件接口函數(shù)表,分別獲取與所述固件升級(jí)數(shù)據(jù)對(duì)應(yīng)的讀函數(shù)的第一存儲(chǔ)地止和寫函數(shù)的第二存儲(chǔ)地址;按照所述預(yù)設(shè)固件升級(jí)文件中的與所述固件升級(jí)數(shù)據(jù)對(duì)應(yīng)的預(yù)存固件升級(jí)協(xié)議的讀寫順序,根據(jù)第一存儲(chǔ)地址調(diào)用讀函數(shù),以使讀函數(shù)從與預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊中讀取所述預(yù)存固件升級(jí)協(xié)議中的讀數(shù)據(jù),根據(jù)所述第二存儲(chǔ)地址調(diào)用寫函數(shù),以使所述寫函數(shù)將所述固件升級(jí)數(shù)據(jù)寫入到與所述預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊中。

      上述固件升級(jí)方法和裝置,通過(guò)讀取預(yù)設(shè)固件升級(jí)文件,并將預(yù)設(shè)固件升級(jí)文件映射至內(nèi)存中,獲取預(yù)設(shè)固件升級(jí)文件的函數(shù)入口地址,根據(jù)函數(shù)入口地址從內(nèi)存中的預(yù)設(shè)固件升級(jí)文件獲取固件升級(jí)數(shù)據(jù),再按照預(yù)設(shè)固件升級(jí)文件中的與所述固件升級(jí)數(shù)據(jù)對(duì)應(yīng)的預(yù)存固件升級(jí)協(xié)議,將固件升級(jí)數(shù)據(jù)寫入到與預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊中。由于預(yù)設(shè)固件升級(jí)文件中存儲(chǔ)有固件升級(jí)函數(shù)的入口地址,終端操作系統(tǒng)通過(guò)該入口地址調(diào)用預(yù)設(shè)固件升級(jí)文件中的固件升級(jí)函數(shù),獲取固件升級(jí)函數(shù)中的固件升級(jí)數(shù)據(jù),再將固件升級(jí)數(shù)據(jù)寫入到與預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊中,使得固件的升級(jí)不再依附于操作系統(tǒng)的升級(jí),實(shí)現(xiàn)了固件的單獨(dú)升級(jí),同時(shí)減少了傳統(tǒng)固件升級(jí)方法中因固件升級(jí)連帶操作系統(tǒng)的頻繁升級(jí),提高了固件升級(jí)的便利性。

      附圖說(shuō)明

      圖1為一個(gè)實(shí)施例中終端的內(nèi)部結(jié)構(gòu)圖;

      圖2為一個(gè)實(shí)施例中固件升級(jí)方法的流程圖;

      圖3為一個(gè)實(shí)施例中的預(yù)設(shè)固件升級(jí)文件的安全性驗(yàn)證方法的流程圖;

      圖4為一個(gè)實(shí)施例中的圖2的固件升級(jí)數(shù)據(jù)獲取方法的流程圖;

      圖5為一個(gè)實(shí)施例中的圖2的固件升級(jí)數(shù)據(jù)寫入方法的流程圖;

      圖6為另一個(gè)實(shí)施例中的固件升級(jí)方法的流程圖;

      圖7為一個(gè)實(shí)施例中的固件升級(jí)裝置的結(jié)構(gòu)框圖;

      圖8為另一個(gè)實(shí)施例中的固件升級(jí)裝置的結(jié)構(gòu)框圖。

      具體實(shí)施方式

      為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。

      圖1為一個(gè)實(shí)施例中終端的結(jié)構(gòu)示意圖。如圖1所示,該終端包括通過(guò)系統(tǒng)總線連接的處理器、非易失性存儲(chǔ)介質(zhì)、內(nèi)存儲(chǔ)器、數(shù)據(jù)傳輸接口、顯示屏和輸入裝置。其中,終端的非易失性存儲(chǔ)介質(zhì)存儲(chǔ)有操作系統(tǒng)和計(jì)算機(jī)可讀指令,該計(jì)算機(jī)可讀指令被處理器執(zhí)行以實(shí)現(xiàn)一種固件升級(jí)方法。該處理器用于提供計(jì)算和控制能力,支撐整個(gè)終端的運(yùn)行。數(shù)據(jù)傳輸接口用于與其它移動(dòng)存儲(chǔ)設(shè)備進(jìn)行通信。終端的顯示屏可以是液晶顯示屏或者電子墨水顯示屏等,輸入裝置可以是顯示屏上覆蓋的觸摸層,也可以是終端外殼上設(shè)置的按鍵等。在本實(shí)施例中,該終端是pos終端(pos,pointofsale)。本領(lǐng)域技術(shù)人員可以理解,圖1中示出的結(jié)構(gòu),僅僅是與本申請(qǐng)方案相關(guān)的部分結(jié)構(gòu)的框圖,并不構(gòu)成對(duì)本申請(qǐng)方案所應(yīng)用于其上的終端的限定,具體地終端可以包括比圖中所示更多或更少的部件,或者組合某些部件,或者具有不同的部件布置。

      在一個(gè)實(shí)施例中,如圖2所示,提供一種固件升級(jí)方法,該方法以應(yīng)用于如圖1所示的終端進(jìn)行舉例說(shuō)明,包括:

      步驟202,讀取預(yù)設(shè)固件升級(jí)文件,并將預(yù)設(shè)固件升級(jí)文件映射至內(nèi)存中。

      其中,預(yù)設(shè)固件升級(jí)文件是預(yù)先編譯的具有特定類型的可執(zhí)行文件。由于可執(zhí)行文件通常是存儲(chǔ)在硬盤或者nandflash等存儲(chǔ)介質(zhì)中,計(jì)算機(jī)是不能直接在這些存儲(chǔ)介質(zhì)中運(yùn)行可執(zhí)行文件,所以需要將可執(zhí)行文件映射到內(nèi)存中才可以運(yùn)行。

      具體地,讀取預(yù)設(shè)固件升級(jí)文件,并將預(yù)設(shè)固件升級(jí)文件映射至內(nèi)存中的過(guò)程包括:在終端操作系統(tǒng)中讀取與預(yù)設(shè)固件升級(jí)文件的文件類型相同的文件;若讀取結(jié)果不為空,則判斷讀取到的文件是否有效,若讀取到的文件有效,則解析讀取的文件的文件頭得到映射地址,再根據(jù)該映射地址映射到內(nèi)存中。其中,文件類型可通過(guò)文件擴(kuò)展名來(lái)確定;文件的有效與否可通過(guò)對(duì)比文件頭中存儲(chǔ)的文件標(biāo)識(shí)的對(duì)應(yīng)值與預(yù)存文件標(biāo)識(shí)有效值來(lái)確定,若文件頭中的文件標(biāo)識(shí)的對(duì)應(yīng)值與預(yù)存文件標(biāo)識(shí)有效值對(duì)比一致,則文件有效,否則文件無(wú)效;也可通過(guò)對(duì)比文件頭中存儲(chǔ)的文件名稱與根據(jù)文件類型讀取的文件名稱來(lái)確定,若文件頭中存儲(chǔ)的文件名稱與根據(jù)文件類型讀取的文件名稱對(duì)比一致,則文件有效,否則文件無(wú)效。

      步驟204,獲取預(yù)設(shè)固件升級(jí)文件的函數(shù)入口地址。

      函數(shù)入口地址是函數(shù)的存儲(chǔ)地址。本實(shí)施例中,預(yù)設(shè)固件升級(jí)文件的函數(shù)入口地址是預(yù)設(shè)固件升級(jí)文件中的固件升級(jí)函數(shù)的存儲(chǔ)地址。預(yù)設(shè)固件升級(jí)文件的文件頭中含有固件升級(jí)程序的函數(shù)入口地址,因此,解析預(yù)設(shè)固件升級(jí)文件的文件頭便可獲得函數(shù)入口地址。

      步驟206,根據(jù)函數(shù)入口地址從內(nèi)存中的預(yù)設(shè)固件升級(jí)文件獲取固件升級(jí)數(shù)據(jù)。

      具體地,終端操作系統(tǒng)首先獲取與預(yù)設(shè)固件升級(jí)文件相對(duì)應(yīng)的固件模塊的信息,包括固件模塊的型號(hào)、與固件模塊的型號(hào)相對(duì)應(yīng)的固件當(dāng)前版本號(hào),再根據(jù)步驟204獲取到的函數(shù)入口地址調(diào)用內(nèi)存中的預(yù)設(shè)固件升級(jí)文件中的預(yù)設(shè)固件升級(jí)函數(shù),以上述固件模塊信息作為函數(shù)參數(shù)傳遞給預(yù)設(shè)固件升級(jí)函數(shù),以使預(yù)設(shè)固件升級(jí)函數(shù)將接收到的與固件模塊的型號(hào)相對(duì)應(yīng)的固件當(dāng)前版本號(hào)與預(yù)存固件版本號(hào)(即預(yù)設(shè)固件升級(jí)文件的升級(jí)版本號(hào))進(jìn)行比較,若接收到的與固件模塊的型號(hào)相對(duì)應(yīng)的固件當(dāng)前版本號(hào)大于預(yù)存固件版本號(hào),則終端操作系統(tǒng)獲取固件升級(jí)函數(shù)中與固件模塊型號(hào)相對(duì)應(yīng)的固件升級(jí)數(shù)據(jù)。

      需要說(shuō)明的是,本實(shí)施例中是通過(guò)比較固件的版本號(hào)來(lái)確定固件的升級(jí)與否,在其他實(shí)施例中,可以通過(guò)比較固件升級(jí)文件的生成時(shí)間來(lái)確定固件的升級(jí)與否。

      步驟208,按照預(yù)設(shè)固件升級(jí)文件中的與固件升級(jí)數(shù)據(jù)對(duì)應(yīng)的預(yù)存固件升級(jí)協(xié)議,將固件升級(jí)數(shù)據(jù)寫入到與預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊中。

      預(yù)存固件升級(jí)協(xié)議是預(yù)先存儲(chǔ)在預(yù)設(shè)固件升級(jí)文件中的用于固件模塊和終端cpu進(jìn)行通信的規(guī)則和約定。預(yù)存固件升級(jí)協(xié)議包括握手協(xié)議和通信協(xié)議,握手協(xié)議用于固件模塊和終端操作系統(tǒng)提供的cpu進(jìn)行通信前的建立連接,通信協(xié)議用于固件模塊和終端操作系統(tǒng)提供的cpu進(jìn)行通信的數(shù)據(jù)交互。

      具體地,在終端操作系統(tǒng)獲取到與固件模塊型號(hào)相對(duì)應(yīng)的固件升級(jí)數(shù)據(jù)后,先按照握手協(xié)議建立終端操作系統(tǒng)提供的cpu和固件模塊之間的通信連接,再按照通信協(xié)議的數(shù)據(jù)交互順序,將該固件升級(jí)數(shù)據(jù)寫入到與之對(duì)應(yīng)的固件升級(jí)模塊中,以完成固件的升級(jí)。

      本實(shí)施例中,由于預(yù)設(shè)固件升級(jí)文件中存儲(chǔ)有固件升級(jí)函數(shù)的入口地址,終端操作系統(tǒng)通過(guò)該入口地址調(diào)用預(yù)設(shè)固件升級(jí)文件中的固件升級(jí)函數(shù),獲取固件升級(jí)函數(shù)中的固件升級(jí)數(shù)據(jù),再按照預(yù)設(shè)固件升級(jí)文件中的與固件升級(jí)數(shù)據(jù)對(duì)應(yīng)的預(yù)存固件升級(jí)協(xié)議,將固件升級(jí)數(shù)據(jù)寫入到與預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊中,使得固件的升級(jí)不再依附于操作系統(tǒng)的升級(jí),實(shí)現(xiàn)了固件的單獨(dú)升級(jí),同時(shí)減少了傳統(tǒng)固件升級(jí)方法中因固件升級(jí)連帶操作系統(tǒng)的頻繁升級(jí),提高了固件升級(jí)的便利性。此外,通過(guò)固件升級(jí)函數(shù)的入口地址直接調(diào)用固件升級(jí)函數(shù),避免了傳統(tǒng)的地址映射尋址代碼的運(yùn)行,提高了固件升級(jí)方法的執(zhí)行效率。

      在一個(gè)實(shí)施例中,在將預(yù)設(shè)固件升級(jí)文件映射至內(nèi)存中的步驟之前,還包括:驗(yàn)證預(yù)設(shè)固件升級(jí)文件的安全性;若預(yù)設(shè)固件升級(jí)文件驗(yàn)證為安全,則進(jìn)入將預(yù)設(shè)固件升級(jí)文件映射至內(nèi)存中的步驟。本實(shí)施例中,通過(guò)對(duì)預(yù)設(shè)固件升級(jí)文件增加安全性驗(yàn)證的步驟,保證了固件升級(jí)數(shù)據(jù)的安全性。

      在一個(gè)實(shí)施例中,如圖3所示,上述驗(yàn)證預(yù)設(shè)固件升級(jí)文件的安全性的步驟,包括:

      步驟302,獲取預(yù)設(shè)固件升級(jí)文件的數(shù)字簽名。

      數(shù)字簽名是附加在數(shù)據(jù)單元上的一些數(shù)據(jù),或是對(duì)數(shù)據(jù)單元所作的密碼變換,這種數(shù)據(jù)和變換允許數(shù)據(jù)單元的接收者用以確認(rèn)數(shù)據(jù)單元來(lái)源和數(shù)據(jù)單元的完整性,并保護(hù)數(shù)據(jù),防止被人(例如接收者)進(jìn)行偽造。

      本實(shí)施例中,預(yù)設(shè)固件升級(jí)文件的數(shù)字簽名是預(yù)設(shè)固件升級(jí)文件中的最后256字節(jié),因此,讀取預(yù)設(shè)固件升級(jí)文件的最后256字節(jié)的字符串便可。

      步驟304,利用預(yù)存秘鑰算法對(duì)獲取的數(shù)字簽名進(jìn)行解密,得到預(yù)設(shè)固件升級(jí)文件的第一消息摘要。

      預(yù)存秘鑰算法是預(yù)先存儲(chǔ)在終端系統(tǒng)的用來(lái)加密或解密的算法;消息摘要(messagedigest)又稱作數(shù)字摘要(digitaldigest),它是唯一對(duì)應(yīng)一個(gè)消息或文本的固定長(zhǎng)度的值。消息摘要采用單向hash函數(shù)將需要加密的明文摘要成一串128比特的密文,這串密文也稱為數(shù)字指紋(fingerprint),它有固定的長(zhǎng)度,且不同的明文摘要成密文,其結(jié)果總是不同的,而同樣的明文其摘要必定一致。本實(shí)施例中,在獲取了預(yù)設(shè)固件升級(jí)文件的數(shù)字簽名后,利用預(yù)存在當(dāng)前系統(tǒng)中的秘鑰算法(如rsa算法)解密獲取到的數(shù)字簽名得到第一消息摘要。

      步驟306,根據(jù)消息摘要算法計(jì)算出預(yù)設(shè)固件升級(jí)文件的第二消息摘要。

      消息摘要算法又稱哈希算法,是密碼學(xué)算法中非常重要的一個(gè)分支,它通過(guò)對(duì)所有數(shù)據(jù)提取指紋信息以實(shí)現(xiàn)數(shù)據(jù)簽名、數(shù)據(jù)完整性校驗(yàn)等功能。消息摘要算法可以是循環(huán)冗余校驗(yàn)算法(cyclicredundancycheck,crc,包括crc8、crc16和crc32)、安全哈希算法(securehashalgorithm,sha,包括sha1、sha256、sha384、sha512)或是消息摘要算法(messagedigestalgorithm,包括md2、md4、md5)等。

      具體地,將預(yù)設(shè)固件升級(jí)文件中的明文消息通過(guò)消息摘要算法轉(zhuǎn)變成固定長(zhǎng)度的哈希值,即為第二消息摘要。

      步驟308,將第一消息摘要與第二消息摘要對(duì)比,若第一消息摘要與第二消息摘要對(duì)比一致,則預(yù)設(shè)固件升級(jí)文件驗(yàn)證為安全,否則,預(yù)設(shè)固件升級(jí)文件驗(yàn)證為不安全。

      本實(shí)施例中,通過(guò)將對(duì)預(yù)設(shè)固件升級(jí)文件的數(shù)字簽名使用預(yù)存秘鑰算法進(jìn)行解密得到的消息摘要與對(duì)預(yù)設(shè)固件升級(jí)文件中的明文信息使用消息摘要算法進(jìn)行轉(zhuǎn)變得到的消息摘要進(jìn)行對(duì)比,從而驗(yàn)證預(yù)設(shè)固件升級(jí)文件的安全性。

      在一個(gè)實(shí)施例中,如圖4所示,上述步驟206,包括:

      步驟216,獲取與預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊的型號(hào)。

      本實(shí)施例中,預(yù)設(shè)固件升級(jí)文件中存有多個(gè)固件模塊型號(hào)的固件升級(jí)數(shù)據(jù),如型號(hào)為8188etv,8188eus,8189etv和8723bu的wifi固件模塊對(duì)應(yīng)的升級(jí)數(shù)據(jù)。

      步驟226,根據(jù)函數(shù)入口地址從內(nèi)存中的預(yù)設(shè)固件升級(jí)文件獲取與固件模塊的型號(hào)對(duì)應(yīng)的固件升級(jí)數(shù)據(jù)。

      具體的,終端操作系統(tǒng)根據(jù)預(yù)設(shè)固件升級(jí)文件的函數(shù)入口地址調(diào)用內(nèi)存中的預(yù)設(shè)固件升級(jí)文件中的固件升級(jí)函數(shù),并將與預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊的型號(hào)作為函數(shù)參數(shù)傳遞至該固件升級(jí)函數(shù),以使終端操作系統(tǒng)獲取預(yù)設(shè)固件升級(jí)函數(shù)中的與固件模塊型號(hào)相對(duì)應(yīng)的固件升級(jí)數(shù)據(jù)。

      本實(shí)施例中,終端操作系統(tǒng)獲取預(yù)設(shè)固件升級(jí)函數(shù)中的與固件模塊型號(hào)相對(duì)應(yīng)的固件升級(jí)數(shù)據(jù),使得同一個(gè)預(yù)設(shè)固件升級(jí)文件支持多型號(hào)的固件升級(jí)。

      在一個(gè)實(shí)施例中,如圖5所示,上述步驟208,包括:

      步驟218,獲取固件接口函數(shù)表的起始地址和結(jié)束地址。

      固件接口函數(shù)表是存儲(chǔ)在操作系統(tǒng)程序的與終端中的固件模塊進(jìn)行通信的接口函數(shù)以及接口函數(shù)存儲(chǔ)地址的映射表。與。本實(shí)施例中,終端操作系統(tǒng)通過(guò)獲取固件接口函數(shù)表存儲(chǔ)的起始地址和結(jié)束地址確定函數(shù)表的位置。

      步驟228,根據(jù)固件接口函數(shù)表的起始地址和結(jié)束地址遍歷固件接口函數(shù)表,分別獲取與固件升級(jí)數(shù)據(jù)對(duì)應(yīng)的讀函數(shù)的第一存儲(chǔ)地址和寫函數(shù)的第二存儲(chǔ)地址。

      本實(shí)施例中,讀函數(shù)是從與固件升級(jí)數(shù)據(jù)對(duì)應(yīng)的固件模塊中讀取升級(jí)所需數(shù)據(jù),寫函數(shù)是將固件升級(jí)數(shù)據(jù)寫入到與之對(duì)應(yīng)的固件模塊中的函數(shù)。例如wifiread函數(shù)用于從wifi固件中讀取升級(jí)所需的數(shù)據(jù),wifiwrite函數(shù)用于將wifi固件數(shù)據(jù)寫入wifi通訊模塊。

      由于固件接口函數(shù)表是存儲(chǔ)在操作系統(tǒng)程序的與終端中的固件模塊進(jìn)行通信的接口函數(shù)以及接口函數(shù)存儲(chǔ)地址的映射表,所以在確定了固件接口函數(shù)表的具體位置后,可在固件接口函數(shù)表中查找需要的函數(shù)的存儲(chǔ)地址。

      步驟238,按照預(yù)設(shè)固件升級(jí)文件中的與固件升級(jí)數(shù)據(jù)對(duì)應(yīng)的預(yù)存固件升級(jí)協(xié)議的讀寫順序,根據(jù)第一存儲(chǔ)地址調(diào)用讀函數(shù),以使讀函數(shù)從與預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊中讀取預(yù)存固件升級(jí)協(xié)議中的讀數(shù)據(jù),根據(jù)第二存儲(chǔ)地址調(diào)用寫函數(shù),以使寫函數(shù)將固件升級(jí)數(shù)據(jù)寫入到與預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊中。

      具體地,解析預(yù)設(shè)固件升級(jí)文件中的與固件升級(jí)數(shù)據(jù)對(duì)應(yīng)的預(yù)存固件升級(jí)協(xié)議得到握手協(xié)議和通信協(xié)議,先按照握手協(xié)議建立終端操作系統(tǒng)提供的cpu和固件模塊進(jìn)行通信的連接,再讀取通信協(xié)議中的數(shù)據(jù),若存在讀操作標(biāo)識(shí),則獲取與該讀操作標(biāo)識(shí)對(duì)應(yīng)的讀數(shù)據(jù),并通過(guò)第一存儲(chǔ)地址傳遞讀數(shù)據(jù)給讀函數(shù),以使讀函數(shù)從與預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊中讀取該讀數(shù)據(jù),若從固件模塊中成功讀取該數(shù)據(jù),則繼續(xù)讀取通信協(xié)議中的數(shù)據(jù),若存在寫操作標(biāo)識(shí),則通過(guò)第二存儲(chǔ)地址傳遞固件升級(jí)數(shù)據(jù)給寫函數(shù),以使寫函數(shù)將固件升級(jí)數(shù)據(jù)寫入與預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊,若成功將寫函數(shù)寫入固件模塊,則繼續(xù)讀取通信協(xié)議中的數(shù)據(jù),直到通信協(xié)議中的全部數(shù)據(jù)讀取完畢。在一個(gè)實(shí)施例中,如圖6所示,提供了另一種固件升級(jí)方法,以應(yīng)用于pos終端的wifi固件升級(jí)方法為例進(jìn)行說(shuō)明,包括:

      步驟602,讀取預(yù)設(shè)固件升級(jí)文件。

      本實(shí)施例中,預(yù)設(shè)固件升級(jí)文件是通過(guò)編譯軟件編譯的類型為mpatch的文件,文件名稱為wifimpatch。

      具體地,在pos終端的文件系統(tǒng)中遍歷查找擴(kuò)展名為mpatch的文件,若查找到擴(kuò)展名為mpatch的文件,則獲取該文件的文件名稱并解析該文件的文件頭獲取元素name的值,再將name的值與文件名稱進(jìn)行對(duì)比,若對(duì)比結(jié)果一致,則查找到的文件為有效文件,即為預(yù)設(shè)固件升級(jí)文件。

      步驟604,驗(yàn)證預(yù)設(shè)固件升級(jí)文件的安全性。

      具體地,讀取預(yù)設(shè)固件升級(jí)文件的最后256字節(jié)的簽名信息,然后利用預(yù)先存儲(chǔ)在pos機(jī)中的rsa公鑰解密簽名信息獲取第一消息摘要,再利用消息摘要算法計(jì)算出查找到的mpatch文件的第二消息摘要,最后將第一消息摘要與第二消息摘要進(jìn)行對(duì)比,若對(duì)比結(jié)果一致則驗(yàn)證為安全,否則驗(yàn)證為不安全。

      步驟606,若預(yù)設(shè)固件升級(jí)文件驗(yàn)證為安全,則將預(yù)設(shè)固件升級(jí)文件映射至內(nèi)存中。

      具體地,解析查找到的mpatch文件的文件頭,獲取預(yù)設(shè)固件升級(jí)文件映射至內(nèi)存的映射地址,再將mpatch文件中的函數(shù)段和變量段復(fù)制到內(nèi)存中的映射地址處。

      步驟608,獲取預(yù)設(shè)固件升級(jí)文件的函數(shù)入口地址。

      本實(shí)施例中,通過(guò)解析預(yù)設(shè)固件升級(jí)文件的文件頭獲取固件升級(jí)函數(shù)的函數(shù)入口地址。

      步驟610,根據(jù)函數(shù)入口地址從內(nèi)存中的預(yù)設(shè)固件升級(jí)文件獲取固件升級(jí)數(shù)據(jù)。

      本實(shí)施例中,pos終端操作系統(tǒng)首先獲取與預(yù)設(shè)升級(jí)固件升級(jí)文件相對(duì)應(yīng)的固件模塊的信息,包括固件模塊的型號(hào)、與固件模塊的型號(hào)相對(duì)應(yīng)的固件當(dāng)前版本號(hào),再根據(jù)獲取到的函數(shù)入口地址調(diào)用內(nèi)存中的預(yù)設(shè)固件升級(jí)函數(shù),以上述固件模塊信息作為函數(shù)參數(shù)傳遞給預(yù)設(shè)固件升級(jí)函數(shù),以使預(yù)設(shè)固件升級(jí)函數(shù)將接收到的與固件模塊的型號(hào)相對(duì)應(yīng)的固件當(dāng)前版本號(hào)與預(yù)存固件版本號(hào)(即預(yù)設(shè)固件升級(jí)文件的升級(jí)版本號(hào))進(jìn)行比較,若接收到的與固件模塊的型號(hào)相對(duì)應(yīng)的固件當(dāng)前版本號(hào)大于預(yù)存固件版本號(hào),則終端操作系統(tǒng)獲取固件升級(jí)函數(shù)中與固件模塊型號(hào)相對(duì)應(yīng)的固件升級(jí)數(shù)據(jù)。

      步驟612,將固件升級(jí)數(shù)據(jù)寫入到與預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊中。

      具體地,pos終端操作系統(tǒng)先獲取固件接口函數(shù)表存儲(chǔ)的起始地址和結(jié)束地址,再根據(jù)固件接口函數(shù)表的起始地址和結(jié)束地址遍歷固件接口函數(shù)表,分別獲取與固件升級(jí)數(shù)據(jù)對(duì)應(yīng)的讀函數(shù)(wifiread)的第一存儲(chǔ)地止和寫函數(shù)(wifiwrite)的第二存儲(chǔ)地址,接著解析預(yù)設(shè)固件升級(jí)文件中的與固件升級(jí)數(shù)據(jù)對(duì)應(yīng)的預(yù)存固件升級(jí)協(xié)議得到握手協(xié)議和通信協(xié)議,按照握手協(xié)議建立pos終端操作系統(tǒng)提供的cpu和固件模塊進(jìn)行通信的連接,若連接建立成功,則讀取通信協(xié)議中的數(shù)據(jù),若存在讀操作標(biāo)識(shí),則獲取與該讀操作標(biāo)識(shí)對(duì)應(yīng)的讀數(shù)據(jù),并通過(guò)第一存儲(chǔ)地址傳遞讀數(shù)據(jù)給讀函數(shù)(wifiread),以使讀函數(shù)從與預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊中讀取該讀數(shù)據(jù),若從固件模塊中成功讀取該數(shù)據(jù),則繼續(xù)讀取通信協(xié)議中的數(shù)據(jù),若存在寫操作標(biāo)識(shí),則通過(guò)第二存儲(chǔ)地址傳遞固件升級(jí)數(shù)據(jù)給寫函數(shù)(wifiwrite),以使寫函數(shù)將固件升級(jí)數(shù)據(jù)寫入與預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊,若成功將寫函數(shù)寫入固件模塊,則繼續(xù)讀取通信協(xié)議中的數(shù)據(jù),直到通信協(xié)議中的全部數(shù)據(jù)讀取完畢。

      本實(shí)施例中,通過(guò)入口地址調(diào)用預(yù)設(shè)固件升級(jí)文件中的固件升級(jí)函數(shù),獲取固件升級(jí)函數(shù)中的固件升級(jí)數(shù)據(jù),再按照預(yù)設(shè)固件升級(jí)文件中的與固件升級(jí)數(shù)據(jù)對(duì)應(yīng)的預(yù)存固件升級(jí)數(shù)據(jù)協(xié)議,將固件升級(jí)數(shù)據(jù)寫入到與預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊中,使得固件的升級(jí)不再依附于操作系統(tǒng)的升級(jí),實(shí)現(xiàn)了固件的單獨(dú)升級(jí),同時(shí)減少了傳統(tǒng)固件升級(jí)方法中因固件升級(jí)連帶操作系統(tǒng)的頻繁升級(jí),提高了固件升級(jí)的便利性;通過(guò)固件升級(jí)函數(shù)的入口地址直接調(diào)用固件升級(jí)函數(shù),避免了傳統(tǒng)的地址映射尋址代碼的運(yùn)行,提高了固件升級(jí)方法的執(zhí)行效率;對(duì)預(yù)設(shè)固件升級(jí)文件增加安全性驗(yàn)證的步驟,保證了固件升級(jí)數(shù)據(jù)的安全性。

      在一個(gè)實(shí)施例中,如圖7所示,提供了一種固件升級(jí)裝置,包括:

      升級(jí)文件讀取模塊702,用于讀取預(yù)設(shè)固件升級(jí)文件。

      升級(jí)文件映射模塊704,用于將預(yù)設(shè)固件升級(jí)文件映射至內(nèi)存中;

      函數(shù)入口地址獲取模塊706,用于獲取預(yù)設(shè)固件升級(jí)文件的函數(shù)入口地址;

      升級(jí)數(shù)據(jù)獲取模塊708,用于根據(jù)函數(shù)入口地址從內(nèi)存中的預(yù)設(shè)固件升級(jí)文件獲取固件升級(jí)數(shù)據(jù);

      升級(jí)數(shù)據(jù)寫入模塊710,用于按照預(yù)設(shè)固件升級(jí)文件中的與所述固件升級(jí)數(shù)據(jù)對(duì)應(yīng)的預(yù)存固件升級(jí)協(xié)議,將固件升級(jí)數(shù)據(jù)寫入到與預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊中。

      在一個(gè)實(shí)施例中,如圖8所示,上述裝置還包括安全驗(yàn)證模塊703,用于驗(yàn)證預(yù)設(shè)固件升級(jí)文件的安全性。升級(jí)文件映射模塊704用于若預(yù)設(shè)固件升級(jí)文件驗(yàn)證為安全,則進(jìn)入將預(yù)設(shè)固件升級(jí)文件映射至內(nèi)存中的步驟。

      在一個(gè)實(shí)施例中,安全驗(yàn)證模塊703用于獲取預(yù)設(shè)固件升級(jí)文件的數(shù)字簽名信息;利用預(yù)存的秘鑰算法對(duì)獲取的數(shù)字簽名進(jìn)行解密,得到預(yù)設(shè)固件升級(jí)文件的第一消息摘要;根據(jù)消息摘要算法計(jì)算出預(yù)設(shè)固件升級(jí)文件的第二消息摘要;將第一消息摘要與第二消息摘要進(jìn)行對(duì)比,若第一消息摘要與第二消息摘要對(duì)比一致,則預(yù)設(shè)固件升級(jí)文件驗(yàn)證為安全,否則,預(yù)設(shè)固件升級(jí)文件驗(yàn)證為不安全。

      在一個(gè)實(shí)施例中,升級(jí)數(shù)據(jù)獲取模塊708用于獲取與預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊的型號(hào);根據(jù)函數(shù)入口地址從內(nèi)存中的預(yù)設(shè)固件升級(jí)文件獲取與固件模塊的型號(hào)對(duì)應(yīng)的固件升級(jí)數(shù)據(jù)。

      在一個(gè)實(shí)施例中,升級(jí)數(shù)據(jù)寫入模塊710用于獲取固件接口函數(shù)表的起始地址和結(jié)束地址;根據(jù)固件接口函數(shù)表的起始地址和結(jié)束地址遍歷固件接口函數(shù)表,分別獲取與固件升級(jí)數(shù)據(jù)對(duì)應(yīng)的讀函數(shù)的第一存儲(chǔ)地止和寫函數(shù)的第二存儲(chǔ)地址;按照預(yù)設(shè)固件升級(jí)文件中的與固件升級(jí)數(shù)據(jù)對(duì)應(yīng)的預(yù)存固件升級(jí)協(xié)議的讀寫順序,根據(jù)第一存儲(chǔ)地址調(diào)用讀函數(shù),以使讀函數(shù)從與預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊中讀取預(yù)存固件升級(jí)協(xié)議中的讀數(shù)據(jù),根據(jù)第二存儲(chǔ)地址調(diào)用寫函數(shù),以使寫函數(shù)將固件升級(jí)數(shù)據(jù)寫入到與預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊中。

      本發(fā)明實(shí)施例還提供了一種計(jì)算機(jī)設(shè)備。所述計(jì)算機(jī)設(shè)備包括存儲(chǔ)器,處理器及存儲(chǔ)在存儲(chǔ)器上并可在處理器上運(yùn)行的計(jì)算機(jī)程序,所述處理器執(zhí)行所述程序時(shí)實(shí)現(xiàn)以下步驟:讀取預(yù)設(shè)固件升級(jí)文件,并將所述預(yù)設(shè)固件升級(jí)文件映射至內(nèi)存中;獲取所述預(yù)設(shè)固件升級(jí)文件的函數(shù)入口地址;根據(jù)所述函數(shù)入口地址從所述內(nèi)存中的預(yù)設(shè)固件升級(jí)文件獲取固件升級(jí)數(shù)據(jù);按照預(yù)設(shè)固件升級(jí)文件中的與所述固件升級(jí)數(shù)據(jù)對(duì)應(yīng)的預(yù)存固件升級(jí)協(xié)議,將所述固件升級(jí)數(shù)據(jù)寫入到與所述預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊中。

      在一個(gè)實(shí)施例中,所述處理器執(zhí)行所述程序時(shí)還實(shí)現(xiàn)以下步驟:驗(yàn)證所述預(yù)設(shè)固件升級(jí)文件的安全性;若所述預(yù)設(shè)固件升級(jí)文件驗(yàn)證為安全,則進(jìn)入將所述預(yù)設(shè)固件升級(jí)文件映射至內(nèi)存中的步驟。

      在一個(gè)實(shí)施例中,所述處理器執(zhí)行所述程序時(shí)還實(shí)現(xiàn)以下步驟:獲取所述預(yù)設(shè)固件升級(jí)文件的數(shù)字簽名;利用預(yù)存的秘鑰算法對(duì)獲取的數(shù)字簽名進(jìn)行解密,得到預(yù)設(shè)固件升級(jí)文件的第一消息摘要;根據(jù)消息摘要算法計(jì)算出預(yù)設(shè)固件升級(jí)文件的第二消息摘要;將所述第一消息摘要與所述第二消息摘要進(jìn)行對(duì)比,若所述第一消息摘要與所述第二消息摘要對(duì)比一致,則所述預(yù)設(shè)固件升級(jí)文件驗(yàn)證為安全,否則,所述預(yù)設(shè)固件升級(jí)文件驗(yàn)證為不安全。

      在一個(gè)實(shí)施例中,所述處理器執(zhí)行所述程序時(shí)還實(shí)現(xiàn)以下步驟:獲取與所述預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊的型號(hào);根據(jù)所述函數(shù)入口地址從所述內(nèi)存中的預(yù)設(shè)固件升級(jí)文件獲取與所述固件模塊的型號(hào)對(duì)應(yīng)的固件升級(jí)數(shù)據(jù)。

      在一個(gè)實(shí)施例中,所述處理器執(zhí)行所述程序時(shí)還實(shí)現(xiàn)以下步驟:獲取固件接口函數(shù)表的起始地址和結(jié)束地址;根據(jù)所述固件接口函數(shù)表的起始地址和結(jié)束地址遍歷固件接口函數(shù)表,分別獲取與所述固件升級(jí)數(shù)據(jù)對(duì)應(yīng)的讀函數(shù)的第一存儲(chǔ)地址和寫函數(shù)的第二存儲(chǔ)地址;按照預(yù)設(shè)固件升級(jí)文件中的與固件升級(jí)數(shù)據(jù)對(duì)應(yīng)的預(yù)存固件升級(jí)協(xié)議的讀寫順序,根據(jù)第一存儲(chǔ)地址調(diào)用讀函數(shù),以使讀函數(shù)從與預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊中讀取預(yù)存固件升級(jí)協(xié)議中的讀數(shù)據(jù),根據(jù)所述第二存儲(chǔ)地址調(diào)用寫函數(shù),以使所述寫函數(shù)將所述固件升級(jí)數(shù)據(jù)寫入到與所述預(yù)設(shè)固件升級(jí)文件對(duì)應(yīng)的固件模塊中。

      需要說(shuō)明的是,本發(fā)明各個(gè)實(shí)施例中的“第一”、“第二”僅用作區(qū)分,并不用作對(duì)大小、從屬、先后順序等方面的限定。

      以上所述實(shí)施例的各技術(shù)特征可以進(jìn)行任意的組合,為使描述簡(jiǎn)潔,未對(duì)上述實(shí)施例中的各個(gè)技術(shù)特征所有可能的組合都進(jìn)行描述,然而,只要這些技術(shù)特征的組合不存在矛盾,都應(yīng)當(dāng)認(rèn)為是本說(shuō)明書記載的范圍。

      以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對(duì)發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對(duì)于本領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。

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