新四季網

檢查程序內容確保固件更新相容性的固件更新方法及裝置的製作方法

2023-10-08 22:29:49

專利名稱:檢查程序內容確保固件更新相容性的固件更新方法及裝置的製作方法
技術領域:
本發明提供一種固件更新的方法及相關裝置,尤指一種在固件更新前檢查更新用固件程序碼的內容以判斷其相容性、適用性的方法及相關裝置。
背景技術:
在現代化的信息社會中,信息、圖像、數據資料都是以電子形式的信號來傳輸、存儲及處理的,而各種各樣用來存取電子信號的電子系統、裝置,小至手機、大至計算機,也就成為信息建設的關鍵基礎。一般來說,在電子裝置中,多半設有一控制電路統一控制電子裝置的各種操作;而在功能繁複、多樣的電子裝置中,由於控制的程序比較複雜,就要用特定的程序碼來記錄各種控制程序進行的相關步驟及過程;控制電路執行程序碼,就能實現電子裝置的不同功能。這樣的程序碼,即被稱之為固件程序碼;而固件程序碼多半被存儲於電子裝置中的非易失性存儲器(如閃速存儲器)中,方便控制電路讀取、執行。另外,像在計算機系統這種功能更為複雜多樣的電子系統中,計算機的各種外圍裝置本身就具有控制電路及對應的固件程序碼;計算機的主機本身僅需發出高層的控制指令至外圍裝置的控制電路,控制電路就會執行該外圍裝置本身的固件程序碼,控制外圍裝置的實際操作。舉例來說,計算機系統中的光碟機本身就具有其控制電路及對應的閃速存儲器,以存儲光碟機本身的固件程序碼。當計算機的主機要讀取一光碟片上的數據時,僅需向光碟機指定該筆數據在光碟片上的地址,光碟機的控制電路就會執行本身的固件程序碼,協調光碟機中諸如馬達(spindle)、雷射讀取頭(pick-up head)等等機電元件的操作(如馬達要達到特定的轉速,讀取頭要移動、鎖定至特定的位置,接收光碟片上反射的雷射等等),實際實現主機的要求。
請參考圖1。圖1為一典型電子系統10的功能方塊示意圖。電子系統10可以是一計算機系統,其中包括有一主機12及一或多個外圍裝置(圖1中繪出兩個外圍裝置14、15做為代表)。外圍裝置可以是只讀光碟機、光碟刻錄機、硬碟、外接式的閃速存儲器等等;以外圍裝置14為例來說明典型外圍裝置中的配置,外圍裝置14中設有一控制電路16、一緩衝存儲器18、一存儲存儲器20及一伺服硬體22。若電子系統10為一計算機系統,則主機12的典型配置就如圖1中所示,其設有一中央處理器26、一北橋電路28A、一南橋電路28B及一易失性的存儲器30、繪圖卡32A及顯示器32B。中央處理器26用來主控主機12的操作,存儲器30用來暫存中央處理器26操作期間必需的數據、資料,繪圖卡32A則用來處理圖像數據,以將主機12操作的狀況顯示於顯示器32B上。而北橋電路28A即用來管理、控制中央處理器26與繪圖卡32A、存儲器30的數據傳輸;南橋電路28B則通過北橋電路28A電連於中央處理器26,作為各外圍裝置14、15與主機12交換數據的接口。通過南橋電路28B與外圍裝置14、15間的電連(如通過總線),主機12與各外圍裝置14、15就能互相交換數據。另一方面,在外圍裝置14中,控制電路16用來接收主機12傳來的控制指令,以控制外圍裝置14的操作。伺服硬體22即是受控於控制電路16,用來實現外圍裝置14的功能。舉例來說,若外圍裝置14為一光碟機,伺服硬體22即包括了帶動光碟片轉動的馬達、雷射讀取頭等等機電元件,以存取一光碟片上的數據。緩衝存儲器18、存儲存儲器20則用來支援控制電路16的操作;其中緩衝存儲器18為一易失性的存儲器(如隨機存取存儲器),用來暫存控制電路16操作期間的數據、資料。存儲存儲器20則為一非易失性的存儲器(如閃速存儲器),用來記錄一固件的程序碼24;正如前面所提到的,外圍裝置14的控制電路16在控制外圍裝置14時,會依循特定的固件程序碼來進行各種控制程序,程序碼24即為此固件程序碼,用來記錄不同控制程序進行的方式。控制電路16執行此程序碼24,就能根據主機12的控制指令,控制外圍裝置14的操作。
當然,在每一個外圍裝置出廠時,存儲存儲器中均已寫入固件程序碼,作為預置的固件。在外圍裝置連接於主機之後,外圍裝置中的控制電路就能依據此預置的固件控制外圍裝置的操作。然而,此預置的固件可能有某些控制程序上的錯誤(bug),等到外圍裝置出廠後才被發現的。另外,固件研發廠商即使在外圍裝置出廠後,也會持續研發新的控制程序及固件程序碼,以提升外圍裝置的操作效能,或是擴展外圍裝置的應用範圍。以光碟機為例,採用不同的控制程序,光碟機可能就能更快地鎖定雷射讀取頭的位置,以更穩定地讀取光碟片上特定部分的數據。或者,當有光碟片是採用較新規格的數據格式來記錄數據時,更新固件程序碼中部分控制程序進行的方式,光碟機可能就可以順利讀取較新數據格式的光碟片,擴大其支援的光碟片數據格式。在以上討論的各種情況下,都需要更新外圍裝置中的固件程序碼,以新的固件程序碼取代外圍裝置中既有的固件程序碼,這樣才能解決預置固件程序碼中的錯誤、提升外圍裝置的效能、擴大外圍裝置的應用範圍。在現代的外圍裝置中,固件程序碼多半都存儲於可重複覆寫的非易失性存儲存儲器中(如閃速存儲器,或是電性可擦除可程序化只讀存儲器EEPROM),只要將存儲存儲器中原來的預置固件程序碼擦除,寫入新的固件程序碼,就能以新的固件程序碼取代舊的預置固件程序碼,完成固件的更新。當外圍裝置中的控制電路執行存儲存儲器中新的固件程序碼,就能以新的控制程序控制外圍裝置的操作。
一般來說,要更新外圍裝置中的固件程序碼,主機也要進行對應的操作。請參考圖2(並一併參考圖1)。圖2流程圖中的流程100,即為公知技術中,電子系統10要對外圍裝置14進行固件更新時,主機12、外圍裝置14間協調操作的流程。圖2左半邊的步驟代表主機12進行的步驟,右半邊的步驟代表外圍裝置14所進行的步驟。公知流程100中依序有下列步驟步驟102開始。要開始更新外圍裝置14的固件程序碼時,中央處理器26會開始執行一固件更新的應用程式34,啟動整個固件更新的流程100,並在後續步驟中持續控制固件更新流程的進行。就如圖1中所示,此應用程式34會被載入至主機12中的存儲器30,由中央處理器26執行應用程式34,對外圍裝置14進行固件更新。固件更新的目的,以一新程序碼36,取代外圍裝置14中既有的程序碼24。
步驟104主機12執行應用程式34後,就會先對外圍裝置14進行裝置識別,以確定應用程式34是和外圍裝置14搭配的應用程式,能正確地控制外圍裝置14進行固件更新。如前所述,主機12可能連接有多個不同的外圍裝置,各外圍裝置的結構、功能各不相同,要控制不同的外圍裝置分別進行固件更新,主機12所要執行的應用程式當然也各不相同;要正確地對一外圍裝置進行固件更新,就要使用和該外圍裝置對應的應用程式。而本步驟就是要確定應用程式34是和外圍裝置14對應的正確應用程式。一般來說,各外圍裝置中的固件程序碼內就記錄有一固件識別碼,其中可包括有固件研發廠商的名稱(vendor ID)、該固件程序碼適用的外圍裝置的型號名稱(model name),或是該固件程序碼的版本信息等。如在外圍裝置14中的既有程序碼24,就記錄有一固件識別碼24I。而當主機12在執行應用程式34時,就可依據應用程式34的指示向外圍裝置14發出裝置識別的控制指令,要求外圍裝置14將固件識別碼24I中的相關數據(或其他可識別外圍裝置14的數據、信號)傳輸至主機12。
步驟106外圍裝置14回應主機12於步驟104中的要求,將固件識別碼24I的相關數據(或其他識別數據)回傳至主機12。
步驟108主機12執行應用程式34時,即可根據外圍裝置14回傳的識別數據,判斷外圍裝置14是否是和應用程式34搭配的裝置。事實上,在主機12與外圍裝置14進行裝置識別時,很有可能會進行數次的數據、指令交換,在不影響本發明技術討論的情形下,圖2中的流程圖已經部分簡化裝置識別的細節。根據外圍裝置14與主機12間的數據交換,若主機12判斷出應用程式34的確能和外圍裝置14互相搭配,主機12即可繼續固件更新的流程,發出控制指令詢問外圍裝置14現行的操作狀態是否能進行固件更新。因為在主機12執行固件更新的應用程式34時,外圍裝置14可能正在執行某些操作(譬如說光碟機的外圍裝置14可能正在存取光碟片上的數據),這樣就不能進行固件更新了。故此步驟中,主機12要詢問外圍裝置14目前的操作狀態。同時,主機12也可將固件更新所用的新程序碼36載入至存儲器36中,準備傳輸給外圍裝置14。
步驟110外圍裝置14回應主機的詢問,將外圍裝置14目前的操作狀態回傳至主機12。
步驟112若外圍裝置14回傳的操作狀態代表其能進行固件更新,主機12就能將暫存於存儲器30中的新程序碼36傳輸至外圍裝置14。就像典型的網路傳輸一樣,主機12在傳輸新程序碼36時,會執行一預設的檢查碼產生演算法,根據新程序碼36的內容計算出一檢查碼(checksum)36C,並與新程序碼36一併傳輸至外圍裝置14。
步驟114外圍裝置14接收主機12傳來的新程序碼及檢查碼,並將其暫存於緩衝存儲器18中。圖1中暫存於外圍裝置14緩衝存儲器18內的新程序碼37、檢查碼37C,就是外圍裝置14由主機12接收的新程序碼及檢查碼。
步驟116控制電路16同樣也會執行檢查碼產生演算法,根據其所接收到的新程序碼37計算出另一檢查碼39C,並將此檢查碼39C和由主機12傳來的檢查碼37C進行比較。控制電路16使用的檢查碼產生演算法和主機12根據新程序碼36產生檢查碼36C的檢查碼產生演算法是一樣的;若在新程序碼、檢查碼由主機12傳輸至外圍裝置14的過程中沒有發生數據傳輸的錯誤,外圍裝置14接收到的新程序碼37應該就等於主機12所要傳輸的新程序碼36,而控制電路16所計算出來的檢查碼39C應該也會等於其所接收的檢查碼37C。反之,若控制電路16計算出來的檢查碼39C其接收到的檢查碼37C不一致,就代表主機12傳輸新程序碼/檢查碼至外圍裝置14的過程中發生了數據傳輸的錯誤。若在本步驟中比較出檢查碼39C與檢查碼37C為一致的,就可進行至步驟118;反之,若兩檢查碼不一致,就要進行至步驟120。
步驟118在公知技術中,控制電路16在步驟116中判斷新程序碼37的傳輸無誤後,就會將存儲存儲器20中既有的程序碼24擦除(erase),並將暫存於緩衝存儲器18中的新程序碼37覆寫至存儲存儲器20中;這樣一來也就完成外圍裝置14的固件更新了。接下來控制電路16就可以執行被寫入至存儲存儲器20的新程序碼37,以控制外圍裝置14的操作。當然,在固件更新成功後,外圍裝置14也可將更新成功的情況回傳至主機12;而主機12也可再次要求外圍裝置14傳輸新程序碼中的固件識別碼至主機12以確認固件更新成功。在不影響本發明技術討論的情形下,圖2中已略去上述操作的細節。步驟120若在步驟116中控制電路16比較發現檢查碼37C、39C不一致,就可進行必要的錯誤處理。舉例來說,控制電路16可要求主機12將新程序碼36重新傳輸一次,重新進行步驟116中的檢查碼比較;或是將發生錯誤的情況回傳至主機12,由主機12決定後續的操作。
步驟122結束固件更新的流程。
總結來說,在以圖2中的公知流程100進行固件更新時,主機12、外圍裝置14間在確認互連的狀態、外圍裝置14可以進行固件更新後,主機12隻是單純將固件更新的新程序碼36傳輸至外圍裝置14,而外圍裝置14在進行步驟116的檢查碼比較而確認新程序碼的傳輸無誤後,就會進行固件更新。上述公知流程的主要缺點之一,就是無法確保固件更新用的新程序碼的內容是否真的是合乎外圍裝置14應用的固件程序碼。一般來說,固件更新的新程序碼36是由主機12的使用者取得(如由網路下載),再於固件更新的過程中由應用程式34載入至主機12的存儲器30中。然而,在使用者取得新程序碼36的過程中就有可能出錯,使得新程序碼36本身為不符合外圍裝置14應用的固件程序碼。舉例來說,主機12的使用者可能是由網路下載而取得新程序碼36,但網路下載的過程中可能會發生網路傳輸的錯誤,使得新程序碼36本身是不完整的。或者,使用者也可能誤判固件程序碼的版本。如前所述,固件研發廠商可能不斷釋出新版本的固件程序碼,外圍裝置14在出廠時可能已經內建了較新版本的預置程序碼,但使用者在未察覺的情況下,欲取得了較舊版本的新程序碼36要來為外圍裝置14進行固件更新;換句話說,在此情況下,圖1中的既有程序碼24為較新的版本,新程序碼36本身反而是較舊的版本。此時若進行固件「更新」,反而會將固件程序碼降級。另外,使用者也可能錯誤地取得不合乎外圍裝置14應用的固件程序碼作為新程序碼36。舉例來說,使用者取得的新程序碼36可能根本不是適用於外圍裝置14的固件程序碼。尤其是在技術發展快速的現代社會,同一廠商可能推出多種不同型號、功能各異的同類型外圍裝置。如在光碟機這種常見的計算機系統外圍裝置中,就有各種不同讀取倍速的光碟機,或是某些光碟機僅能讀取光碟片的數據,有些光碟機則還能將數據刻錄至光碟片;某些光碟機則支援較多不同格式光碟片的數據讀取。雖然研發廠商會針對不同型號的外圍裝置釋出不同的更新用固件程序碼,但使用者可能一時不察,取得與外圍裝置14完全不相符的新程序碼36來為外圍裝置14進行固件更新。除此之外,還有可能有某些惡意的破壞者,故意提供錯誤的固件程序碼作為新程序碼36,意圖以固件更新的流程將錯誤的固件程序碼植入外圍裝置14中,以癱瘓外圍裝置14的正常操作。
在上述的各種情況下,主機12要用來進行固件更新的新程序碼36,其實已經不合乎外圍裝置14的應用;但在公知的固件更新流程100中,卻無法檢查出新程序碼36是否適用。在公知流程100中,主機12雖然會在步驟104進行裝置識別,通過外圍裝置14檢查既有的程序碼24的固件識別碼24I,但主機12檢查的是外圍裝置14已在操作中的固件程序碼(也就是外圍裝置14既有的程序碼24),不會檢查新程序碼36是否合乎外圍裝置14的應用。另外,外圍裝置14的控制電路16會在步驟116中檢查與新程序碼36相關的檢查碼,但此步驟只能檢查出新程序碼36在主機12、外圍裝置14間傳輸時是否發生數據傳輸的錯誤,也不能檢查出新程序碼36是否適用。即使新程序碼為不適用的固件程序碼,只要主機12、外圍裝置14間的數據傳輸沒有發生問題,流程100還是會通過步驟116,將不適用的新程序碼寫入至存儲存儲器中。換句話說,在步驟116中,即使檢查碼符合,也只代表主機12是將不適用的新程序碼36完整正確地傳輸至外圍裝置14而成為新程序碼37(見圖2),新程序碼37不適用的本質還是不會改變,也不能由步驟116中檢查出來。雖然控制電路16在步驟116中會依據新程序碼37計算出檢查碼39C,使得檢查碼39C能反映出新程序碼37的內容,但步驟116中用來比較檢查碼39C的另一檢查碼37C也還是依據新程序碼36所算出的,並不能代表「適用」的固件程序碼所應具有的檢查碼(尤其是當新程序碼36本身就是不適用的固件程序碼時)。換句話說,當公知流程100在進行步驟116時,控制電路16本身並不能得知「適用」的固件程序碼對應的檢查碼為何,當然也就不能在步驟116中檢查比較出新程序碼37是否適用。若在固件更新流程中誤將錯誤、不適用的固件程序碼植入至外圍裝置14中,不但無法達到固件更新的目的,還會導致外圍裝置14不能正確操作的嚴重後果。

發明內容
因此,本發明的主要目的,在於提供一種新的固件更新方法及相關裝置,能篩選出更新用的新固件程序碼是否真正適用,以克服公知技術的缺點。
在公知技術中,不論是在主機端或是在外圍裝置的裝置端,都無法檢查出固件更新所用的新程序碼是否合乎外圍裝置的實際應用,因此也無法避免不適用的新程序碼在公知的固件更新流程中被誤植入外圍裝置。
在本發明中,則會在對一外圍裝置進行固件更新的流程中加入主機端檢查步驟及/或裝置端檢查步驟,將更新用的新固件程序碼的部分內容與一預設的內容比較,以實際判斷新固件程序碼是否適用。在實際實施時,可檢查新固件程序碼中的固件識別碼(包括固件研發廠商的名稱,以及該固件程序碼適用的外圍裝置的型號名稱)是否和該外圍裝置中既有的固件程序碼的固件識別碼相符,也可檢查新固件程序碼中是否包含有特定的指令、常數。另外,也可檢查新固件程序碼中特定地址的指令、數據是否合乎預期中的指令、數據,或是搜尋新固件程序碼中特定指令、數據的地址是否位於預設的地址,以判斷固件更新所用的新固件程序碼是否合乎外圍裝置應用的正確固件。上述的檢查步驟可在主機端、裝置端分別獨立進行,確保固件更新所用的新固件程序碼為適用的固件程序碼,避免在固件更新流程中誤將不適用的固件程序碼植入外圍裝置中。


圖1為一典型電子系統中主機及外圍裝置配置的示意圖。
圖2為圖1中電子系統以一公知流程進行固件更新的流程示意圖。
圖3為本發明電子系統中主機及外圍裝置配置的示意圖。
圖4為圖3中電子系統以本發明流程進行固件更新的流程示意圖。
圖5A至5E分別為圖4中主機端/裝置端檢查步驟不同實施例的示意圖。
圖式的符號說明10、50電子系統 12、52 主機14-15、54-55 外圍裝置16、56控制電路 18、58 緩衝存儲器20、60存儲存儲器 22、62 伺服硬體24、64程序碼24I、64I、76I、77I 固件識別碼26、66中央處理器28A、68A 北橋電路 28B、68B 南橋電路30、70存儲器 32A、72A 繪圖卡32B、72B 顯示器 34、74 應用程式36-37、76-77、84新程序碼36C、37C、39C、76C、77C、79C檢查碼56B 檢查模塊80、82預設內容 86 源碼88、89固件程序碼 90A-90D 程序片段92A-92C、92D1、92D2部分內容94指令碼 95 數據100、200 流程102-122、202-224 步驟具體實施方式
請參考圖3。圖3為本發明電子系統50配置的功能方塊示意圖。電子系統50中設有一主機52及一或多個搭配操作的外圍裝置(圖3中繪出兩個外圍裝置54、55做為代表),以擴充主機52本身的功能。電子系統50可以是一計算機系統;在此情況下,主機52中可設有中央處理器66、北橋電路68A、南橋電路68B、存儲器70、繪圖卡72A及顯示器72B;外圍裝置54、55則可以是光碟機、光碟刻錄機、硬碟機等等。以外圍裝置54為例來說明外圍裝置中的配置;外圍裝置54中設有一控制電路56、一用來實現外圍裝置54功能的伺服硬體62、一用來以易失性方式暫存數據的緩衝存儲器58(如隨機存取存儲器),以及一用來以非易失性的方式存儲數據的存儲存儲器60(如閃速存儲器);而控制電路56中則有一檢查模塊56B。在主機12中,中央處理器66用來主控主機52的操作,繪圖卡72A能將主機52操作的狀態與結果轉變為圖像信號,並於顯示器72B顯示出來。易失性的存儲器70(如隨機存取存儲器)用來暫存中央處理器66操作時必需的程序碼及相關數據、資料。北橋電路68A即用來管理中央處理器66、存儲器70及繪圖卡72A間的數據傳輸。通過電連於北橋電路68A的南橋電路68B,主機12就能和各外圍裝置54、55交換指令、數據;其中南橋電路68B和各外圍裝置間可以用總線(如IDE、EIDE等總線)相互連接。在外圍裝置54方面,就如前面討論過的,為了要控制外圍裝置54中進行多種操作,也會以一固件程序碼來記錄各種控制程序實行的方法;圖3中存儲於存儲存儲器60中的既有程序碼64就是此一固件程序碼。控制電路56接收主機52傳來的控制指令後,就能執行存儲存儲器60中的程序碼64來控制伺服硬體62,以實現主機52要求的功能。而緩衝存儲器58則用來暫存外圍裝置54操作期間的數據。舉例來說,若外圍裝置54為一光碟刻錄機,伺服硬體62會包括有馬達、光學讀取頭等機電元件;主機52要刻錄至光碟片上的數據會先暫存於緩衝存儲器58中,再由伺服硬體62實際將這些暫存於緩衝存儲器58的數據刻錄至光碟片上;而伺服硬體62由光碟片上讀到的數據,也會暫存於緩衝存儲器58中,再由控制電路56安排,將這些數據回傳至主機52。
就如前面所討論過的,外圍裝置會有固件更新的需要。請參考圖4(並一併參考圖3)。圖4所示即為本發明於電子系統50中進行固件更新的流程200;於圖4圖面左方的步驟是在主機52這一端進行,右方的步驟是由外圍裝置54進行。流程200中設有下列步驟步驟202開始。當電子系統50要對外圍裝置54進行固件更新時,主機52中的中央處理器66就會將一固件更新的應用程式74載入至存儲器70中(請一併參考圖3),並開始執行應用程式74,以啟動整個固件更新的流程200,並在後續步驟中持續控制流程200的進行。固件更新的目的,要以一新程序碼76,取代外圍裝置54中既有的固件程序碼64。
步驟204主機52要求外圍裝置54進行裝置識別。如前所述,各外圍裝置的固件程序碼中,都記錄有一固件識別碼,記錄固件研發廠商的名稱(vendorID),以及該固件程序碼適用的外圍裝置的型號名稱(model name)。就如圖3中所示,外圍裝置54在固件更新前的既有程序碼64,也記錄有對應程序碼64的固件識別碼64I。在進行裝置識別時,主機52即可發出控制指令,要求外圍裝置54回傳固件識別碼64I的相關數據,以確認應用程式74是和外圍裝置54搭配的正確程序,能在後續步驟中正確地和外圍裝置54配合以進行固件更新。
步驟206外圍裝置54中的控制電路56接收到主機52於步驟204中傳來的控制指令後,就會將固件程序碼64中與固件識別碼64I相關的數據回傳至主機52。
步驟208主機52根據外圍裝置54回傳的固件識別碼64I數據(或其他主機52要求的識別數據),就可以判斷應用程式74能否配合外圍裝置54的固件更新。若主機52確認應用程式74的確能和外圍裝置54搭配,主機52就會繼續執行應用程式74,以進行外圍裝置54固件更新的後續步驟。在此同時,中央處理器66也可將固件更新用的新程序碼76載入至存儲器70中(就如圖3中所示)。在實施裝置識別的過程中,主機52、外圍裝置54可能會進行數次的數據交換;在不影響本發明技術公開的情形下,圖4中已適當地省略了裝置識別的細節。
除了進行裝置識別之外,為了進一步確認新程序碼76的內容為適合外圍裝置54應用的固件程序碼,本發明還會額外進行一主機端檢查步驟,以依據新程序碼76的內容,判斷新程序碼76是否為適用的固件程序碼。主機端檢查步驟進行的方式可有數種實施例。舉例來說,新程序碼76既然為一固件程序碼,其中當然也記載了一固件識別碼76I(請一併參考圖3),就像外圍裝置54中的既有程序碼64也有一對應的固件識別碼64I。而在此主機端檢查步驟中,主機12就能檢查新程序碼76中的固件識別碼76I是否和既有程序碼64中的固件識別碼64I相符,以驗證新程序碼76是否和外圍裝置54中既有的程序碼64一樣由同一固件研發廠商所研發,或是適用於相同型號的外圍裝置。另外,固件研發廠商也能事先在固件程序碼中的固定地址記錄預設的控制指令或字串、數據,形成一預設內容80(見圖3);等主機52進行主機端檢查步驟時,就能檢查新程序碼76在該固定地址中是否具有預設內容80(如圖3所示意的),以判斷新程序碼76的適用性。或者,主機52也可搜尋新程序碼76中具有預設內容的部分,再檢查該部分的地址是否在固件研發廠商預設的地址,以判斷新程序碼76的適用性。主機端檢查步驟進行的各種方式及原理,會在稍後更進一步討論。
若進行主機端檢查步驟後主機52判斷新程序碼76為一適用的正確程序碼,就能繼續固件更新的流程。接下來主機52可發出指令詢問外圍裝置54的狀態是否可進行固件更新。
步驟210外圍裝置54回應主機於步驟208中的詢問,將外圍裝置54目前的狀態回傳至主機52。
步驟212主機52接收外圍裝置54於步驟210中回應的信號;若外圍裝置54正處於可進行固件更新的狀態,主機52就可以開始將已載入至存儲器70的新程序碼74傳輸至外圍裝置54。如同步驟204、206中的裝置識別,步驟210、212中對外圍裝置54的裝置狀態檢查也可能會在主機52、外圍裝置54間進行數次的數據往來傳輸;在不影響本發明技術公開的情況下,圖4中已適當地簡化相關細節。就如圖3中所示意的,在主機52要將新程序碼76傳輸至外圍裝置54之前,也會以一預設的檢查碼產生演算法,根據新程序碼76的內容計算出一檢查碼76C,並將其附加於檢查碼76,連同檢查碼76一起傳輸至外圍裝置54。
步驟214外圍裝置54接收主機52傳來的新程序碼及附加的檢查碼,並將其暫存於緩衝存儲器58中,也就是圖3中所示的新程序碼77及檢查碼77C。步驟216外圍裝置54的控制電路56會利用檢查碼產生演算法,根據新程序碼77的內容計算出一檢查碼79C(見圖3),並驗證檢查碼79C與外圍裝置54由主機52處接收到的檢查碼77C是否相同。若兩者相同,代表主機52在將新程序碼傳輸至外圍裝置54的過程中沒有發生數據傳輸錯誤。
在確定固件更新用的新程序碼已經完整地由主機52傳輸至外圍裝置54後,本發明還會在外圍裝置54中另外進行一裝置端檢查步驟,由控制電路56實現檢查模塊56B的功能,以檢查暫存於緩衝存儲器58中的新程序碼77是否為適用的固件程序碼。舉例來說,控制電路56可比較暫存於緩衝存儲器58中的新程序碼77是否和存儲存儲器60中的既有程序碼64具有相同的固件識別碼。由於新程序碼77是由主機52傳輸過去的,在數據傳輸無誤的情形下,新程序碼77也具有和固件識別碼76I相同的固件識別碼77I;控制電路56比較固件識別碼77I和既有固件程序碼64的固件程序碼64I是否相符,就能判斷新程序碼77是否為適用於外圍裝置54的固件程序碼。類似於主機端檢查步驟,於外圍裝置58中進行的裝置端檢查步驟也可以檢查新程序碼77中位於特定的預設地址的部分內容是否符合一預定內容82(如圖3中所示意的);或是在新程序碼77中搜尋某些預設內容是否存在,或是否位於某些特定地址。至於本發明裝置端檢查步驟進行的細節、原理,將在後面做進一步的說明。
當然,若在進行本發明裝置端檢查步驟前,控制電路56發現檢查碼77C與控制電路56計算出來的檢查碼79C不符合,代表新程序碼再由主機52傳輸至外圍裝置54的過程中發生數據傳輸的錯誤。此時控制電路56可將錯誤的情形回傳至主機52,或要求主機52重新傳輸新程序碼,直到新程序碼被完整的傳輸至外圍裝置54,再進行本發明的裝置端檢查步驟。
步驟218若控制電路56進行裝置端檢查步驟後判斷新程序碼77的確適用於外圍裝置54,就能進行至步驟220;若否,則進行至步驟222。
步驟220通過了檢查碼的驗證,以及本發明裝置端檢查步驟的驗證,外圍裝置54一方面能確認本身已正確接收由主機52傳來的新程序碼77,另一方面也能確認新程序碼77為外圍裝置54適用的固件程序碼,此時控制電路56就能將存儲存儲器60中原先做為固件程序碼的程序碼64擦除,將新程序碼77寫入至存儲存儲器60中,以取代原先的程序碼64,完成固件更新。接下來控制電路60就能執行存儲存儲器60中的新程序碼77,以新的控制程序控制外圍裝置54的操作。當然,在固件更新完成後,外圍裝置54也能向主機52回報固件更新完成的狀況,主機52也可要求外圍裝置54再度將新固件程序碼中固件識別碼的相關信息回傳,確認固件更新已完成等等。在不影響本發明技術公開的情形下,這部分的細節流程已於圖4中省略。
步驟222若在步驟216中進行本發明的裝置端檢查步驟時,發現新程序碼77並非適用的固件程序碼,控制電路56就要進行錯誤處理。控制電路56可將新程序碼不適用的情形回傳至主機52,由主機52的使用者決定後續的步驟。最重要的是,此時控制電路56不會將不適用的新程序碼覆寫至存儲存儲器60,使得控制電路56在後續的過程中不會依據不適用的新程序碼來控制外圍裝置54,而外圍裝置54的操作也不會因固件更新流程中的不適用固件程序碼而受影響。
步驟224結束本發明固件更新的流程。
由以上對本發明固件更新流程的描述可知,本發明的流程200除了在固件更新的過程中進行了裝置識別、檢查碼的確認外,還額外地進行了主機端檢查步驟及裝置端檢查步驟。前者能在主機52在將固件更新的新程序碼76傳輸至外圍裝置54之前,先檢查新程序碼76是否為適用於外圍裝置54的固件程序碼。在將新程序碼76順利傳輸至外圍裝置54而成為新程序碼77後,外圍裝置54還會進行一裝置端檢查步驟,以便在將程序碼77實際寫入至存儲存儲器60之前,檢查程序碼77是否適用於外圍裝置54。經由本發明主機/裝置端檢查步驟的實施,將可更進一步地確認固件更新流程不會誤將不適用的固件程序碼植入至外圍裝置。至於本發明主機/裝置端檢查步驟進行的方式,可以有數種實施例,以下將一一討論。
首先,請參考圖5A(並一併參考圖3)。圖5A為本發明中主機/裝置端檢查步驟進行方式實施例之一的示意圖。如同前面所提過的,固件研發廠商在固件程序碼中都定義了一些關於固件本身的數據,如固件研發廠商的名稱(vendor ID),該固件程序碼適用的外圍裝置的型號名稱(model name),甚至於有序號(serial number)或者是版本信息,形成一固件辨識碼。即使在不同版本的固件程序碼中,也都會統一記載有這些信息。如圖5A所示,不論是外圍裝置54在固件更新前既有的固件程序碼64,或者是固件更新所使用的新程序碼76(或者是新程序碼77),只要是共同適用於外圍裝置54的固件程序碼,就應該具有相同形式的固件識別碼。一般來說,在固件程序碼中,固件識別碼的相關信號是記錄於固件程序碼中的一段常數(constant)中。如本領域技術人員所知,固件研發廠商都是以較高層的程序語言來將外圍裝置的各種控制程序編寫至一源碼(source code)中,再經由一編譯器(complier)軟體的編譯(compile)後,成為外圍裝置中控制電路可執行的二進位碼的固件程序碼。固件研發廠商通常在固件程序碼的源碼中以一常數陣列(array)_pbTBL Inquiry[]來編譯該固件識別碼內容,該內容可以直接以數值表示,例如0x05,或者以字元(character)編輯,例如『A』表示本領域技術人員所知的ASCII碼,經編譯器編譯成為外圍裝置中控制電路可執行的二進位碼的固件程序碼後,以一對應的二進位碼常數存在於該固件程序碼中。故在固件程序碼中,一定有部分內容是用來定義此一常數的內容值。舉例來說,如圖5A所示,在既有程序碼64的固件識別碼64I中,其部分內容就是以二進位碼方式來將常數_pbTBL Inquiry的值定義為{0x05,0x80,…,『A』,『b』,…,『d』,『M』,…,『k』,『m』,…,…},其中「Abcdefgh」就代表固件研發廠商的名稱,「Modelikmh」就代表型號名稱,其他數據則可用來代表固件版本等其他數據。同理,固件更新所用的新程序碼76若為適用的固件程序碼,其中一定也有一固件識別碼76I,同樣地用來定義常數_pbTBL Inquiry[]的值。當要進行本發明的主機端檢查步驟時,主機52就可執行固件更新的應用程式74(如圖3)而搜尋新程序碼76,以檢查新程序碼76中是否有部分內容是用來定義常數pbTBLInquiry的,而此常數又被定義為特定的值。同時,主機52也可以要求外圍裝置54回傳既有程序碼64中其常數_pbTBL Inquiry的值。當然,若新程序碼76中根本沒有定義此一常數,代表其一定不是正常的固件程序碼。若新程序碼76中的確有定義此常數,且新程序碼76中此常數的值與既有程序碼64中定義的值相符(如固件研發廠商的名稱相同,型號名稱相同),主機52就可在主機端檢查步驟中判斷新程序碼76為適用的固件程序碼。另外,在主機端檢查步驟中,主機52也可更進一步地根據新程序碼76中的版本信息來判斷新程序碼76(相對於既有程序碼64)是不是較新版本的固件;若新程序碼76版本反而較舊,主機52也可判斷新程序碼76為不適用的固件程序碼。進一步推廣此種比較的概念,本發明也可檢查新程序碼中某常數的值是否在某預設值的特定範圍內。如在上述的例子中,就是檢查新程序碼中記錄的版本是否大於既有程序碼的版本。
除了將新程序碼76中的固件識別碼76I和既有程序碼64中的固件識別碼64I比較以進行主機端檢查步驟外,固件研發廠商也可在釋出固件更新所用的應用程式74時,直接在應用程式74中記錄常數_pbTBL Inquiry應有的格式及值(或是其值的合理範圍);當主機52執行應用程式74而進行主機端檢查步驟時,就可以依據應用程式74中對常數_pbTBL Inquiry的要求,直接判斷新程序碼76是否為適用的固件程序碼,不必依據固件識別碼64I中的信息為比較的基準。依據上述的道理,外圍裝置54中的控制電路56也可在進行裝置端檢查步驟時,利用既有程序碼64中對常數_pbTBL Inquiry的定義,檢查暫存於緩衝存儲器58中的新程序碼77是否為適用的固件程序碼。同理,在外圍裝置54出廠時,固件製造廠商也可在控制電路56中預先設定常數__pbTBL Inquiry應有的標準格式、內容值或內容值的合理範圍(如版本編號應大於某一預設值),日後當控制電路56進行裝置端檢查步驟時,就可以獨立判斷新程序碼77是否具有正確的_pbTBL Inquiry常數定義。在現行的信息業界中,在固件程序碼中加入固件識別碼已經是一種標準的作法,而本發明也可方便地直接利用固件識別碼來判斷固件更新用的新固件程序碼是否適用。
請繼續參考圖5B(及圖3)。圖5B為本發明中主機/裝置端檢查步驟進行方式另一實施例的示意圖。除了利用固件程序碼中普遍已定義的固件識別碼來判斷固件程序碼的適用性外,固件研發廠商也可在固件程序碼中預先插入特別定義的字串、數據,做為日後識別固件程序碼適用性的依據。如本領域技術人員所知,固件研發廠商都是以較高層的程序語言來將外圍裝置的各種控制程序編寫至一源碼(source code)中,再經由一編譯器(complier)軟體的編譯(compile)後,成為外圍裝置中控制電路可執行的二進位碼的固件程序碼。固件研發廠商可在固件程序碼的源碼中以一常數陣列(array)來編譯一特別定義的字串、數據,該內容可以直接以數值表示,例如0x06,或者以字元(character)編輯,例如『A』表示本領域技術人員所知的ASCII碼,經編譯器編譯成為外圍裝置中控制電路可執行的二進位碼的固件程序碼後,以一對應的二進位碼常數存在於該固件程序碼中。如圖5B的實施例所示意的,固件研發廠商可在固件程序碼的源碼86中額外加入程序片段90A、90B,以分別定義出一字串_pbSpecString(其內容為『M』,『e』,『d』,『i』,『a』,『t』,『e』,『k』)以及一常數_pbSpecVaIue。請注意,程序片段90B中不僅定義了常數_pbSpecValue的值,還以指令「_at_0xFFE0」定義了該常數值應存在一特定地址0xFFE0(也就是十六進位的地址FFE0)。根據此指令,編譯器就會在編譯過程中將此常數值置於該特定地址。等到源碼86被編譯為二進位碼的固件程序碼88後,對應於源碼86中的程序片段90A,固件程序碼88中必定有部分內容92A是以二進位碼來記錄常數_pbSpecString的定義值;對應於程序片段90B,由固件程序碼88的地址0xFFE0處開始,也有部分內容92B是以二進位碼記錄常數_pbSpecValue的定義值。固件程序碼88釋出後,也就成為固件更新用的新程序碼(如圖3中的新程序碼76)。利用新程序碼中特別定義的字串、常數,就可以實施本發明中的主機/裝置端檢查步驟。舉例來說,主機52、控制電路56在進行主機、裝置端檢查步驟時,可分別檢查新程序碼76、77中是否記錄有「Mediatek」這個字串以定義字串_pbSpecString。因為固件研發廠商釋出的適用新程序碼必定有部分內容是用來記錄「Mediatek」以定義字串_pbSpecString,若在主機/裝置端檢查步驟中發現新程序碼並沒有記錄「Mediatek」,就代表該新程序碼為不適用的程序碼。同理,主機52、控制電路56也可在主機/裝置端檢查步驟中檢查新程序碼是否在地址0xFFE0處存有常數_pbSpecValue正確的定義值。若新程序碼中在地址0xFFE0記錄的不是常數_pbSpecValue的正確定義值,就代表新程序並非適用的固件程序碼。或者,也可在進行主機/裝置端檢查步驟時,檢查常數_pbSpecValue的定義值是否存在新程序碼特定地址0xFFE0處。當然,要以上述方式來實施本發明主機/裝置端檢查步驟時,固件製造廠商在外圍裝置54出廠前,就要預先設定控制電路56(圖3),以使控制電路56在日後進行裝置端檢查步驟時,能知道要比較的目標(也就是圖3中的預設內容82;如要在新程序碼中尋找「Mediatek」,或是在新程序碼的那個特定地址應該存有哪些特定值)。同理,固件製造廠商也要在釋出固件更新的應用程式74前,預先在應用程式74中記錄主機端裝置檢查步驟要比較的目標,讓主機52能在執行應用程式74後依照上述的比較原理進行主機端檢查步驟。
請參考圖5C。圖5C為本發明主機/裝置端檢查步驟進行方式另一實施例的示意圖。除了上述以固件程序碼中特別定義的常數、定值字串來進行本發明的檢查步驟外,也可以根據固件程序碼中特定的指令來進行本發明的檢查步驟。如圖5C所示,固件研發廠商在編寫固件程序碼的源碼86時,可加入程序片段90C,以「CSEG AT FF80H」的指令將一段預設的指令碼94編譯至地址FF80H(也就是十六進位的地址FF80)。指令碼94中定義的可以是有意義、有實際用途的控制程序,或是一些並無實際用途的冗餘操作(如將兩變數的值交換後再換回來)。圖5C中示意的指令碼94,其第一行「MOV DRTP,#0800H」即用來讓一指針(pointer)DRTP指出緩衝存儲器中的一個地址0800H(十六進位的地址0800);第二行「MOVX A,@DRTP」則將一暫存器A中存儲的值移到指針DRTP指向的地址,等等。在將源碼86編譯為固件程序碼88後,根據程序片段90C所指定的地址FF80H,固件程序碼88就會在起始於地址FF80H的部分內容92C中,以二進位碼的形式來記錄指令碼94。將固件程序碼88釋出為固件更新所用的新程序碼後,就可依據新程序碼是否在地址FF80H有對應指令碼94的部分內容92C(或是搜尋部分內容92C是否起始於地址FF80H),來進行本發明的主機/裝置端檢查步驟,以判斷新程序碼是否為固件研發廠商所釋出的適用固件程序碼。類似於圖5B中實施例的情況,應用程式74、控制電路56也要在事先設定好要比較的目標(如指定地址、指令碼94對應的二進位碼為何),方便日後進行主機/裝置端檢查步驟時,做為檢查進行的依據。
請參考圖5D。圖5D為本發明主機/裝置端檢查步驟又一實施例的示意圖。如圖5D所示,固件研發廠商也可在固件程序碼的源碼86中加入程序片段90D,以便在編譯後於固件程序碼88中的特定地址加入特定的值。舉例來說,圖5D中的程序片段90D,指令「CSEG AT 0005H」及下一行的「DBE1H」就是指定要將一位元組的數據(內容為十六進位的E1)記錄於固件程序碼88中的地址0005H(十六進位的地址0005);指令「CSEG AT FFFEH」及次行的「DB E2H」則將一位元組的值E2記錄於地址FFFEH。將源碼86編譯為固件程序碼88後,固件程序碼88就會在地址0005H的部分內容92D1處以二進位碼記錄有十六進位的數值E1,在地址FFFEH的部分內容92D2處記錄有十六進位的數值E2。在進行本發明的主機/裝置端檢查步驟時,即可檢查新程序碼在特定地址處是否記錄有特定的值(如在地址0005H處是否為數值E1),以判斷新程序碼是否為固件研發廠商釋出的適用固件程序碼。
請參考圖5E。圖5E為本發明主機/裝置端檢查步驟進行方式另一實施例的示意圖。除了在源碼中以程序片段插入特定的數據、指令以做為判斷新程序碼是否適用的依據外,本發明也可在編譯後的固件程序碼中插入特定的數據,做為檢查步驟進行的依據。如圖5E所示,一般來說,當固件程序碼的源碼86經過編譯而成為固件程序碼88後,固件程序碼88除了用來記錄指令、數據(如常數值)的部分內容外,還會留下一些未使用區段(unusedsegment)。這些未使用區段會被填入特定的填充數據。像在圖5E中,在部分內容92E1到92E4標記為斜線的部分,都記錄了有意義的程序、指令所對應的二進位碼,所謂的程序碼區段(code segment);被填入十六進位「F」的部分,即是所謂的未使用區段,沒有用來記錄任何程序、指令。像在部分內容92E2、92E3之間,就有未使用區段。另外,由於固件程序碼88多半會被編譯為固定大小(如512Kbyte)的程序碼,以方便記錄於外圍裝置中的存儲存儲器,故固件程序碼88的最後一定會有一些多餘、未用來記錄任何程序、指令的未使用區段。當外圍裝置中的控制電路在執行固件程序碼時,會在各個程序區段間跳躍地讀取指令,不會執行到未使用區段,故本發明也可在固件程序碼88中的未使用區段插入特定的數據做為標記,不僅不影響外圍裝置執行固件程序碼的操作,而插入的標記也可當作本發明主機端/裝置端檢查步驟進行時檢查的依據。如圖5E所示,在固件程序碼88中的未使用區段插入數筆數據95後,就變成了固件程序碼89;而固件程序碼89也就是固件研發廠商正式釋出的新程序碼。當要進行本發明的主機/裝置端檢查步驟時,就可在新程序碼的未使用區段中的特定地址搜尋是否有插入的數據,判斷新程序碼是否適用。類似於本發明於圖5B、C、D中的實施例,固件研發廠商也要事先設定固件更新的應用程式74及控制電路56,使主機52、外圍裝置54在進行檢查步驟時,能知道比較的目標,如在未使用區端中的那個地址應該會有什麼樣的數據。相對於圖5E的實施例是將標記的數據插入至未使用區段,在圖5A至圖5D的實施例中,用來當作主機端/裝置端檢查步驟進行依據的數據都會位於程序碼區段。
除了上述的方法,本發明主機端/裝置端檢查步驟尚有以下數種其他的作法。舉例來說,在進行檢查步驟時,可搜尋新程序碼中某一特定的指示數據(如字串、常數)所在的地址,由該地址平移一段預設的平移地址後計算出一新地址,再檢查新程序碼於該新地址的內容是否符合另一預設內容。換句話說,當固件研發廠商在釋出固件程序碼時,不但要在程序碼中加入指示數據,也要在該指示數據所在地址平移該平移地址的地方,加入該預設內容,以在程序碼釋出後,配合客戶進行主機端/裝置端檢查步驟。另外,在進行檢查步驟時,也可檢查新程序碼中位於不同預設地址的不同常數在經過預設的運算後,否符合一預設值。舉例來說,可檢查新程序碼中分別位於兩不同地址的常數相加後,否為一預定值。在前面曾經提到過,檢查步驟可檢查固件識別碼中固件版本的數值大小做為固件程序碼適用於否的依據,不過惡意的破壞者也可能在竄改程序碼時,一併竄改固件版本的數值,意圖躲過檢查步驟的檢查而在固件更新過程中將竄改後的固件程序碼植入外圍裝置中。針對這種情形,固件研發廠商就可在真正的新程序碼中,於另一預設的地址植入另一檢查用常數,而此檢查用常數和新程序碼的固件版本數值相加後為一預設的定值;換句話說,在更新、固件版本數值更大的程序碼中,此檢查用常數也隨之變小。而當進行主機端/裝置端檢查步驟時,主機/外圍裝置除了檢查固件版本的數值是否大於既有固件版本的數值外,還可以在預設地址找到此檢查用常數,並檢查此檢查用常數和新程序碼中記錄的固件程序版本相加的數值是否為預設的定值。這樣一來,就能進一步確認固件版本數值本身是否正確。
由上述討論延伸,本發明主機端/裝置端檢查步驟也可以先搜尋兩個預設內容的數據分別所在的兩個地址,再檢查這兩個地址之間的程序碼是否具有某種預設的特性。舉例來說,固件研發廠商在釋出適用程序碼時,可在兩預設內容數據之間記錄一連串的數值,而這一連串的數值相加後的值為一定值(或是依據預設的規律遞增或遞減);或者是兩預設內容數據之間的數據在經過一預設的演算法處理後,能得到一預設的標準值。這樣一來,當進行主機端/裝置端檢查步驟時,主機/外圍裝置就能檢查在新程序碼中,此兩預設內容數據間的數據是否合乎預設的規律,或是否能在以預設演算法處理後得到預設的標準值。在這種作法之下,固件研發廠商可在不同版本的固件程序碼中,在兩預設內容數據間加入不同的數據,但加入的數據在經過預設演算法後均能得到同一標準值。這樣一來,就可避免適用程序碼的比較標準暴露於程序碼中。因為不同版本的適用程序碼中,兩預設內容數據間的數據均會相異,即使惡意破壞者分析不同版本的適用程序碼,也難以歸納出特定的規律以避開本發明檢查步驟的篩檢。
由以上對本發明主機/裝置端檢查步驟的討論可知,本發明是比較新程序碼中是否有預設內容的數據(如字串、數據),或是在預設地址中是否有預設內容的數據(或預設數據是否在預設地址),以在固件更新的流程中判斷固件更新所用的新程序碼是否為適用的程序碼。在實施本發明時(尤其是圖5B至圖5E的實施例),固件研發廠商可先擬定主機/裝置端檢查步驟進行的總體策略,以在外圍裝置出廠、釋出固件更新的應用程式前,先設定好主機/裝置端檢查步驟進行時的比較目標,而在日後陸續釋出更新用的固件程序碼時,也要對應地在固件程序碼中加入比較用的數據。這樣一來,就能在外圍裝置要更新固件時,確保固件研發廠商所釋出的適用固件程序碼能通過主機/裝置端檢查步驟,而不適用的固件程序碼會在檢查步驟中被篩檢出來,讓不適用的固件程序碼不會在固件更新流程中被誤植入外圍裝置中。在設定外圍裝置54的控制電路56的比較目標時,由於控制電路56是依據既有程序碼來操作的,所以比較的目標、裝置端檢查步驟進行的方式,也可以記錄於外圍裝置54預建的固件程序碼中。在實施本發明時,圖5A至圖5E的各種實施方法能單獨使用,或是合併多種方法一起實施,而主機端/裝置端檢查步驟也可使用不同的比較目標。舉例來說,主機52可使用圖5B中的實施例,檢查新程序碼中是否有特定字串以實施主機端檢查步驟,而控制電路56則能利用圖5A中的實施例,以固件識別碼來為依據來進行裝置端檢查步驟,判斷新程序碼是否合用。當然,在此情況下,適用的固件程序碼中不但要有固件識別碼以支援圖5A中實施例的實施,還要有特定字串以支援圖5B中實施例的實施。正由於本發明主機端/裝置端檢查步驟檢查的依據是由固件研發廠商所預設的,故可提供一準確的比較目標,確實地檢查出不適用的固件程序碼。相較之下,圖2中的公知流程100雖會根據固件更新用的新程序碼,利用檢查碼產生演算法算出一檢查碼,但由於公知流程根本無從得知適用固件程序碼對應的檢查碼,故無法利用檢查碼檢查出不適用的新程序碼。
雖然本發明示於圖4的流程200在主機、裝置端分別進行了主機端、裝置端檢查步驟,但本發明也可只由主機52進行主機端檢查步驟,或是只以外圍裝置54中的控制電路56進行裝置端檢查步驟。當進行主機端檢查步驟時,也不一定要如圖4般在裝置狀態檢查前才進行主機端檢查步驟,也可以在應用程式74一載入新程序碼後馬上進行主機端檢查步驟。大致來說,只要在主機52將新程序式76傳輸至外圍裝置54前進行主機端檢查步驟,即可防止不適用的固件程序碼被傳輸至外圍裝置54,進一步防止不適用的固件程序碼被誤植入外圍裝置中。另一方面,在外圍裝置54中進行裝置端檢查步驟,則可發揮最終把關的目的。如前所述,除了使用者誤用新程序碼外,也可能會有惡意的破壞者會故意以不適用的新程序碼,意圖癱瘓外圍裝置54的操作。在實施本發明後,即使不適用的新程序碼被傳輸至外圍裝置54,在外圍裝置54中進行的裝置端檢查步驟,還是能阻擋不適用的新程序碼取代既有的固件程序碼。至於本發明中,用來進行裝置端檢查步驟的檢查模塊56B(見圖3)可以是實際的硬體電路,或是由控制電路56本身執行(既有)固件程序碼來實現檢查模塊56B的功能,進行裝置端檢查步驟。另外,如前所述,有許多獨立操作的裝置,如手機、數位相機,也都是由控制電路執行固件程序碼而操作的。這些裝置平常雖獨立操作,但要進行固件更新時,多半還是要配合一主機(如以USB連接線連接至個人計算機)才能取得固件更新所用的新程序碼,進行固件更新。而本發明當然也可應用於這種情況,保護這些獨立操作的裝置不會在固件更新的過程中被植入不適用的固件程序碼;尤其是在裝置中由裝置本身自行進行的裝置端檢查步驟,可主動確保裝置本身不會被誤植入不適用的固件程序碼。
在公知的固件更新流程中,無法針對固件更新所用的新程序碼進行內容的檢查,故也無法在固件更新的流程中避免不適用的新程序碼被錯誤地植入至外圍裝置中。相較之下,本發明在固件更新的流程中加入了主機/裝置端檢查步驟,能依據新程序碼的內容判斷新程序碼是否適用,避免不適用的新程序碼被誤植入外圍裝置中。另外,本發明也有助於不同外圍裝置間固件更新流程的整合。由於本發明可用主機/裝置端檢查步驟確認固件更新用的新程序碼是否適用,就可以在主機端使用單一固件更新的應用程式做為不同外圍裝置固件更新的接口。在主機進行裝置識別時,就可識別出要進行固件更新的外圍裝置的類別,並由應用程式選擇對應該外圍裝置的主機端檢查步驟,確認使用者取得的新程序碼是適用的固件程序碼;而不同的外圍裝置已各自內建對應的裝置端檢查步驟實施方式,可進一步確認主機傳來的新程序碼為適用的程序碼。這樣一來,就能使不同外圍裝置間固件更新的流程得以整合,即使使用同一固件更新的應用程式,還是可管理多種外圍裝置的固件更新,讓使用者進行固件更新時更為簡易、方便。
以上所述僅為本發明的較佳實施例,凡依本發明權利要求書所做的等效變化與修改,皆應屬本發明的涵蓋範圍。
權利要求
1.一種於一電子系統中更新程序碼的方法,其中該電子系統包含有一主機以及一外圍裝置;該外圍裝置包含有一控制電路,用來執行一第一程序碼,以根據該主機傳來的控制指令控制該外圍裝置的操作;而該方法包含有取得一第二程序碼;以及在以該第二程序碼取代該外圍裝置的第一程序碼之前,進行一主機端檢查步驟,以利用該主機檢查該第二程序碼的部分內容是否符合一預設內容。
2.如權利要求1的方法,其中該外圍裝置另包含有一存儲存儲器,用來以非易失性的方式存儲該第一程序碼;而當要以該第二程序碼取代該第一程序碼時,將該第一程序碼由該存儲存儲器擦除,並將該第二程序碼寫入至該存儲存儲器中。
3.如權利要求1的方法,其中當在以一第二程序碼取代該第一程序碼之前而進行該主機端檢查步驟時,在該控制電路執行該第二程序碼以控制該外圍裝置的操作前,進行該主機端檢查步驟。
4.如權利要求1的方法,其中該預設內容是該第一程序碼的部分內容,或是記錄於該第一程序碼中的一常數;而當進行該主機端檢查步驟時,檢查該第二程序碼中是否具有該第一程序碼的部分內容,或檢查該第二程序碼中記錄的常數的值是否相當於該第一程序碼中該常數的值,或檢查該第二程序碼中記錄的常數的值是否在該第一程序碼中該常數的值的預設範圍內。
5.如權利要求1的方法,其中該預設內容是為固定的內容,使得當該第二程序碼改變時,該預設內容亦不會改變。
6.如權利要求1的方法,其中當進行該主機端檢查步驟時,由該主機讀取該第二程序碼中位於預設地址的部分內容,以檢查該部分內容是否符合該預設內容,或搜尋該第二程序碼中是否存在該預設內容。
7.如權利要求1的方法,其另包含有在進行該主機端檢查步驟後,若該第二程序碼的部分內容不符合該預設內容,則停止以該第二程序碼取代該第一程序碼。
8.如權利要求1的方法,其另包含有在進行該主機端檢查步驟後,若該第二程序碼的部分內容符合該預設內容,則以該第二程序碼取代該第一程序碼,使該控制電路得以執行該第二程序碼以控制該外圍裝置的操作。
9.一種於一電子系統中更新程序碼的方法,其中該電子系統包含有一主機以及一外圍裝置;該外圍裝置包含有一控制電路,用來執行一第一程序碼,以控制該外圍裝置的操作;而該方法包含有將一第二程序碼由該主機傳輸至該外圍裝置;以及在以該第二程序碼取代該第一程序碼之前,進行一裝置端檢查步驟,以利用該控制電路檢查該第二程序碼的部分內容是否符合一預設內容。
10.如權利要求9的方法,其中該外圍裝置另包含有一非易失性的存儲存儲器,用來以非易失性的方式存儲該第一程序碼;而當要以該第二程序碼取代該第一程序碼時,將該第一程序碼由該存儲存儲器擦除,並將該第二程序碼寫入至該存儲存儲器中。
11.如權利要求9的方法,其中當在以一第二程序碼取代該第一程序碼之前而進行該裝置端檢查步驟時,在該控制電路執行該第二程序碼以控制該外圍裝置的操作前,進行該裝置端檢查步驟。
12.如權利要求9的方法,其中該預設內容是該第一程序碼的部分內容,或是記錄於該第一程序碼中的一常數;而當進行該裝置端檢查步驟時,檢查該第二程序碼中是否具有該第一程序碼的部分內容,或檢查該第二程序碼中記錄的常數的值是否相當於該第一程序碼中該常數的值,或檢查該第二程序碼中記錄的常數的值是否在該第一程序碼中該常數的值的預設範圍內。
13.如權利要求9的方法,其中該預設內容是為固定的內容,使得當該第二程序碼改變時,該預設內容亦不會改變。
14.如權利要求9的方法,其中當進行該裝置端檢查步驟時,由該控制電路讀取該第二程序碼中位於預設地址的部分內容,以檢查該部分內容是否符合一預設內容,或搜尋該第二程序碼中是否存在該此預設內容。
15.如權利要求9的方法,其另包含有在進行該裝置端檢查步驟後,若該第二程序碼的部分內容不符合該預設內容,則停止以該第二程序碼取代該第一程序碼。
16.如權利要求9的方法,其另包含有在進行該裝置端檢查步驟後,若該第二程序碼的部分內容符合該預設內容,則以該第二程序碼取代該第一程序碼,使該控制電路得以執行該第二程序碼以控制該外圍裝置的操作。
17.如權利要求9的方法,其中該外圍裝置另包含有一緩衝存儲器,用來以易失性的方式存儲數據;而當進行該裝置端檢查步驟時,該控制電路是將該第二程序碼暫存於該緩衝存儲器中,以讀取該第二程序碼的部分內容而進行該裝置端檢查步驟。
18.如權利要求17的方法,其中該外圍裝置另包含有一非易失性的存儲存儲器,用來以非易失性的方式存儲該第一程序碼;而當要以該第二程序碼取代該第一程序碼前而進行該裝置端檢查步驟時,在該第一程序碼尚未被擦除而該第二程序碼尚未被寫入至該存儲存儲器前,進行該裝置端檢查步驟。
19.如權利要求9的方法,其中該外圍裝置為一光碟機。
20.一外圍裝置,其包含有一控制電路,用來執行一第一程序碼,以控制該外圍裝置的操作;而該控制電路中設有一檢查模塊,該檢查模塊可在該控制電路以一第二程序碼取代該第一程序碼之前,檢查該第二程序碼的部分內容是否符合一預設內容。
21.如權利要求20的外圍裝置,其另包含有一非易失性的存儲存儲器,用來以非易失性的方式存儲該第一程序碼;而當該控制電路以該第二程序碼取代該第一程序碼時,將該第一程序碼由該存儲存儲器擦除,並將該第二程序碼寫入至該存儲存儲器中。
22.如權利要求20的外圍裝置,其中當該控制電路以一第二程序碼取代該第一程序碼之前而由該檢查模塊進行檢查時,在該控制電路執行該第二程序碼以控制該外圍裝置的操作前,由該檢查模塊進行檢查。
23.如權利要求20的外圍裝置,其中該預設內容是該第一程序碼的部分內容,或是記錄於該第一程序碼中的一常數;而當該檢查模塊進行檢查時,檢查該第二程序碼中是否具有該第一程序碼的部分內容,或檢查該第二程序碼中記錄的常數的值是否相當於該第一程序碼中該常數的值,或檢查該第二程序碼中記錄的常數的值是否在該第一程序碼中該常數的值的預設範圍內。
24.如權利要求20的外圍裝置,其中該預設內容不會隨該第二程序碼改變而改變。
25.如權利要求20的外圍裝置,其中當該檢查模塊進行檢查時,由該控制電路讀取該第二程序碼中位於預設地址的部分內容,以便由該檢查模塊檢查該部分內容是否符合一預設內容,或搜尋該第二程序碼中是否存在該此預設內容。
26.如權利要求20的外圍裝置,其中若該檢查模塊檢查出該第二程序碼的部分內容不符合該預設內容,則該控制電路會停止以該第二程序碼取代該第一程序碼。
27.如權利要求20的外圍裝置,其中若該檢查模塊檢查出該第二程序碼的部分內容符合該預設內容,則該控制電路會以該第二程序碼取代該第一程序碼,使該控制電路得以執行該第二程序碼以控制該外圍裝置的操作。
28.如權利要求20的外圍裝置,其另包含有一緩衝存儲器,用來以易失性的方式存儲數據;而該控制電路是將該第二程序碼暫存於該緩衝存儲器中,並在讀取該第二程序碼的部分內容後由該檢查模塊進行檢查。
29.如權利要求28的外圍裝置,其是使用於一電子系統,該電子系統中另設有一主機,而該第二程序碼是由該主機傳輸至該外圍裝置。
30.如權利要求28的外圍裝置,其另包含有一非易失性的存儲存儲器,用來以非易失性的方式存儲該第一程序碼;而當該控制電路要以該第二程序碼取代該第一程序碼前而由該檢查模塊進行檢查時,在該第一程序碼尚未被擦除而該第二程序碼尚未被寫入至該存儲存儲器前,由該檢查模塊進行檢查。
31.一種於一電子系統中更新程序碼的方法,其中該電子系統包含有一主機以及一外圍裝置;該外圍裝置包含有一控制電路,用來執行一第一程序碼,以根據該主機傳來的控制指令控制該外圍裝置的操作;而該方法包含有取得一第二程序碼;以及在以該第二程序碼取代該外圍裝置的第一程序碼之前,進行一檢查步驟,以根據該第二程序碼的內容求出一對應的內容特性,並檢查該內容特性是否符合一預設特性;而該預設特性不會隨該第二程序碼的內容改變而改變。
32.如權利要求31的方法,其中該檢查步驟是由該主機來進行。
33.如權利要求31的方法,其中該檢查步驟是由該控制電路來進行。
34.如權利要求31的方法,其中該內容特性是一預設內容於該第二程序碼中所在的地址,而該預設特性是一預設地址;而當進行該檢查步驟時,檢查該第二程序碼中該預設內容所在的地址是否符合該預設地址。
全文摘要
本發明是提供一種於一電子系統中更新固件的方法及相關裝置。該電子系統中有一主機及一外圍裝置,該外圍裝置中設有一控制電路及一閃速存儲器,該控制電路是執行一記錄於該閃速存儲器中的第一程序碼以接收該主機的控制指令而控制該外圍裝置的操作。而該方法是在以一第二程序碼取代/更新該第一程序碼之前,進行一檢查步驟以檢查該第二程序碼的內容是否符合一預設的內容,以判斷該第二程序碼的相容性。該檢查步驟可由該主機或/及該控制電路進行,該檢查步驟可檢查該第二程序碼中記錄的部分常數值、字串是否符合預設值,或/且檢查該第二程序碼中位於預設地址的指令、數據是否符合預設的指令、數據,以判斷該第二程序碼的相容性。
文檔編號G06F11/08GK1523501SQ0310610
公開日2004年8月25日 申請日期2003年2月18日 優先權日2003年2月18日
發明者劉敦行, 吳元丁 申請人:聯發科技股份有限公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀