音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

閃存中的底層操作系統(tǒng)更新策略

出處:sillboy 發(fā)布于:2008-09-01 09:38:58

  將底層操作系統(tǒng)放于閃存中有很多好處,例如設(shè)計人員可以隨時在現(xiàn)場將軟件新版本到閃存中對其進(jìn)行更新,但在過程中有一些因素需要注意,否則會造成系統(tǒng)崩潰的災(zāi)難性后果。本文介紹一種便利的軟件結(jié)構(gòu),它可以幫助工程師避免犯一些常見的錯誤。

  所有現(xiàn)場更新底層操作系統(tǒng)的方法都存在這樣一個問題,即假如升級內(nèi)容中存在缺陷,那么目標(biāo)系統(tǒng)可能需要花很大力氣才能更正,許多缺陷很簡單且顯而易見,但有些隱藏很深的缺陷只有在產(chǎn)品完成以后才能顯現(xiàn)出來。

  用戶發(fā)現(xiàn)和處理缺陷的能力各有千秋,而更糟糕的是,他們往往不注意諸如“如果在編程過程中電源系統(tǒng)中斷系統(tǒng)將受到損壞”一類的警告,在系統(tǒng)更新過程中,他們很愿意重新啟動其它功能系統(tǒng),然后再把“出了問題”的產(chǎn)品拿去維修。

  所有設(shè)計完好的底層操作系統(tǒng)更新過程,都要能夠盡可能從用戶的錯誤和其它災(zāi)難性事件中恢復(fù),做到這一點(diǎn)的方法就是采取可靠的底層操作系統(tǒng)更新策略,以完全避免這些問題。本文將討論這樣一種策略,它可以直接使用,但是也可以根據(jù)實際應(yīng)用的特性對它進(jìn)行修正。

  微編程器

  微編程器是對嵌入式系統(tǒng)在底層操作系統(tǒng)更新過程之前、過程中及之后運(yùn)行情況的一種系統(tǒng)級描述,這種對工作情形的描述有助于避免與其它底層操作系統(tǒng)方法有關(guān)的問題,小心對待這些過程可以消除很多其它的擔(dān)心。

  采用微編程器的底層操作系統(tǒng)更新方法步是使嵌入式系統(tǒng)進(jìn)入發(fā)生時所期望的狀態(tài)。過渡到這個狀態(tài)可以采用好幾種方式,例如,它可以通過用戶按下設(shè)備控制界面上的“升級”鍵來完成,或者在系統(tǒng)探測到文件傳輸開始或結(jié)束時進(jìn)行,或者用其它方法。不管哪種情況,目標(biāo)系統(tǒng)都會意識到底層操作系統(tǒng)馬上要更新了,于是讓其它控制過程進(jìn)入安全和穩(wěn)定的停止?fàn)顟B(tài)。

  下一步,目標(biāo)系統(tǒng)會收到一個叫做微編程器的應(yīng)用程序,微編程器將控制系統(tǒng),并開始接收新的應(yīng)用底層操作系統(tǒng),將它寫到閃存中。一切完成后,目標(biāo)系統(tǒng)就開始運(yùn)行新的底層操作系統(tǒng)。

  采用微編程器底層操作系統(tǒng)的特點(diǎn)之一是它的靈活性,微編程器的執(zhí)行過程即使在底層操作系統(tǒng)開始更新前的一刻也可以更改,以便對系統(tǒng)進(jìn)行錯誤糾正和改進(jìn)。

  微編程器不會消耗目標(biāo)系統(tǒng)的資源,除非已開始進(jìn)行編程。此外,由于微編程器很小,所以目標(biāo)系統(tǒng)在更新過程開始時不需要龐大而復(fù)雜的通訊協(xié)議,只需簡單的文本文件傳輸就足夠了。

  采用微編程器的底層操作系統(tǒng)更新其安全性一度是引人注目的優(yōu)點(diǎn)。當(dāng)目標(biāo)系統(tǒng)的閃存芯片只用于存儲底層操作系統(tǒng)時,系統(tǒng)將不會有對閃存芯片內(nèi)容進(jìn)行刪除和編程的代碼,除非實際過程中需要這樣。因此即使在程序失控的嚴(yán)重情況下,系統(tǒng)也不會意外地刪除它本身的底層操作系統(tǒng)。

  然而,微編程器也有缺點(diǎn),它通常作為一個獨(dú)立的程序執(zhí)行,因此和傳輸?shù)侥繕?biāo)系統(tǒng)的代碼需要分開管理。處理程序組件時小心謹(jǐn)慎有助于減少后續(xù)工作量。

  微編程器一般都載入RAM中運(yùn)行,這在某些微處理器結(jié)構(gòu)中是不可能的,尤其是古老的8051系列,雖然其結(jié)構(gòu)都是面向硬件的,但它的限制大過它所帶來的好處。

  過程

  程序1中的代碼顯示的是目標(biāo)系統(tǒng)和運(yùn)行微編程器所需要的功能。在這個例子中,目標(biāo)系統(tǒng)從某個I/O通道(也許是串口)接收文本形式的摩托羅拉S?。遥澹悖铮颍湮募?,將它譯碼并寫到RAM中,然后在傳輸結(jié)束時目標(biāo)系統(tǒng)跳轉(zhuǎn)到代碼啟動微編程器。

  注意programmer_buf[]存儲空間是自動調(diào)整的,也就是說它在目標(biāo)系統(tǒng)的存儲單元里沒有固定的位置,這意味著新記錄的地址是相對的而不是的,新代碼的位置是獨(dú)立的。如果匯編程序不能產(chǎn)生位置獨(dú)立的代碼,那么programmer_buf[]就要在存儲器中分配一個固定的位置,新記錄的地址也要留在那個位置。

  假如目標(biāo)系統(tǒng)沒有資源可長期分配給programmer_buf[],則新來的微編程器內(nèi)容可以放在其它數(shù)據(jù)的上面。此時,系統(tǒng)無論如何都要中斷其它操作,將RAM大部分空間留給微編程器。

  基本微編程器

  微型編程器的代碼如程序2所示,這個代碼也可以從某些地方接收S?。遥澹悖铮颍湮募⑵渥g碼。微編程器將新接收到的數(shù)據(jù)記錄在閃存中,當(dāng)文件傳輸完成后重新啟動系統(tǒng)。雖然過于簡單了些(用文本文件來傳輸大的程序也許不十分可靠),但這個代碼表示了微編程器的所有重要特征。

 ?。澹颍幔螅澹撸妫欤幔螅瑁ǎ┏藢嶋H擦除閃存中的內(nèi)容外,它還管理簡單的數(shù)據(jù)結(jié)構(gòu),繼續(xù)跟蹤哪一段閃存中的數(shù)據(jù)需要擦除,哪一段已經(jīng)被擦除。S?。遥澹悖铮颍湮募薪?jīng)常會出現(xiàn)數(shù)據(jù)雜亂無章的情況,這時數(shù)據(jù)結(jié)構(gòu)要通過is_section_erased()來檢查以防止閃存重復(fù)擦除。

  只讀存儲器

  不管如何修改采用微編程器的系統(tǒng)描述來適應(yīng)自己系統(tǒng)的要求,在執(zhí)行的時候還是會遇到一些常見的問題。

  有些調(diào)試器特別是仿真器,將會與目標(biāo)處理器爭奪可寫入代碼的存儲空間。多數(shù)調(diào)試工具將代碼空間當(dāng)作是只讀的,當(dāng)它們探測到要寫入內(nèi)容時,有些會產(chǎn)生錯誤信息或簡單地不允許寫入。

  一般來說,調(diào)試器保護(hù)代碼空間本身是好意,因為程序在自身代碼空間寫入數(shù)據(jù)通常會引發(fā)嚴(yán)重的程序錯誤,除非那時正在進(jìn)行底層操作系統(tǒng)的更新。不幸的是調(diào)試器并不能夠判別出它們之間的區(qū)別。補(bǔ)救的方法是在調(diào)試器不會認(rèn)為是只讀的其它存儲空間里,對閃存芯片進(jìn)行“化名(alias)寄存”。

  常用化名寄存方法很簡單,只需要將所選擇激活的器件存儲空間加倍,然后將指向“物理”地址區(qū)域的地址轉(zhuǎn)移到指向“化名”區(qū)域就行了,進(jìn)行轉(zhuǎn)移的的場所通常是閃存芯片驅(qū)動器本身,如程序3中的假設(shè)write_flash()函數(shù)。

  完整的編程器

  采用微編程器方式的另一種方法是將微編程器的功能建在目標(biāo)系統(tǒng)中,即所謂的啟動加載,而不是把將它到RAM作為底層操作系統(tǒng)更新過程的步。這種策略有它的優(yōu)點(diǎn),但是在閃存芯片擦除重新編程前需要將閃存中的編程器代碼復(fù)制到RAM中。換句話說,就是代碼在運(yùn)行的時候,要自己重新定位到RAM中的某一點(diǎn)上,然后才能擦除并寫到閃存芯片中。這種方法同樣需要涉及到的代碼是位置獨(dú)立的。

  程序4中的程序表明如何將完整編程器的代碼復(fù)制到RAM中,以及programmer()函數(shù)如何找到RAM的形式。符號RAM_PROG_START、?。校遥希牵撸蹋牛渭埃遥希停撸校遥希牵撸樱裕粒遥允牵遥粒秃停遥希蛥^(qū)域里的標(biāo)記,那里存放著編程器代碼(也可能是整個應(yīng)用程序的一部分),通??梢杂贸绦蜻B接器自動計算出來。這種在entrypoint中看似復(fù)雜的計算方法迫使匯編程序在算entrypoint的值時按字節(jié)大小進(jìn)行計算。

  當(dāng)調(diào)用程序調(diào)用relocate_programmer()返回地址處的函數(shù)時,控制權(quán)就交給微編程器代碼在RAM中的拷貝,如果這時調(diào)試器還在運(yùn)行,就會停止顯示任何與programmer()函數(shù)有關(guān)的符號信息。為什么會這樣呢?這是因為programmer()現(xiàn)在是從不同于以前分配的地址開始運(yùn)行,因此任何通過連接器提供給調(diào)試器的符號信息都是毫無意義的。

  解決這個問題的方法是將應(yīng)用程序和RAM地址中的?。穑颍铮纾颍幔恚恚澹颍ǎ┲匦逻B接,然后將代碼信息導(dǎo)入調(diào)試器中。這是一種很方便的糾正方法,只不過有些調(diào)試器的代碼表不支持新增內(nèi)容。另外一種方法就是忍受,直到programmer()調(diào)試完成,不管怎樣這時理論上是不需要再看代碼的了。

  重新定位

  不是所有嵌入式系統(tǒng)開發(fā)工具鏈都可以產(chǎn)生在運(yùn)行時可以重定位的代碼,這種依賴位置的代碼需要從存放有連接的地址開始運(yùn)行,否則系統(tǒng)有可能崩潰。

  如果只有位置固定的微編程器,則它必須到連接器希望運(yùn)行的RAM地址中。正如前面所說,它表明為微編程器而保留的內(nèi)存必須安排在一個已知的位置。

  采用啟動加載方式時,可以有兩種選擇。個是將編程器代碼作為一個單獨(dú)程序進(jìn)行匯編并放于它在RAM中的目標(biāo)地址處,然后將這個代碼映像包含在應(yīng)用程序映像中(也許是通過將其二進(jìn)制映像轉(zhuǎn)換成固定的字符陣列),在開始更新底層操作系統(tǒng)時復(fù)制到RAM中。這個過程有點(diǎn)類似于微編程器的執(zhí)行過程,即從目標(biāo)板上的存儲器微編程器,而不是從串口。

  第二種是將完整的微編程器代碼作為初始數(shù)據(jù)來處理,然后用運(yùn)行時間環(huán)境的正常初始化程序?qū)⒋a復(fù)制到RAM中。GNU匯編程序使用_attribute_語言擴(kuò)展支持這種方式,還有好幾種商用匯編程序也可提供這種能力。這種方法的局限在于它需要足夠的RAM空間來容納全部程序代碼以及程序的其它數(shù)據(jù)。

  防止系統(tǒng)崩潰

  哪怕再小心設(shè)計底層操作系統(tǒng),也還是存在目標(biāo)硬件從空白存儲器進(jìn)行啟動的可能性。要避免這種情況出現(xiàn),就要迅速激活應(yīng)用程序的轉(zhuǎn)換機(jī)制,但這樣會使毫無準(zhǔn)備的用戶手忙腳亂。解決這一問題需要仔細(xì)研究目標(biāo)處理器對非法指示及閃存中未編程部分用0xff表示的數(shù)據(jù)的反應(yīng),是在用戶實際感受到問題前就開始研究。有些處理器會停止下來,并使其控制信號處于三態(tài),懸浮于外部硬件要求的任一值上,如果此時沒有上拉電阻或采取其它預(yù)防措施迫使這些不受控制的信號進(jìn)入安全狀態(tài),很容易導(dǎo)致預(yù)料不到的死機(jī)結(jié)果。

  監(jiān)測計數(shù)器

  在支持底層操作系統(tǒng)的系統(tǒng)中,一些無法避免的應(yīng)用程序缺陷會使看門狗計數(shù)器停頓下來并使系統(tǒng)復(fù)位,從而將微編程器排除在嵌入式系統(tǒng)的外面。極端的情況是在程序的main?。ǎ┖瘮?shù)中意外出現(xiàn)的while(1)語句,產(chǎn)生的循環(huán)嵌套(無限程序循環(huán)外面又是無限看門狗超時及系統(tǒng)復(fù)位循環(huán))使目標(biāo)對升級按鈕沒有反應(yīng),因為在檢查按鈕之前系統(tǒng)就已經(jīng)重啟了。

  支持底層操作系統(tǒng)的系統(tǒng)要仔細(xì)檢查所有可能的狀態(tài),以便決定為什么系統(tǒng)要啟動,并在探測到大量連續(xù)的看門狗信號和其它復(fù)位時迫使它轉(zhuǎn)換成升級模式。很多系統(tǒng)在看門狗計數(shù)器終止時不會中斷RAM的電源,因此可以在那里安全地存儲關(guān)鍵數(shù)據(jù)以及復(fù)位的計算次數(shù)。計數(shù)器每復(fù)位時就加一,到達(dá)某一個數(shù)量時,啟動代碼將停止應(yīng)用程序,以避免代碼強(qiáng)制產(chǎn)生復(fù)位。

  電源中斷

  如果在閃存寫程序過程中電源意外中斷,目標(biāo)閃存芯片在電源恢復(fù)時將可能處于矛盾的狀態(tài)。也許可能已完成寫程序的操作,一切正常,但也可能不是這樣。的情形是系統(tǒng)啟動代碼完整無缺,但部分應(yīng)用程序代碼丟失;糟的情況是閃存芯片還是空白,什么也沒寫進(jìn)去。

  對種情形可以用校驗和的方法檢測問題所在,這時不管用戶有沒有要求系統(tǒng)都會轉(zhuǎn)換到升級模式,對第二種情形的解決辦法就是不要讓這種情況發(fā)生。

  防止出現(xiàn)空白閃存芯片的方法就是不要刪除閃存中包含的系統(tǒng)啟動代碼部分,將這些代碼始終原封不動地保存起來,這樣即使電源中斷也可以維持足夠的啟動環(huán)境。然而這種方法也不是任何時候都適用。閃存芯片也許只有一個扇區(qū),要么全部刪除,要么全部保留;或者閃存芯片的“啟動區(qū)域”比它包含的啟動代碼要大,這樣會浪費(fèi)存儲應(yīng)用代碼的空間。

  刪除以及寫入閃存芯片啟動區(qū)域時小心一點(diǎn)可以在電源突然中斷時減少系統(tǒng)受損的風(fēng)險,有時可以完全避免。方法是這樣的,當(dāng)檢測到需要對含啟動代碼的閃存區(qū)重新寫入程序時,程序器首先會在另一個區(qū)域中創(chuàng)建一個與位置無關(guān)的代碼副本(也可以設(shè)想有一個在預(yù)先位置克隆好的系統(tǒng)啟動代碼)。然后刪除啟動代碼,同時目標(biāo)復(fù)位向量迅速恢復(fù)到臨時啟動代碼副本的位置。一旦啟動區(qū)域的程序?qū)戇M(jìn)去之后,復(fù)位向量就重新寫入指向新的啟動代碼位置。

  成功實現(xiàn)這種方法要依賴兩個重要因素,其中之一是應(yīng)仔細(xì)選擇臨時和存放啟動代碼副本的地址。如果地址比臨時地址低兩級,只要數(shù)據(jù)位從1變成0臨時復(fù)位向量就會轉(zhuǎn)成復(fù)位向量,這樣就可能造成閃存區(qū)域不必要的刪除。使臨時復(fù)位向量轉(zhuǎn)成復(fù)位向量是一個細(xì)微的操作,不管電源何時中斷,向量始終應(yīng)指向有效的位置。

  另外一個關(guān)鍵因素是應(yīng)避免在刪除啟動區(qū)域和寫入臨時復(fù)位向量之間電源中斷的風(fēng)險。實現(xiàn)該目標(biāo)所需能量可以從閃存芯片和微處理器規(guī)格表中的功耗計算出來,通常是在系統(tǒng)電源電路中增加一些電容彌補(bǔ)斷電造成的中斷,確認(rèn)電源在運(yùn)行時繼續(xù)保持,并一直不中斷直至區(qū)域刪除且臨時復(fù)位向量寫好為止,這樣可以避免可能產(chǎn)生的損壞。該方法的局限在于它依賴處理器啟動程序,要讀取復(fù)位向量得到初始程序計數(shù)器的值。復(fù)位后處理器簡單地從固定地址運(yùn)行代碼,也可將它修改成智能操作代碼的混合體以實現(xiàn)同樣的目的。

  硬件選項

  采用微編程器的底層操作系統(tǒng)更新方法及由這種方法衍生而來的其它的方法都是以底層操作系統(tǒng)為基礎(chǔ)的,因為它們都要求在代碼重新編程前目標(biāo)系統(tǒng)中已有代碼存在。這就產(chǎn)生了一個先有雞還是先有蛋的問題。如果在嵌入式系統(tǒng)中需要有代碼才能將新的代碼寫進(jìn)去,怎樣才能將那些初的代碼放進(jìn)去呢?

  要啟動這一過程現(xiàn)在有兩種現(xiàn)成的硬件可選,分別是后臺調(diào)試模式(BDM)和JTAG。

  帶有BDM端口的處理器可以提供一個基本的直接連接處理器本身內(nèi)部結(jié)構(gòu)的串口,通過向這個端口發(fā)送正確的指令和數(shù)據(jù),可以在目標(biāo)系統(tǒng)的RAM中增加微編程器的副本,并將控制權(quán)轉(zhuǎn)交給它。BDM端口也可以用來激勵閃存芯片的I/O線,這樣就可以直接對它進(jìn)行編程。很多以BDM為基礎(chǔ)的開發(fā)系統(tǒng)都包括一些腳本和程序可實現(xiàn)這一功能,但也可以在仔細(xì)研究處理器說明書之后,通過幾個芯片和電腦打印端口用人工方式來完成。

  JTAG是一種設(shè)計為便于芯片I/O線進(jìn)行讀寫的完全不同的技術(shù),通常是在芯片的微處理器(如果有的話)保持復(fù)位狀態(tài)時采用。然而與BDM相同,這種能力可以用來激勵?。遥粒突蜷W存把微編程器加入到里面,像BDM一樣,JTAG接口也可以通過研究目標(biāo)處理器說明書然后用幾個元件來實現(xiàn)。JTAG總線收發(fā)芯片有多種型號,可從不同的供應(yīng)商處得到,并加在不支持JTAG的系統(tǒng)中。

  請登陸: 維庫電子市場網(wǎng)(m.58mhw.cn) 瀏覽更多信息


  
關(guān)鍵詞:閃存中的底層操作系統(tǒng)更新策略閃存

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實其內(nèi)容的真實性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

MX25L8006EM2I-12G 閃存存儲器
廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機(jī)號碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時間周一至周五
9:00-17:30

關(guān)注官方微信號,
第一時間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務(wù)的動力!意見一經(jīng)采納,將有感恩紅包奉上哦!