閃存中的底層操作系統(tǒng)更新策略
發(fā)布時(shí)間:2008/9/1 0:00:00 訪(fǎng)問(wèn)次數(shù):438
將底層操作系統(tǒng)放于閃存中有很多好處,例如設(shè)計(jì)人員可以隨時(shí)在現(xiàn)場(chǎng)將軟件新版本下載到閃存中對(duì)其進(jìn)行更新,但在下載過(guò)程中有一些因素需要注意,否則會(huì)造成系統(tǒng)崩潰的災(zāi)難性后果。本文介紹一種便利的軟件結(jié)構(gòu),它可以幫助工程師避免犯一些常見(jiàn)的錯(cuò)誤。
所有現(xiàn)場(chǎng)更新底層操作系統(tǒng)的方法都存在這樣一個(gè)問(wèn)題,即假如升級(jí)內(nèi)容中存在缺陷,那么目標(biāo)系統(tǒng)可能需要花很大力氣才能更正,許多缺陷很簡(jiǎn)單且顯而易見(jiàn),但有些隱藏很深的缺陷只有在產(chǎn)品完成以后才能顯現(xiàn)出來(lái)。
用戶(hù)發(fā)現(xiàn)和處理缺陷的能力各有千秋,而更糟糕的是,他們往往不注意諸如“如果在編程過(guò)程中電源系統(tǒng)中斷系統(tǒng)將受到損壞”一類(lèi)的警告,在系統(tǒng)更新過(guò)程中,他們很愿意重新啟動(dòng)其它功能系統(tǒng),然后再把“出了問(wèn)題”的產(chǎn)品拿去維修。
所有設(shè)計(jì)完好的底層操作系統(tǒng)更新過(guò)程,都要能夠盡可能從用戶(hù)的錯(cuò)誤和其它災(zāi)難性事件中恢復(fù),做到這一點(diǎn)最好的方法就是采取可靠的底層操作系統(tǒng)更新策略,以完全避免這些問(wèn)題。本文將討論這樣一種策略,它可以直接使用,但是也可以根據(jù)實(shí)際應(yīng)用的特性對(duì)它進(jìn)行修正。
微編程器
微編程器是對(duì)嵌入式系統(tǒng)在底層操作系統(tǒng)更新過(guò)程之前、過(guò)程中及之后運(yùn)行情況的一種系統(tǒng)級(jí)描述,這種對(duì)工作情形的描述有助于避免與其它底層操作系統(tǒng)下載方法有關(guān)的問(wèn)題,小心對(duì)待這些過(guò)程可以消除很多其它的擔(dān)心。
采用微編程器的底層操作系統(tǒng)更新方法第一步是使嵌入式系統(tǒng)進(jìn)入下載發(fā)生時(shí)所期望的狀態(tài)。過(guò)渡到這個(gè)狀態(tài)可以采用好幾種方式,例如,它可以通過(guò)用戶(hù)按下設(shè)備控制界面上的“升級(jí)”鍵來(lái)完成,或者在系統(tǒng)探測(cè)到文件傳輸開(kāi)始或結(jié)束時(shí)進(jìn)行,或者用其它方法。不管哪種情況,目標(biāo)系統(tǒng)都會(huì)意識(shí)到底層操作系統(tǒng)馬上要更新了,于是讓其它控制過(guò)程進(jìn)入安全和穩(wěn)定的停止?fàn)顟B(tài)。
下一步,目標(biāo)系統(tǒng)會(huì)收到一個(gè)叫做微編程器的應(yīng)用程序,微編程器將控制系統(tǒng),并開(kāi)始接收新的應(yīng)用底層操作系統(tǒng),將它寫(xiě)到閃存中。一切完成后,目標(biāo)系統(tǒng)就開(kāi)始運(yùn)行新的底層操作系統(tǒng)。
采用微編程器下載底層操作系統(tǒng)的最大特點(diǎn)之一是它的靈活性,微編程器的執(zhí)行過(guò)程即使在底層操作系統(tǒng)開(kāi)始更新前的最后一刻也可以更改,以便對(duì)系統(tǒng)進(jìn)行錯(cuò)誤糾正和改進(jìn)。
微編程器不會(huì)消耗目標(biāo)系統(tǒng)的資源,除非已開(kāi)始進(jìn)行編程。此外,由于微編程器很小,所以目標(biāo)系統(tǒng)在更新過(guò)程開(kāi)始時(shí)不需要龐大而復(fù)雜的通訊協(xié)議,只需簡(jiǎn)單的文本文件傳輸就足夠了。
采用微編程器的底層操作系統(tǒng)更新其安全性一度是最引人注目的優(yōu)點(diǎn)。當(dāng)目標(biāo)系統(tǒng)的閃存芯片只用于存儲(chǔ)底層操作系統(tǒng)時(shí),系統(tǒng)將不會(huì)有對(duì)閃存芯片內(nèi)容進(jìn)行刪除和編程的代碼,除非實(shí)際過(guò)程中需要這樣。因此即使在程序失控的嚴(yán)重情況下,系統(tǒng)也不會(huì)意外地刪除它本身的底層操作系統(tǒng)。
然而,微編程器也有缺點(diǎn),它通常作為一個(gè)獨(dú)立的程序執(zhí)行,因此下載和傳輸?shù)侥繕?biāo)系統(tǒng)的代碼需要分開(kāi)管理。處理程序組件時(shí)小心謹(jǐn)慎有助于減少后續(xù)工作量。
微編程器一般都載入ram中運(yùn)行,這在某些微處理器結(jié)構(gòu)中是不可能的,尤其是古老的8051系列,雖然其結(jié)構(gòu)都是面向硬件的,但它的限制大過(guò)它所帶來(lái)的好處。
下載過(guò)程
程序1中的代碼顯示的是下載目標(biāo)系統(tǒng)和運(yùn)行微編程器所需要的功能。在這個(gè)例子中,目標(biāo)系統(tǒng)從某個(gè)i/o通道(也許是串口)接收文本形式的摩托羅拉s record文件,將它譯碼并寫(xiě)到ram中,然后在傳輸結(jié)束時(shí)目標(biāo)系統(tǒng)跳轉(zhuǎn)到下載代碼啟動(dòng)微編程器。
注意programmer_buf[]存儲(chǔ)空間是自動(dòng)調(diào)整的,也就是說(shuō)它在目標(biāo)系統(tǒng)的存儲(chǔ)單元里沒(méi)有固定的位置,這意味著新記錄的地址是相對(duì)的而不是絕對(duì)的,新代碼的位置是獨(dú)立的。如果匯編程序不能產(chǎn)生位置獨(dú)立的代碼,那么programmer_buf[]就要在存儲(chǔ)器中分配一個(gè)固定的位置,新記錄的地址也要留在那個(gè)位置。
假如目標(biāo)系統(tǒng)沒(méi)有資源可長(zhǎng)期分配給programmer_buf[],則新來(lái)的微編程器內(nèi)容可以放在其它數(shù)據(jù)的上面。此時(shí),系統(tǒng)無(wú)論如何都要中斷其它操作,將ram大部分空間留給微編程器。
基本微編程器
微型編程器的頂級(jí)代碼如程序2所示,這個(gè)代碼也可以從某些地方接收s。颍澹悖铮颍湮募⑵渥g碼。微編程器將新接收到的數(shù)據(jù)記錄在閃存中,當(dāng)文件傳輸完成后重新啟動(dòng)系統(tǒng)。雖然過(guò)于簡(jiǎn)單了些(用文本文件來(lái)傳輸大的程序也許不十分可靠),但這個(gè)代碼表示了微編程器的所有重要特征。
。澹颍幔螅澹撸妫欤幔螅瑁ǎ┏藢(shí)際擦除閃存中的內(nèi)容外,它還管理簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu),繼續(xù)跟蹤哪一段閃存中的數(shù)據(jù)需要擦除,哪一段已經(jīng)被擦除。s。颍
將底層操作系統(tǒng)放于閃存中有很多好處,例如設(shè)計(jì)人員可以隨時(shí)在現(xiàn)場(chǎng)將軟件新版本下載到閃存中對(duì)其進(jìn)行更新,但在下載過(guò)程中有一些因素需要注意,否則會(huì)造成系統(tǒng)崩潰的災(zāi)難性后果。本文介紹一種便利的軟件結(jié)構(gòu),它可以幫助工程師避免犯一些常見(jiàn)的錯(cuò)誤。
所有現(xiàn)場(chǎng)更新底層操作系統(tǒng)的方法都存在這樣一個(gè)問(wèn)題,即假如升級(jí)內(nèi)容中存在缺陷,那么目標(biāo)系統(tǒng)可能需要花很大力氣才能更正,許多缺陷很簡(jiǎn)單且顯而易見(jiàn),但有些隱藏很深的缺陷只有在產(chǎn)品完成以后才能顯現(xiàn)出來(lái)。
用戶(hù)發(fā)現(xiàn)和處理缺陷的能力各有千秋,而更糟糕的是,他們往往不注意諸如“如果在編程過(guò)程中電源系統(tǒng)中斷系統(tǒng)將受到損壞”一類(lèi)的警告,在系統(tǒng)更新過(guò)程中,他們很愿意重新啟動(dòng)其它功能系統(tǒng),然后再把“出了問(wèn)題”的產(chǎn)品拿去維修。
所有設(shè)計(jì)完好的底層操作系統(tǒng)更新過(guò)程,都要能夠盡可能從用戶(hù)的錯(cuò)誤和其它災(zāi)難性事件中恢復(fù),做到這一點(diǎn)最好的方法就是采取可靠的底層操作系統(tǒng)更新策略,以完全避免這些問(wèn)題。本文將討論這樣一種策略,它可以直接使用,但是也可以根據(jù)實(shí)際應(yīng)用的特性對(duì)它進(jìn)行修正。
微編程器
微編程器是對(duì)嵌入式系統(tǒng)在底層操作系統(tǒng)更新過(guò)程之前、過(guò)程中及之后運(yùn)行情況的一種系統(tǒng)級(jí)描述,這種對(duì)工作情形的描述有助于避免與其它底層操作系統(tǒng)下載方法有關(guān)的問(wèn)題,小心對(duì)待這些過(guò)程可以消除很多其它的擔(dān)心。
采用微編程器的底層操作系統(tǒng)更新方法第一步是使嵌入式系統(tǒng)進(jìn)入下載發(fā)生時(shí)所期望的狀態(tài)。過(guò)渡到這個(gè)狀態(tài)可以采用好幾種方式,例如,它可以通過(guò)用戶(hù)按下設(shè)備控制界面上的“升級(jí)”鍵來(lái)完成,或者在系統(tǒng)探測(cè)到文件傳輸開(kāi)始或結(jié)束時(shí)進(jìn)行,或者用其它方法。不管哪種情況,目標(biāo)系統(tǒng)都會(huì)意識(shí)到底層操作系統(tǒng)馬上要更新了,于是讓其它控制過(guò)程進(jìn)入安全和穩(wěn)定的停止?fàn)顟B(tài)。
下一步,目標(biāo)系統(tǒng)會(huì)收到一個(gè)叫做微編程器的應(yīng)用程序,微編程器將控制系統(tǒng),并開(kāi)始接收新的應(yīng)用底層操作系統(tǒng),將它寫(xiě)到閃存中。一切完成后,目標(biāo)系統(tǒng)就開(kāi)始運(yùn)行新的底層操作系統(tǒng)。
采用微編程器下載底層操作系統(tǒng)的最大特點(diǎn)之一是它的靈活性,微編程器的執(zhí)行過(guò)程即使在底層操作系統(tǒng)開(kāi)始更新前的最后一刻也可以更改,以便對(duì)系統(tǒng)進(jìn)行錯(cuò)誤糾正和改進(jìn)。
微編程器不會(huì)消耗目標(biāo)系統(tǒng)的資源,除非已開(kāi)始進(jìn)行編程。此外,由于微編程器很小,所以目標(biāo)系統(tǒng)在更新過(guò)程開(kāi)始時(shí)不需要龐大而復(fù)雜的通訊協(xié)議,只需簡(jiǎn)單的文本文件傳輸就足夠了。
采用微編程器的底層操作系統(tǒng)更新其安全性一度是最引人注目的優(yōu)點(diǎn)。當(dāng)目標(biāo)系統(tǒng)的閃存芯片只用于存儲(chǔ)底層操作系統(tǒng)時(shí),系統(tǒng)將不會(huì)有對(duì)閃存芯片內(nèi)容進(jìn)行刪除和編程的代碼,除非實(shí)際過(guò)程中需要這樣。因此即使在程序失控的嚴(yán)重情況下,系統(tǒng)也不會(huì)意外地刪除它本身的底層操作系統(tǒng)。
然而,微編程器也有缺點(diǎn),它通常作為一個(gè)獨(dú)立的程序執(zhí)行,因此下載和傳輸?shù)侥繕?biāo)系統(tǒng)的代碼需要分開(kāi)管理。處理程序組件時(shí)小心謹(jǐn)慎有助于減少后續(xù)工作量。
微編程器一般都載入ram中運(yùn)行,這在某些微處理器結(jié)構(gòu)中是不可能的,尤其是古老的8051系列,雖然其結(jié)構(gòu)都是面向硬件的,但它的限制大過(guò)它所帶來(lái)的好處。
下載過(guò)程
程序1中的代碼顯示的是下載目標(biāo)系統(tǒng)和運(yùn)行微編程器所需要的功能。在這個(gè)例子中,目標(biāo)系統(tǒng)從某個(gè)i/o通道(也許是串口)接收文本形式的摩托羅拉s record文件,將它譯碼并寫(xiě)到ram中,然后在傳輸結(jié)束時(shí)目標(biāo)系統(tǒng)跳轉(zhuǎn)到下載代碼啟動(dòng)微編程器。
注意programmer_buf[]存儲(chǔ)空間是自動(dòng)調(diào)整的,也就是說(shuō)它在目標(biāo)系統(tǒng)的存儲(chǔ)單元里沒(méi)有固定的位置,這意味著新記錄的地址是相對(duì)的而不是絕對(duì)的,新代碼的位置是獨(dú)立的。如果匯編程序不能產(chǎn)生位置獨(dú)立的代碼,那么programmer_buf[]就要在存儲(chǔ)器中分配一個(gè)固定的位置,新記錄的地址也要留在那個(gè)位置。
假如目標(biāo)系統(tǒng)沒(méi)有資源可長(zhǎng)期分配給programmer_buf[],則新來(lái)的微編程器內(nèi)容可以放在其它數(shù)據(jù)的上面。此時(shí),系統(tǒng)無(wú)論如何都要中斷其它操作,將ram大部分空間留給微編程器。
基本微編程器
微型編程器的頂級(jí)代碼如程序2所示,這個(gè)代碼也可以從某些地方接收s。颍澹悖铮颍湮募⑵渥g碼。微編程器將新接收到的數(shù)據(jù)記錄在閃存中,當(dāng)文件傳輸完成后重新啟動(dòng)系統(tǒng)。雖然過(guò)于簡(jiǎn)單了些(用文本文件來(lái)傳輸大的程序也許不十分可靠),但這個(gè)代碼表示了微編程器的所有重要特征。
erase_flash()除了實(shí)際擦除閃存中的內(nèi)容外,它還管理簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu),繼續(xù)跟蹤哪一段閃存中的數(shù)據(jù)需要擦除,哪一段已經(jīng)被擦除。s。颍
熱門(mén)點(diǎn)擊
- 什么是PS/2接口 USB(Universa
- USB 通信技術(shù)
- 基于80C196KC的ARINC429總線(xiàn)接
- 非易失性并行存儲(chǔ)器的應(yīng)用
- ACTEL發(fā)布兩款實(shí)現(xiàn)人機(jī)接口(HMI)和微
- 揭密DRAM陣列架構(gòu) — 8F2 vs. 6
- 基于USB的接口卡
- 慧榮科技新款固態(tài)驅(qū)動(dòng)器控制芯片支持MLC F
- 基于EZ-USB的數(shù)據(jù)傳輸接口設(shè)計(jì)
- 通用串行總線(xiàn)USB及其應(yīng)用
推薦技術(shù)資料
- 100A全集成電源模塊R
- Teseo-VIC6A GNSS車(chē)用精準(zhǔn)定位
- 高效先進(jìn)封裝工藝
- 模數(shù)轉(zhuǎn)換器 (Analog-to-Digit
- 集成模數(shù)轉(zhuǎn)換器(ADC)
- 128 通道20 位電流數(shù)字轉(zhuǎn)換器̴
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動(dòng)IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究