TWI796178B - 電子裝置及程式碼修補方法 - Google Patents

電子裝置及程式碼修補方法 Download PDF

Info

Publication number
TWI796178B
TWI796178B TW111110949A TW111110949A TWI796178B TW I796178 B TWI796178 B TW I796178B TW 111110949 A TW111110949 A TW 111110949A TW 111110949 A TW111110949 A TW 111110949A TW I796178 B TWI796178 B TW I796178B
Authority
TW
Taiwan
Prior art keywords
code
program
memory
checkpoint
read
Prior art date
Application number
TW111110949A
Other languages
English (en)
Other versions
TW202331514A (zh
Inventor
亞歷山大 內米洛夫斯基
李建志
和 朱
Original Assignee
新加坡商瑞昱新加坡有限公司
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 新加坡商瑞昱新加坡有限公司 filed Critical 新加坡商瑞昱新加坡有限公司
Application granted granted Critical
Publication of TWI796178B publication Critical patent/TWI796178B/zh
Publication of TW202331514A publication Critical patent/TW202331514A/zh

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4403Processor initialisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/66Updates of program code stored in read-only memory [ROM]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0736Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in functional embedded systems, i.e. in a data processing system designed as a combination of hardware and software dedicated to performing a certain function
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4406Loading of operating system
    • G06F9/4408Boot device selection

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)
  • Communication Control (AREA)

Abstract

本發明提出一種電子裝置及程式碼修補方法。電子裝置包括處理器、主唯讀記憶體及增補唯讀記憶體。主唯讀記憶體儲存一啟動程式碼,啟動程式碼包括至少一檢查點程式段。增補唯讀記憶體儲存至少一修補程式碼。處理器執行啟動程式碼並於執行到檢查點程式段時,查詢增補唯讀記憶體中是否存在相對應的修補程式碼,若是,則執行對應之修補程式碼。

Description

電子裝置及程式碼修補方法
本發明是有關於電子裝置,特別是指一種電子裝置及程式碼修補方法。
目前系統單晶片在開機上電後會先執行啟動程序,以初始化硬體設備、建立記憶體空間的對映圖,以將系統的軟硬體環境設置成適當狀態,以利後續呼叫作業系統核心。基於安全考量,啟動程序之程式碼被儲存於唯讀記憶體中,以避免程式碼遭到竄改。然而,當系統單晶片生產之後,若發現儲存於唯讀記憶體中啟動程式碼中有錯誤、漏洞(BUG),便能重新生產新版本的系統單晶片,消耗大量時間與金錢等資源。
本發明一實施例提出一種電子裝置,包括:處理器、主唯讀記憶體及增補唯讀記憶體。主唯讀記憶體儲存一啟動程式碼,啟動程式碼包括至少一檢查點程式段。增補唯讀記憶體儲存至少一修補程式碼。處理器耦接主唯讀記憶體及增補唯讀記憶體,配置為執行主唯讀記憶體的啟動程式碼以執行電子裝置之啟動程序,並在該啟動程序中於處理器執行到檢查點程式段時,查詢增補唯讀記憶體中是否存在與所執行到的檢查點程式段相對應的修補程式碼,於與該檢查點程式段相對應的該修補程式碼存在於該增補唯讀記憶體時,執行對應之修補程式碼。
本發明一實施例提出一種程式碼修補方法,由一電子裝置的一處理器執行。程式碼修補方法包括:讀取並載入儲存於主唯讀記憶體的啟動程式碼以執行電子裝置之啟動程序,其中啟動程式碼包括至少一檢查點程式段;在該啟動程序中於處理器執行到檢查點程式段時,查詢增補唯讀記憶體中是否存在與所執行到的檢查點程式段相對應的修補程式碼;及於與所執行到的該檢查點程式段相對應的該修補程式碼存在於該增補唯讀記憶體中時,執行該增補唯讀記憶體中對應之修補程式碼。
根據本發明一些實施例之電子裝置及程式碼修補方法,可對儲存於主唯讀記憶體的啟動程式碼進行修補,特別是可修補硬體初始化程式段之前的程式碼段。
參照圖1,係為本發明一實施例之電子裝置之示意圖。電子裝置可為系統單晶片(system on chip,SOC)或包括此系統單晶片的電子裝置。電子裝置包括處理器10、主唯讀記憶體20、增補唯讀記憶體(supplementary ROM)30及匯流排40。處理器10經由匯流排40耦接主唯讀記憶體20與增補唯讀記憶體30。主唯讀記憶體20儲存一啟動程式碼(boot code)。啟動程式碼包括至少一檢查點程式段。增補唯讀記憶體30供儲存至少一修補程式碼。也就是說,程式編寫者預先在啟動程式碼中的一個或多個位置放入檢查點程式段。當程式編寫者發現啟動程式碼中的某一段程式有需要進行修正時,程式編寫者可編寫修補程式碼並儲存於增補唯讀記憶體30中。該修補程式碼係用以修正該啟動程式碼中的部份程式。換言之,該增補唯讀記憶體30與該啟動程式碼被設置成共同配合以可執行後續被儲存入增補唯讀記憶體30的修補程式碼。也就是說,當該電子裝置被設計完成時,該增補唯讀記憶體30尚未儲存有該修補程式碼,但該啟動程式碼已包括有檢查點程式段以查詢修補程式碼是否存在於增補唯讀記憶體30。
在一些實施例中,主唯讀記憶體20為唯讀記憶體(ROM)。
在一些實施例中,增補唯讀記憶體30為單次可程式(one time programmable)唯讀記憶體。
在一些實施例中,處理器10、主唯讀記憶體20及增補唯讀記憶體30位於一系統單晶片(System On Chip, SOC)中。
參照圖2,係為本發明一實施例之程式碼修補方法流程圖,由處理器10執行。首先,處理器10讀取並載入儲存於主唯讀記憶體20的啟動程式碼以執行電子裝置之啟動程序(步驟S410)。在步驟S420中,在啟動程序中於處理器10執行到檢查點程式段時,處理器10查詢增補唯讀記憶體30中是否存在與所執行到的檢查點程式段相對應的修補程式碼。若是(即於與檢查點程式段相對應的修補程式碼存在於增補唯讀記憶體30時),則執行增補唯讀記憶體30中的對應之修補程式碼(步驟S430),執行完修補程式碼之後,將返回繼續執行啟動程式碼;若否,則繼續步驟S430,執行此檢查點程式段之後的啟動程式碼段。藉此,可對於儲存在主唯讀記憶體20中的啟動程式碼裡面的錯誤碼段進行修補(即錯誤碼段會被跳過而不執行)。
參照圖3,係為本發明一實施例之程式碼示意圖。在此,示例主唯讀記憶體20中儲存的啟動程式碼,呈現主唯讀記憶體20的儲存位址21上的程式碼段22。處理器10會從起始位址(於此為0000000)開始執行啟動程式碼,依序往下執行。當執行到第一個檢查點程式段(checkpoint(ID1))時,將查詢增補唯讀記憶體30是否存在對應的修補程式碼。具體來說,增補唯讀記憶體30包括第一儲存區域31及一第二儲存區域32。第一儲存區域31儲存有查找表,第二儲存區域32儲存修補程式碼。查找表包括至少一第一識別符及相對應之至少一第一位址。於此,係示例為「ID1」的第一識別符及為「位址B」的第一位址。而前述第一個檢查點程式段指示有第二識別符(於此為ID1)。因此,處理器10於查找表中查詢到與第二識別符相對應的第一識別符(於此均為ID1),則獲得與此第一識別符相對應的第一位址(即位址B)。接著,處理器10至增補唯讀記憶體30的該第一位址(即位址B)執行對應的修補程式碼(於此為取出堆疊的資料為例)。此第一位址係位於第二儲存區域32。修補程式碼包括主唯讀記憶體20的一返回位址(於此為 00000018)並將程式計數器(program counter)設置為此返回位址,使得處理器10至主唯讀記憶體20的返回位址之後繼續執行啟動程式碼。從而,可跳過啟動程式碼中具有錯誤的程式碼段,至指定的返回位址繼續執行。例如,在此是跳過位址00000010與位址00000014的程式碼段。也就是說,依據至少一檢查點程式段與修補程式碼,啟動程式碼中的部分程式碼被跳過而不被處理器10執行。然而,本發明不以跳過部分程式碼段為必要,在執行修補程式碼之後,也可以返回至方才執行的檢查點程式段的下一位址,接續執行其後的啟動程式碼。
在此,前述checkpoint函式之程式碼示例如下,用以確認增補唯讀記憶體30中是否存有對應第二識別符的位址(變數addr),若有則取得並跳至對應該第二識別符的位址執行。 type status checkpoint(arg ID) { address_type add; addr=search_supplementory_rom(ID); if(add!=NULL) jump(addr); return(OK); else return(NOT_FOUND); }
前列search_supplementory_rom函式示例如下,用以在增補唯讀記憶體30中存放查找表的第一儲存區域31中尋找是否有與第二識別符(變數ID)相對應的第一識別符(變數id_supplement)。若有,則返回對應此第一識別符的第一位址(變數addr)。 int search_supplementory_rom(arg ID) { unit_32 id_supplement, addr=NULL; for(i=0; i<maxmun_checkpoint’i++) { get_id(id_supplement); if(ID== id_supplement) { addr=get_offset(id_supplement); return addr; } } }
參照圖4,係為本發明一實施例之啟動程序流程圖。啟動程序主要分為兩個階段,第一階段S1包括步驟S110~步驟S140,第二階段S2包括步驟S210~步驟S240。其中,第一階段S1是以組合語言實現,第二階段S2是以C語言實現。步驟S110係設置系統暫存器及記憶體環境。步驟S120係設置BSS段(Block Started by Symbol segment)清除為零。步驟S130係設置堆疊。步驟S140係跳至C語言環境而進入第二階段S2。步驟S210係初始化系統計時器時脈。步驟S220係進行早期平台驅動(early platform driver)初始化。步驟S230係初始化驅動程式,例如通用非同步收發傳輸器(UART)、中斷控制器、看門狗、快閃記憶體、嵌入式多媒體卡(eMMC)等。步驟S240係執行其他代碼。於此要特別說明的是,倘若是以中斷的方式來觸發執行位於增補唯讀記憶體30中的修補程式碼,則需要等待在步驟S230中對中斷控制器初始化完成之後才能進行。換言之,如此將僅能對於中斷控制器初始化完成之後的程式碼段進行修補,無法對中斷控制器初始化之前的程式碼段進行修補。然而,本發明並非採用中斷方式,可在步驟S210及其後的步驟進行程式碼修補。也就是說,檢查點程式段可以設置在對應於步驟S230(硬體初始化步驟)之硬體初始化程式段之前,而在進行硬體初始化步驟之前執行對應該檢查點程式段的修補程式碼。在一些實施例中,檢查點程式段可設置於在硬體初始化程式段中的中斷初始化程式段之前。然而本發明並非限定檢查點程式段需設置在硬體初始化程式段之前,也可以在硬體初始化程式段之後,視實際需求而定。
綜上所述,依據本發明一些實施例之電子裝置及程式碼修補方法,可對儲存於主唯讀記憶體20的啟動程式碼進行修補,特別是可修補硬體初始化程式段之前的程式碼段。
10:處理器 20:主唯讀記憶體 21:儲存位址 22:程式碼段 30:增補唯讀記憶體 31:第一儲存區域 32:第二儲存區域 40:匯流排 S1:第一階段 S2:第二階段 S110~S140:步驟 S210~S240:步驟 S410~S430:步驟
[圖1]係為本發明一實施例之電子裝置之示意圖。 [圖2]係為本發明一實施例之程式碼修補方法流程圖。 [圖3]係為本發明一實施例之程式碼示意圖。 [圖4]係為本發明一實施例之啟動程序流程圖。
S410~S430:步驟

Claims (14)

  1. 一種電子裝置,包括: 一主唯讀記憶體,儲存一啟動程式碼,該啟動程式碼包括至少一檢查點程式段; 一增補唯讀記憶體;及 一處理器,耦接該主唯讀記憶體及該增補唯讀記憶體,配置為執行該主唯讀記憶體的該啟動程式碼以執行該電子裝置之一啟動程序,並在該啟動程序中於該處理器執行到該至少一檢查點程式段時,查詢該增補唯讀記憶體中是否存在與所執行到的該檢查點程式段相對應的一修補程式碼,於與該檢查點程式段相對應的該修補程式碼存在於該增補唯讀記憶體時,執行對應之該修補程式碼。
  2. 如請求項1所述之電子裝置,其中該增補唯讀記憶體儲存一查找表,該查找表包括至少一第一識別符及相對應之至少一第一位址,每一該檢查點程式段指示有一第二識別符,該處理器查詢該查找表中是否有與該第二識別符相對應的該第一識別符,若有,則從該增補唯讀記憶體的與所查詢到的該第一識別符相對應的該第一位址執行該修補程式碼。
  3. 如請求項2所述之電子裝置,其中該增補唯讀記憶體區分成一第一儲存區域及一第二儲存區域,其中該查找表儲存於該第一儲存區域,該至少一修補程式碼儲存於該第二儲存區域。
  4. 如請求項1、或2所述之電子裝置,其中該啟動程式碼還包括由該處理器執行的一硬體初始化程式段,其中由該處理器執行的至少一個該檢查點程式段在該硬體初始化程式段之前。
  5. 如請求項4所述之電子裝置,其中該硬體初始化程式段包括一中斷初始化程式段。
  6. 如請求項1、或2所述之電子裝置,其中該主唯讀記憶體、該增補唯讀記憶體及該處理器位於一系統單晶片中。
  7. 如請求項1、或2所述之電子裝置,其中依據該至少一檢查點程式段與該修補程式碼,該啟動程式碼中的部分程式碼被跳過而不被該處理器執行。
  8. 一種程式碼修補方法,由一電子裝置的一處理器執行,該程式碼修補方法包括: 讀取並載入儲存於一主唯讀記憶體的一啟動程式碼以執行該電子裝置之一啟動程序,其中該啟動程式碼包括至少一檢查點程式段; 在該啟動程序中於該處理器執行到該至少一檢查點程式段時,查詢一增補唯讀記憶體中是否存在與所執行到的該檢查點程式段相對應的一修補程式碼;及 於與所執行到的該檢查點程式段相對應的該修補程式碼存在於該增補唯讀記憶體中時,執行該增補唯讀記憶體中對應之該修補程式碼。
  9. 如請求項8所述之程式碼修補方法,其中該增補唯讀記憶體儲存有一查找表,該查找表包括至少一第一識別符及相對應之至少一第一位址,每一該檢查點程式段指示有一第二識別符,其中查詢該增補唯讀記憶體中是否存在與所執行到的該檢查點程式段相對應的該修補程式碼是查詢該查找表中是否有與該第二識別符相對應的該第一識別符,若有,則從該增補唯讀記憶體的與所查詢到的該第一識別符相對應的該第一位址執行該修補程式碼。
  10. 如請求項9所述之程式碼修補方法,其中該增補唯讀記憶體區分一第一儲存區域及一第二儲存區域,其中該查找表儲存於該第一儲存區域,該至少一修補程式碼儲存於該第二儲存區域。
  11. 如請求項8、或9所述之程式碼修補方法,其中該修補程式碼包括該主唯讀記憶體的一返回位址,該程式碼修補方法更包括: 在執行該修補程式碼之後,從該主唯讀記憶體的該返回位址之後繼續執行該啟動程式碼。
  12. 如請求項8、或9所述之程式碼修補方法,其中該啟動程式碼更包括一硬體初始化程式段,該程式碼修補方法更包括: 該處理器執行該硬體初始化程式段,其中該處理器執行的該至少一檢查點程式段是在該處理器執行的該硬體初始化程式段之前。
  13. 如請求項12所述之程式碼修補方法,其中該硬體初始化程式段包括一中斷初始化程式段。
  14. 如請求項8、或9所述之程式碼修補方法,還包括有: 依據欲修正該啟動程式碼中的部份程式以編寫產生該修補程式碼;以及 將該修補程式碼儲存至該增補唯讀記憶體,其中,該修補程式碼係用以修正該啟動程式碼中的該部份程式。
TW111110949A 2022-01-27 2022-03-23 電子裝置及程式碼修補方法 TWI796178B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/585,748 2022-01-27
US17/585,748 US11775284B2 (en) 2022-01-27 2022-01-27 Electronic device and code patching method

Publications (2)

Publication Number Publication Date
TWI796178B true TWI796178B (zh) 2023-03-11
TW202331514A TW202331514A (zh) 2023-08-01

Family

ID=86692366

Family Applications (1)

Application Number Title Priority Date Filing Date
TW111110949A TWI796178B (zh) 2022-01-27 2022-03-23 電子裝置及程式碼修補方法

Country Status (3)

Country Link
US (1) US11775284B2 (zh)
CN (1) CN116560883A (zh)
TW (1) TWI796178B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW200741542A (en) * 2005-09-22 2007-11-01 Mocana Corp Embedded patch management
US20140244991A1 (en) * 2013-02-22 2014-08-28 Marvell World Trade Ltd. Patching Boot Code of Read-Only Memory
US20170371803A1 (en) * 2014-12-23 2017-12-28 Krystof C. Zmudzinski Method and apparatus to allow secure guest access to extended page tables

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6260157B1 (en) * 1999-02-16 2001-07-10 Kurt Schurecht Patching of a read only memory
US6892297B1 (en) * 2000-03-16 2005-05-10 International Business Machines Corporation Method and system for searching an updated version of boot code for updating current running boot code prior to loading an operating system
US9959125B2 (en) * 2015-08-05 2018-05-01 Samsung Electronics Co., Ltd. Field update of boot loader using regular device firmware update procedure
US11328066B2 (en) * 2020-04-08 2022-05-10 Nxp Usa, Inc. Method and system for securely patching read-only-memory code

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW200741542A (en) * 2005-09-22 2007-11-01 Mocana Corp Embedded patch management
US20140244991A1 (en) * 2013-02-22 2014-08-28 Marvell World Trade Ltd. Patching Boot Code of Read-Only Memory
US20170371803A1 (en) * 2014-12-23 2017-12-28 Krystof C. Zmudzinski Method and apparatus to allow secure guest access to extended page tables

Also Published As

Publication number Publication date
CN116560883A (zh) 2023-08-08
US11775284B2 (en) 2023-10-03
TW202331514A (zh) 2023-08-01
US20230236827A1 (en) 2023-07-27

Similar Documents

Publication Publication Date Title
US8751783B2 (en) Booting computing devices with EFI aware operating systems
US6725178B2 (en) Use of hidden partitions in a storage device for storing BIOS extension files
TWI269229B (en) Method, device and system for supporting safe updates and multiple processor types
US20040255106A1 (en) Recovery of operating system configuration data by firmware of computer system
KR20030015198A (ko) 모듈식 바이오스 갱신 메커니즘
US20100125752A1 (en) System for auto-operating backup firmware and method thereof
WO2005073850A1 (ja) 半導体装置及びその起動処理方法
WO2015154538A1 (zh) 存储器的启动方法及装置
CN113110891B (zh) 固态硬盘的固件加载方法、装置、计算机设备及存储介质
US20050033954A1 (en) Computer system having BIOS with multiple memory block
CN113821235A (zh) 操作系统数据更新方法、设备、存储介质及程序产品
US9348603B2 (en) Electronic apparatus and booting method
US10642623B1 (en) Preserving firmware settings during firmware updates
US8463951B1 (en) Unified driver architecture device identifier strategy
CN110297726B (zh) 具有串行存在检测数据的计算机系统及内存模块控制方法
JP2001331327A (ja) 電子機器
KR102598510B1 (ko) 소프트웨어의 무결성 검증 방법 및 그 장치
US20130080751A1 (en) Method and device for updating bios program for computer system
TWI796178B (zh) 電子裝置及程式碼修補方法
CN103455750A (zh) 一种嵌入式设备的高安验证方法及装置
US7490321B2 (en) Method for updating firmware via determining program code
WO2021012170A1 (zh) 固件启动方法、设备及计算机可读存储介质
US20190146804A1 (en) Method for synchronization of system management data
US20080052682A1 (en) Debug device and debug processing method
US20100146332A1 (en) Data correction circuit and semiconductor integrated circuit