閃存中的底層操作系統更新策略
發布時間:2008/9/1 0:00:00 訪問次數:429
將底層操作系統放于閃存中有很多好處,例如設計人員可以隨時在現場將軟件新版本下載到閃存中對其進行更新,但在下載過程中有一些因素需要注意,否則會造成系統崩潰的災難性后果。本文介紹一種便利的軟件結構,它可以幫助工程師避免犯一些常見的錯誤。
所有現場更新底層操作系統的方法都存在這樣一個問題,即假如升級內容中存在缺陷,那么目標系統可能需要花很大力氣才能更正,許多缺陷很簡單且顯而易見,但有些隱藏很深的缺陷只有在產品完成以后才能顯現出來。
用戶發現和處理缺陷的能力各有千秋,而更糟糕的是,他們往往不注意諸如“如果在編程過程中電源系統中斷系統將受到損壞”一類的警告,在系統更新過程中,他們很愿意重新啟動其它功能系統,然后再把“出了問題”的產品拿去維修。
所有設計完好的底層操作系統更新過程,都要能夠盡可能從用戶的錯誤和其它災難性事件中恢復,做到這一點最好的方法就是采取可靠的底層操作系統更新策略,以完全避免這些問題。本文將討論這樣一種策略,它可以直接使用,但是也可以根據實際應用的特性對它進行修正。
微編程器
微編程器是對嵌入式系統在底層操作系統更新過程之前、過程中及之后運行情況的一種系統級描述,這種對工作情形的描述有助于避免與其它底層操作系統下載方法有關的問題,小心對待這些過程可以消除很多其它的擔心。
采用微編程器的底層操作系統更新方法第一步是使嵌入式系統進入下載發生時所期望的狀態。過渡到這個狀態可以采用好幾種方式,例如,它可以通過用戶按下設備控制界面上的“升級”鍵來完成,或者在系統探測到文件傳輸開始或結束時進行,或者用其它方法。不管哪種情況,目標系統都會意識到底層操作系統馬上要更新了,于是讓其它控制過程進入安全和穩定的停止狀態。
下一步,目標系統會收到一個叫做微編程器的應用程序,微編程器將控制系統,并開始接收新的應用底層操作系統,將它寫到閃存中。一切完成后,目標系統就開始運行新的底層操作系統。
采用微編程器下載底層操作系統的最大特點之一是它的靈活性,微編程器的執行過程即使在底層操作系統開始更新前的最后一刻也可以更改,以便對系統進行錯誤糾正和改進。
微編程器不會消耗目標系統的資源,除非已開始進行編程。此外,由于微編程器很小,所以目標系統在更新過程開始時不需要龐大而復雜的通訊協議,只需簡單的文本文件傳輸就足夠了。
采用微編程器的底層操作系統更新其安全性一度是最引人注目的優點。當目標系統的閃存芯片只用于存儲底層操作系統時,系統將不會有對閃存芯片內容進行刪除和編程的代碼,除非實際過程中需要這樣。因此即使在程序失控的嚴重情況下,系統也不會意外地刪除它本身的底層操作系統。
然而,微編程器也有缺點,它通常作為一個獨立的程序執行,因此下載和傳輸到目標系統的代碼需要分開管理。處理程序組件時小心謹慎有助于減少后續工作量。
微編程器一般都載入ram中運行,這在某些微處理器結構中是不可能的,尤其是古老的8051系列,雖然其結構都是面向硬件的,但它的限制大過它所帶來的好處。
下載過程
程序1中的代碼顯示的是下載目標系統和運行微編程器所需要的功能。在這個例子中,目標系統從某個i/o通道(也許是串口)接收文本形式的摩托羅拉s record文件,將它譯碼并寫到ram中,然后在傳輸結束時目標系統跳轉到下載代碼啟動微編程器。
注意programmer_buf[]存儲空間是自動調整的,也就是說它在目標系統的存儲單元里沒有固定的位置,這意味著新記錄的地址是相對的而不是絕對的,新代碼的位置是獨立的。如果匯編程序不能產生位置獨立的代碼,那么programmer_buf[]就要在存儲器中分配一個固定的位置,新記錄的地址也要留在那個位置。
假如目標系統沒有資源可長期分配給programmer_buf[],則新來的微編程器內容可以放在其它數據的上面。此時,系統無論如何都要中斷其它操作,將ram大部分空間留給微編程器。
基本微編程器
微型編程器的頂級代碼如程序2所示,這個代碼也可以從某些地方接收s record文件并將其譯碼。微編程器將新接收到的數據記錄在閃存中,當文件傳輸完成后重新啟動系統。雖然過于簡單了些(用文本文件來傳輸大的程序也許不十分可靠),但這個代碼表示了微編程器的所有重要特征。
erase_flash()除了實際擦除閃存中的內容外,它還管理簡單的數據結構,繼續跟蹤哪一段閃存中的數據需要擦除,哪一段已經被擦除。s re
將底層操作系統放于閃存中有很多好處,例如設計人員可以隨時在現場將軟件新版本下載到閃存中對其進行更新,但在下載過程中有一些因素需要注意,否則會造成系統崩潰的災難性后果。本文介紹一種便利的軟件結構,它可以幫助工程師避免犯一些常見的錯誤。
所有現場更新底層操作系統的方法都存在這樣一個問題,即假如升級內容中存在缺陷,那么目標系統可能需要花很大力氣才能更正,許多缺陷很簡單且顯而易見,但有些隱藏很深的缺陷只有在產品完成以后才能顯現出來。
用戶發現和處理缺陷的能力各有千秋,而更糟糕的是,他們往往不注意諸如“如果在編程過程中電源系統中斷系統將受到損壞”一類的警告,在系統更新過程中,他們很愿意重新啟動其它功能系統,然后再把“出了問題”的產品拿去維修。
所有設計完好的底層操作系統更新過程,都要能夠盡可能從用戶的錯誤和其它災難性事件中恢復,做到這一點最好的方法就是采取可靠的底層操作系統更新策略,以完全避免這些問題。本文將討論這樣一種策略,它可以直接使用,但是也可以根據實際應用的特性對它進行修正。
微編程器
微編程器是對嵌入式系統在底層操作系統更新過程之前、過程中及之后運行情況的一種系統級描述,這種對工作情形的描述有助于避免與其它底層操作系統下載方法有關的問題,小心對待這些過程可以消除很多其它的擔心。
采用微編程器的底層操作系統更新方法第一步是使嵌入式系統進入下載發生時所期望的狀態。過渡到這個狀態可以采用好幾種方式,例如,它可以通過用戶按下設備控制界面上的“升級”鍵來完成,或者在系統探測到文件傳輸開始或結束時進行,或者用其它方法。不管哪種情況,目標系統都會意識到底層操作系統馬上要更新了,于是讓其它控制過程進入安全和穩定的停止狀態。
下一步,目標系統會收到一個叫做微編程器的應用程序,微編程器將控制系統,并開始接收新的應用底層操作系統,將它寫到閃存中。一切完成后,目標系統就開始運行新的底層操作系統。
采用微編程器下載底層操作系統的最大特點之一是它的靈活性,微編程器的執行過程即使在底層操作系統開始更新前的最后一刻也可以更改,以便對系統進行錯誤糾正和改進。
微編程器不會消耗目標系統的資源,除非已開始進行編程。此外,由于微編程器很小,所以目標系統在更新過程開始時不需要龐大而復雜的通訊協議,只需簡單的文本文件傳輸就足夠了。
采用微編程器的底層操作系統更新其安全性一度是最引人注目的優點。當目標系統的閃存芯片只用于存儲底層操作系統時,系統將不會有對閃存芯片內容進行刪除和編程的代碼,除非實際過程中需要這樣。因此即使在程序失控的嚴重情況下,系統也不會意外地刪除它本身的底層操作系統。
然而,微編程器也有缺點,它通常作為一個獨立的程序執行,因此下載和傳輸到目標系統的代碼需要分開管理。處理程序組件時小心謹慎有助于減少后續工作量。
微編程器一般都載入ram中運行,這在某些微處理器結構中是不可能的,尤其是古老的8051系列,雖然其結構都是面向硬件的,但它的限制大過它所帶來的好處。
下載過程
程序1中的代碼顯示的是下載目標系統和運行微編程器所需要的功能。在這個例子中,目標系統從某個i/o通道(也許是串口)接收文本形式的摩托羅拉s record文件,將它譯碼并寫到ram中,然后在傳輸結束時目標系統跳轉到下載代碼啟動微編程器。
注意programmer_buf[]存儲空間是自動調整的,也就是說它在目標系統的存儲單元里沒有固定的位置,這意味著新記錄的地址是相對的而不是絕對的,新代碼的位置是獨立的。如果匯編程序不能產生位置獨立的代碼,那么programmer_buf[]就要在存儲器中分配一個固定的位置,新記錄的地址也要留在那個位置。
假如目標系統沒有資源可長期分配給programmer_buf[],則新來的微編程器內容可以放在其它數據的上面。此時,系統無論如何都要中斷其它操作,將ram大部分空間留給微編程器。
基本微編程器
微型編程器的頂級代碼如程序2所示,這個代碼也可以從某些地方接收s record文件并將其譯碼。微編程器將新接收到的數據記錄在閃存中,當文件傳輸完成后重新啟動系統。雖然過于簡單了些(用文本文件來傳輸大的程序也許不十分可靠),但這個代碼表示了微編程器的所有重要特征。
erase_flash()除了實際擦除閃存中的內容外,它還管理簡單的數據結構,繼續跟蹤哪一段閃存中的數據需要擦除,哪一段已經被擦除。s re
上一篇:非易失性并行存儲器的應用
上一篇:大容量存儲器集成電路的測試