多年來(lái),互聯(lián)網(wǎng)提供了一種獨(dú)特的媒介,嵌入式開(kāi)發(fā)人員可以通過(guò)它更新他們的嵌入式固件。在互聯(lián)網(wǎng)出現(xiàn)之前,技術(shù)人員必須對(duì)設(shè)備進(jìn)行物理訪問(wèn),以便他們可以訪問(wèn)引導(dǎo)加載程序并更新固件。如今,無(wú)論該設(shè)備位于世界的哪個(gè)地方,它都可以打電話回家并要求提供最新最好的固件以及錯(cuò)誤修復(fù)和功能更新。
在設(shè)計(jì)如何遠(yuǎn)程更新嵌入式系統(tǒng)時(shí),應(yīng)考慮以下五個(gè)技巧:
1.首先下載整個(gè)圖像
有許多技術(shù)可用于更新嵌入式系統(tǒng)的固件。風(fēng)險(xiǎn)最低的方法之一是在將整個(gè)固件映像寫(xiě)入閃存之前等待本地接收到整個(gè)固件映像。等待整個(gè)固件映像有許多優(yōu)點(diǎn)。首先,如果 Internet 暫時(shí)中斷或嵌入式系統(tǒng)無(wú)法訪問(wèn) Internet,則不必中止更新過(guò)程,也不會(huì)使系統(tǒng)處于未知狀態(tài)。其次,接收整個(gè)圖像允許在開(kāi)始寫(xiě)入圖像之前對(duì)其進(jìn)行驗(yàn)證。校驗(yàn)和或可疑字符串序列可能被識(shí)別為故障,并且不會(huì)更新固件。
2. 內(nèi)置多個(gè)應(yīng)用鏡像
有時(shí),開(kāi)發(fā)人員很幸運(yùn),并且在微控制器上擁有過(guò)多的 Flash。額外的 Flash 空間開(kāi)辟了將 Flash 空間分解為多個(gè)應(yīng)用程序空間的可能性。例如,可能有工廠固件映像位置、更新應(yīng)用程序槽 1 位置和更新應(yīng)用程序映像槽 2 位置。新的固件更新將首先存儲(chǔ)在應(yīng)用程序插槽 1 中,然后存儲(chǔ)在應(yīng)用程序插槽 2 中。隨后的每個(gè)更新都將在兩者之間反彈。如果鏡像更新失敗,嵌入式系統(tǒng)可以繼續(xù)運(yùn)行之前的鏡像。如果兩個(gè)應(yīng)用程序槽都失敗了怎么辦?原始固件仍然在板上,嵌入式開(kāi)發(fā)人員希望在帶有引導(dǎo)加載程序的安全閃存中,并且可以用作最壞情況下的后備方案。
3.考慮使用增量生成器
通過(guò)蜂窩網(wǎng)絡(luò)將整個(gè)固件映像傳輸?shù)竭B接互聯(lián)網(wǎng)的設(shè)備可能很快就會(huì)變得昂貴。為了防止標(biāo)準(zhǔn)網(wǎng)絡(luò)上的高額費(fèi)用甚至過(guò)度使用帶寬,可以使用增量生成器。增量生成器主要查看當(dāng)前正在使用的 Flash 圖像并確定它是如何變化的。僅將更改發(fā)送到引導(dǎo)加載程序進(jìn)行更新。在基于文件系統(tǒng)的嵌入式系統(tǒng)中,這是一項(xiàng)微不足道的練習(xí),但在低成本微控制器環(huán)境中,它可能更具挑戰(zhàn)性。例如,可能需要手動(dòng)定位模塊或代碼塊以提供額外的閃存空間,以便模塊可以增長(zhǎng)而不會(huì)導(dǎo)致增量生成變得過(guò)多。
4.加密圖像
安全性幾乎與物聯(lián)網(wǎng)一樣受到關(guān)注——這是有充分理由的。連接到 Internet 的設(shè)備需要安全。有多種方法可以做到這一點(diǎn),但第一步是加密固件更新映像。加密使黑客更難獲得對(duì)固件的訪問(wèn)權(quán)限,從而更難以深入了解系統(tǒng)的工作原理。
5.驗(yàn)證情況狀態(tài)
在遠(yuǎn)程執(zhí)行固件更新之前,應(yīng)驗(yàn)證系統(tǒng)的狀態(tài)。例如,如果特定系統(tǒng)由電池供電并且電池電量低怎么辦? 在電池電量不足時(shí)啟動(dòng)更新程序可能會(huì)導(dǎo)致系統(tǒng)在寫(xiě)入閃存時(shí)重置,或者更糟糕的是,系統(tǒng)可能會(huì)在更新期間死機(jī)。那么固件的最終狀態(tài)是什么? 要檢查的另一種情況是設(shè)備當(dāng)前是否正在使用中。人們討厭設(shè)備在做某事時(shí)突然開(kāi)始執(zhí)行更新的方式。嵌入式開(kāi)發(fā)人員應(yīng)該檢查嵌入式系統(tǒng)應(yīng)并確認(rèn)其處于良好狀態(tài),并有足夠的時(shí)間安全且正確地執(zhí)行更新。