精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

通過無線方式更新引導加載程序的注意事項

星星科技指導員 ? 來源:嵌入式計算設計 ? 作者:Drew Moseley ? 2022-10-17 09:19 ? 次閱讀

現代電子設備越來越復雜,并且與互聯網相連。作為一般規則,復雜性與安全性背道而馳,不安全的互聯網連接設備已經成熟,罪魁禍首可以濫用。在設計這些系統時,我們必須假設所有軟件都會有錯誤,其中一些錯誤將是可利用的漏洞。解決這些問題的第一步是確保軟件更新可以交付到您的系統,最好是自動和無線(OTA)。歐盟“消費者物聯網網絡安全:基線要求(ETSI EN 303 645)”標準草案特別將及時自動更新作為其要求之一。它確實為不可變的第一階段引導加載程序提供了例外,以最大限度地降低將現場設備置于非引導狀態(也稱為“磚砌”)的風險[1]“董事會)。

本文將討論在連接的設備中更新引導加載程序的問題。請注意,雖然這里討論的原則適用于任何軟件系統,但我們將專門討論運行Linux的系統。使用更小、更定制設計的系統可能會提供更多這些系統獨有的選擇。

系統設計

圖 1 顯示了一個通用的 Linux 系統,其中包含可能更新的主要相關組件。存儲介質將是某種塊設備,例如eMMC或SATA硬盤驅動器。在該設備中,將有引導加載程序,內核,設備樹(取決于正在使用的CPU)和包含構建系統所需的所有文件的根文件系統。在某些情況下使用更復雜的體系結構,但出于本討論的目的,我們將將其限制為最簡單的情況。

pYYBAGNMreWAcDjeAADbkBr76ZI013.png

系統更新實用程序,如曼德[2]、swupdate[3],其他人能夠開箱即用地更新內核,設備樹和根文件系統,在許多情況下,這種級別的可更新性就足夠了。

引導加載程序是系統的組件,負責在開機時初始化系統,從 CPU 重置指令開始。它負責以下任務:

?初始化和擦除內存

?設置電源軌和時鐘

?將所有外設設置為已知和靜止狀態,以避免意外中斷。

?加載并啟動內核

如前所述,所有軟件都有錯誤,因此我們可以假設也會有引導加載程序錯誤。我們可以通過最小化引導加載程序的功能來減少攻擊面,但是我們可以完全消除錯誤的風險。為什么更新引導加載程序比更新系統的其他組件更復雜?如果我們嘗試,風險是什么?如果我們不嘗試,有什么風險?

無線支持系統

poYBAGNMrbiAfhJ-AABf78q-nMw345.png

此框圖顯示了能夠進行可靠無線 (OTA) 更新的系統的基本系統設計。[4]引導加載程序負責系統初始化并與 OTA 客戶端交互,以選擇要使用的內核、設備樹和根文件系統。健壯性是通過對正在運行的 Linux 映像所需的組件具有完全冗余來實現的。這可確保在 OTA 更新中斷的情況下,始終有已知良好的映像可以回滾到該映像。此外,這可確保完全原子更新,因為更新客戶端是系統中唯一知道更新正在進行中的組件,直到更新完成并準備好運行。

任何更新 OTA 的組件都可能導致設備無法正常工作,因此系統的健壯性與引導加載程序處理回滾到以前已知良好的配置的能力直接相關。這意味著系統中必須有一個組件,該組件是不可變的,可以正確處理錯誤的更新。

引導加載程序更新

在大多數情況下,處理回滾的不可變組件 _is_ 引導加載程序。在典型的嵌入式 Linux 應用程序中,是 Das U-Boot[5]。如果我們嘗試更新引導加載程序,由于沒有冗余,因此我們面臨著將主板砌成磚塊的風險。如果主板在我們開始寫入新的引導加載程序映像后,但在寫入完成之前重新啟動,則我們的映像包含舊版本的一部分和新版本的一部分。在這種情況下,行為是未定義的,唯一的緩解措施是能夠物理訪問設備以編寫正確的引導加載程序,通常使用USB或其他硬連線連接。

但是,我們為什么要更新引導加載程序呢?至少,引導加載程序只是用作初始化硬件,然后將控制權移交給Linux內核的一種手段。由于功能有限,引導加載程序出現問題的風險降至最低。

對于許多設計來說,這種風險水平是可以接受的,架構師可以決定干脆不在其部署的設備中提供OTA引導加載程序更新。使用硬連線機制仍然是最后的手段。

然而,對于許多設計,這種風險水平被認為是不可接受的,并且必須為引導加載程序的OTA更新提供一些機制。此外,許多設計為引導加載程序添加了更多功能;諸如系統診斷或其他特定于應用程序的要求之類的東西可能會在引導加載程序中實現,從而導致更有可能需要更新。那么我們如何處理這個問題呢?

用于提供引導加載程序更新的選項

有許多選項允許更新引導加載程序。本討論不是一個完整的解決方案,而是對可能適用于您的設計的方法的高級描述。每個都有其權衡取舍。

選項 1:無冗余

如果對于特定應用程序來說,磚砌板的風險是可以接受的,那么您可以簡單地嘗試部署引導加載程序更新OTA,并在發生時處理后果。如果您的隊列規模較小,并且獲得對設備的物理訪問的成本較低,那么這可能很有效。如果需要引導加載程序更新,并且OTA嘗試失敗,那么您并沒有因為嘗試過而變得更糟。OTA 引導加載程序更新失敗的情況與沒有 OTA 引導加載程序更新功能的情況相同。即,您必須獲得對設備的物理訪問權限,并使用制造商提供的機制來重新刷新引導加載程序。

選項 2:多階段引導加載程序

此體系結構將引導加載程序功能分為兩個階段(或更多階段,具體取決于設計的復雜程度)。最終,這仍然需要階段 1 中的一段不可變代碼。在更新階段 2 時,您確實具有冗余性和健壯性,因此,如果您仔細選擇在何處實現功能,則可以提供引導加載程序功能的 OTA 更新。這是一個不錯的選擇,因為不可變階段 1 二進制文件中的代碼量會減少,從而降低總體風險。

pYYBAGNMrbmARZroAAB1bUy9BR8931.png

U-Boot 使用 SPL(輔助程序加載程序)和 TPL(第三級程序加載程序)實現多階段引導。引入此機制是為了允許支持具有單獨引導 ROM 的系統,這些系統太小而無法存儲完整的 U-Boot 映像。在這種情況下,U-Boot SPL 映像將包含足夠的初始化代碼來加載和啟動完整的 U-Boot 映像,通常是從大型塊設備(如 MMC)上啟動。SPL 需要能夠初始化足夠的 RAM 和包含完整 U-Boot 映像的設備。

即使對于沒有小型引導ROM限制的設備,我們也可以利用此架構在第2階段實現我們的可更新功能,同時在第1階段保留最低限度,包括正確處理冗余塊。

存在階段 1 存在問題的風險,需要物理訪問才能解決。鑒于階段 1 中的功能降低,在許多情況下,這種風險水平是可以接受的。

選項 3:并行引導加載程序

poYBAGNMrbqAJ2szAAB6NmetT-4132.png

許多主板提供從多個設備啟動的功能。例如,許多主板可以從板載 eMMC 或可拆卸 SD/MMC 卡啟動。或者,他們可能為引導加載程序使用專用的 NOR 閃存設備,但仍能夠從 eMMC 塊介質中運行引導加載程序。

這些類型的主板可以配置為在其中一個受支持的設備中存儲不可變的引導加載程序,然后將OTA可更新的引導加載程序存儲在另一個設備中。通常,可更新的引導加載程序將與根文件系統位于相同的介質(即eMMC)中,因此很容易更新。由于“備用”媒體中的引導加載程序是不可變的,因此可以依賴它從“標準”位置的引導加載程序的損壞的OTA更新中恢復。

這種方法的問題在于,選擇引導設備通常需要物理訪問電路板以移動跳線或更改開關設置。如果您的設備位于最終用戶可以訪問它們的位置,這可能是一個可行的選擇,因為最終用戶可以在發生故障時選擇恢復介質。這可以通過文檔或根據支持人員的指示來完成。

某些系統使用外部硬件來選擇引導加載程序。運行RTOS的小型MCU可以監視正確的系統活動,并在Linux系統未運行時選擇備用引導加載程序。使用外部源正確檢測這可能很棘手,但看門狗計時器切換GPIO引腳或寫入共享內存可能就足夠了。這也是一個更復雜的設計,需要根據您的系統要求進行考慮。請注意,您可能需要考慮對MCU固件映像進行OTA更新,這是另一個復雜程度。

選項 4:eMMC 引導分區

電子監控器的 4.3 版[6]規范要求 2 個單獨的硬件啟動分區。這些分區通常每個為 4MB,用于存儲引導加載程序。這些分區可以從Linux用戶空間中讀取和寫入,但是默認情況下它們以只讀方式提供;讀寫功能是通過寫入 /sys 偽文件系統中的文件來實現的:

pYYBAGNMrbuAJdXdAAAoxid-9y8382.png

然后可以使用 dd 實用程序將引導加載程序寫入這些分區

poYBAGNMrbyAKHQwAAAmIP97Zi4444.png

eMMC 設備用作引導塊的分區由設備本身設置的參數確定。這可以從 U-Boot 提示符中完成:

pYYBAGNMrb2AKBDtAAAqYd0LPrY784.png

或者從 Linux 用戶空間:

poYBAGNMrb6ANvLEAAArJrmfg4A515.png

曼德的方法

利用 eMMC 引導分區,對分區的更新是原子的,并且獨立于對根文件系統的更新。eMMC 引導分區之間沒有自動故障轉移,因此這不會減輕由于引導加載程序更新失敗而導致的磚砌設備的問題。但是,這確實可以輕松地僅向引導加載程序提供更新,而無需對根文件系統進行任何特定調整。

由于在提供引導加載程序更新時存在磚砌板的風險以及OTA更新過程的魯棒性降低,Mender[7]不提供開箱即用的引導加載程序更新。如前所述,很難以通用方式完成,并且最終可能會非常特定于應用程序和硬件。 Mender 更新模塊框架允許插件架構支持自定義更新類型。Mender 可以使用自定義更新模塊支持任何任意負載類型。此插件體系結構允許提供處理特定有效負載類型的自定義腳本。允許在特定系統中進行引導加載程序更新可以使用更新模塊來實現。根據應用程序的需要以及所使用的硬件的功能,可以使用上述任何方法。

結束語

在現場部署的設備中上傳系統引導加載程序存在許多風險。在不合時宜的時間發生電源故障可能會使設備在現場陷入困境,從而導致潛在的昂貴召回過程。但是,不提供引導加載程序更新機制可能會帶來不可接受的風險,具體取決于特定應用程序的配置文件。我們介紹了許多允許引導加載程序更新的方法,并討論了每種方法的優缺點。作為系統設計人員,這有望讓您能夠為您的系統做出適當的選擇,并幫助您快速進入市場,并適當了解設計的風險。

審核編輯:郭婷

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 驅動器
    +關注

    關注

    52

    文章

    8168

    瀏覽量

    146052
  • 物聯網
    +關注

    關注

    2904

    文章

    44306

    瀏覽量

    371460
  • Linux
    +關注

    關注

    87

    文章

    11232

    瀏覽量

    208950
收藏 人收藏

    評論

    相關推薦

    無線溫度傳感器設計 注意事項..!

    現在設計一個 無線溫度傳感器 帶藍牙的......藍牙會選擇SCR的模塊...請教各位同仁在設計藍牙模塊的大板時需要注意那些事項...可否列出幾個重點注意事項.....
    發表于 07-21 17:12

    如何構建帶有實時更新選項的引導加載程序

    大家好。我試圖構建帶有實時更新選項的引導加載程序演示,但是我不能讓它工作。需要實時更新模式鏈接腳本來定義
    發表于 05-12 06:16

    數據的傳輸方式有哪些?注意事項是什么?

    數據的傳輸方式有哪些?組合數據的傳輸方式注意事項有哪些?
    發表于 12-07 07:48

    IMXRT117x輔助引導加載程序啟用加密XIP的注意事項是什么?

    大家好, 我有一個問題與 IMXRT117x 輔助引導加載程序(基于 NXP MCUBOOT)所需的修改有關,以啟用駐留在外部串行 QSPI NOR 閃存中的加密 XIP 引導(到應用
    發表于 05-30 07:35

    如何利用藍牙串行適配器通過引導加載讓器件實現無線觸發

    引導加載器支持產品固件的現場更新引導加載器可使用UART、I2C、SPI或USB等常見通信接口更新
    發表于 01-18 09:52 ?1215次閱讀

    AN20-儀表低通過濾的應用注意事項

    AN20-儀表低通過濾的應用注意事項
    發表于 04-30 08:58 ?8次下載
    AN20-儀表低<b class='flag-5'>通過</b>濾的應用<b class='flag-5'>注意事項</b>

    空中更新引導加載程序OTA的注意事項

      在現場部署的設備中上傳系統引導加載程序存在許多風險。不合時宜的電源故障可能會使設備在現場陷入困境,從而導致潛在的昂貴的召回過程。
    發表于 07-01 09:16 ?798次閱讀
    空中<b class='flag-5'>更新</b><b class='flag-5'>引導</b><b class='flag-5'>加載</b><b class='flag-5'>程序</b>OTA的<b class='flag-5'>注意事項</b>

    部署無線AP的十個注意事項

    部署無線AP的十個注意事項
    發表于 10-09 14:21 ?6次下載

    無線更新引導加載程序OTA的注意事項

    本文將討論在連接的設備中更新引導加載程序的問題。所討論的原則適用于任何軟件系統,我們將專門討論運行 Linux 的系統。
    的頭像 發表于 11-24 15:39 ?763次閱讀
    <b class='flag-5'>無線</b><b class='flag-5'>更新</b><b class='flag-5'>引導</b><b class='flag-5'>加載</b><b class='flag-5'>程序</b>OTA的<b class='flag-5'>注意事項</b>

    如何使用CAN引導加載程序在MAXQ7665A中加載用戶應用代碼

    CAN引導加載程序通過CAN接口對MAXQ7665A微控制器進行編程。引導加載
    的頭像 發表于 02-21 16:40 ?758次閱讀
    如何使用CAN<b class='flag-5'>引導</b><b class='flag-5'>加載</b><b class='flag-5'>程序</b>在MAXQ7665A中<b class='flag-5'>加載</b>用戶應用代碼

    AN-2058: ADuCM355用戶引導加載程序

    用戶應用程序可以實現自己的引導加載程序,提供一個用于現場自我更新的機制。實現自己的用戶引導
    的頭像 發表于 06-16 16:31 ?945次閱讀
    AN-2058: ADuCM355用戶<b class='flag-5'>引導</b><b class='flag-5'>加載</b><b class='flag-5'>程序</b>

    無線開關量模塊使用注意事項

    思為無線今天為大家介紹使用開關量模塊的一些注意事項,避免用戶操作不當,造成無線開關量模塊的損壞、返修的情況。
    的頭像 發表于 04-11 15:45 ?1071次閱讀
    <b class='flag-5'>無線</b>開關量模塊使用<b class='flag-5'>注意事項</b>

    自舉程序設計注意事項

    電子發燒友網站提供《自舉程序設計注意事項.pdf》資料免費下載
    發表于 09-25 09:22 ?0次下載
    自舉<b class='flag-5'>程序</b>設計<b class='flag-5'>注意事項</b>

    MSPM0實時固件更新(LFU)引導加載程序實施

    電子發燒友網站提供《MSPM0實時固件更新(LFU)引導加載程序實施.pdf》資料免費下載
    發表于 08-29 09:58 ?0次下載
    MSPM0實時固件<b class='flag-5'>更新</b>(LFU)<b class='flag-5'>引導</b><b class='flag-5'>加載</b><b class='flag-5'>程序</b>實施

    AWR294x主引導加載程序和輔助引導加載程序

    電子發燒友網站提供《AWR294x主引導加載程序和輔助引導加載程序.pdf》資料免費下載
    發表于 09-06 09:47 ?0次下載
    AWR294x主<b class='flag-5'>引導</b><b class='flag-5'>加載</b><b class='flag-5'>程序</b>和輔助<b class='flag-5'>引導</b><b class='flag-5'>加載</b><b class='flag-5'>程序</b>