引導加載程序(有時稱為閃存加載程序)是駐留在微控制器內存中的單獨應用程序(不是產品應用程序代碼),用于幫助嵌入式開發人員更新他們的軟件,而無需打開他們的設備并訪問 JTAG 或其他調試端口。
引導加載程序在嵌入式系統中已經存在了幾十年,但許多團隊忽視了它們的重要性,并且不完全理解如何去創建一個健壯的系統。更糟糕的是,有關如何創建引導加載程序的詳細信息分散在整個網絡中,沒有任何一個來源為開發人員提供成功創建自己所需的所有信息。在這篇文章中,我們將討論產品團隊為他們的系統創建引導加載程序的不同選項,并提供一些資源來深入了解如何創建自己的引導加載程序的細節。
開發人員可以使用多種選項來創建自己的引導加載程序。首先,許多微控制器都帶有內部工廠引導加載程序。工廠引導加載程序存在于微控制器 ROM 中,開發人員可以在產品制造過程中訪問以將其應用程序映像閃存到微控制器上。如果開發人員不需要強大的解決方案、錯誤處理或安全性,這些工廠引導加載程序可能足夠聰明,可以開箱即用。設備固件更新 (DFU) 已成為通過內置在微控制器中的 USB 更新固件的流行方法。為了使用 dfu,嵌入式開發人員必須:
從 ST Micro 下載 DFU 實用程序,例如 dfu-util 或 DfuSe
將他們的代碼編譯成 .dfu 圖像文件
在微控制器啟動期間按住特定的 GPIO 引腳
使用 dfu 實用程序來更新他們的固件
dfu 選項非常適合快速原型設計,但在生產環境中,必須有一個需要拉到特定狀態的特定 GPIO 可能很危險。如果用戶不小心觸發了正確的狀態并重新啟動會發生什么? 突然他們的系統無法工作,他們不知道為什么。
開發人員可以用來為其系統創建引導加載程序的第二個選項是使用由其微控制器供應商提供的引導加載程序。使用供應商提供的引導加載程序可能很有意義,因為創建引導加載程序所需的技能需要對微控制器中發生的事情有專業的了解。引導加載程序嵌入式開發人員需要了解:
鏈接器文件
如何共同定位多個應用程序圖像
檢測新圖像
驗證新的應用程序映像(校驗和、CRC、安全問題)
寫入閃存
在更新中止或電源故障時恢復
從已運行的應用程序分支到新應用程序
如何調試內存中的多個應用程序
它有很多內容,而且列表才剛剛開始。使用供應商提供的引導加載程序可以幫助開發人員快速克服學習曲線障礙。引導加載程序甚至可以作為開發人員采用然后構建自己的解決方案的起點。在許多情況下,供應商提供的解決方案是一個很好的例子,它功能強大但幾乎總是缺乏適當的錯誤處理、健壯性和安全性。
嵌入式開發人員可以將引導加載程序添加到他們的系統的另一種選擇是使用第三方供應商為他們創建一個。外包引導加載程序開發很有意義,因為它允許團隊專注于他們的產品功能,而不是固件更新,這本身就是一個復雜的話題。
最后一個選項是創建自己的引導加載程序。深入了解細節可能是非常有益和具有挑戰性的。引導加載程序揭示了開發人員對他們的微控制器、嵌入式軟件以及如何調試應用程序的了解程度。經驗豐富的開發人員的典型開發工作可能需要四到六周,具體取決于復雜性和接口要求。對引導加載程序幾乎沒有經驗的開發人員可能需要 10 到 12 周的時間。學習曲線和錯誤并非微不足道。
無論你決定使用哪個選項來實現引導加載程序,都不要將其視為微不足道的系統組件。不正確的引導加載程序實施可能會導致嵌入式系統安全漏洞或維護噩夢。應該在設計周期的早期開發引導加載程序,而不是在最后一刻添加到系統的最后一步。嵌入式開發人員使用和測試引導加載程序和固件更新和管理系統的時間越長,他們在確保能夠成功更新固件時的煩惱就越少。