自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

IoT固/軟件更新及開源選項

企業(yè)動態(tài)
物聯(lián)網(wǎng)的迅速發(fā)展涌現(xiàn)了數(shù)十億與互聯(lián)網(wǎng)連接的無線嵌入式設(shè)備。 從醫(yī)療設(shè)備到坦克傳感器, 智能恒溫器, 智能路燈, 水監(jiān)視器等等, 物聯(lián)網(wǎng)比以往任何時候都應(yīng)用廣泛。

 物聯(lián)網(wǎng)的迅速發(fā)展涌現(xiàn)了數(shù)十億與互聯(lián)網(wǎng)連接的無線嵌入式設(shè)備。 從醫(yī)療設(shè)備到坦克傳感器, 智能恒溫器, 智能路燈, 水監(jiān)視器等等, 物聯(lián)網(wǎng)比以往任何時候都應(yīng)用廣泛。

[[227532]]

會出什么問題呢?

大多數(shù)這些設(shè)備的設(shè)計都不像是被惡意攻擊的目標。 嵌入式系統(tǒng)傳統(tǒng)上被認為是穩(wěn)定的產(chǎn)品, 但實施起來成本高昂, 因為投資回報率(ROI)在的周期比較長。 在過去一旦發(fā)貨, 就很少需要更新這些設(shè)備。 隨著智能手機和RTOS的爆發(fā), 才使得固件更新以及應(yīng)用更新的必要性凸顯出來。

假想一下, 惡意黑客將所有這些易受攻擊的連接設(shè)備作為潛在攻擊目標的話, 這些設(shè)備運行在不安全或過時的Linux 內(nèi)核上, 有些漏洞還沒有被修補過, 并且可以被遠程控制!

這可不是一個有吸引力的場景。

[[227533]]

安全更新: 嵌入式與服務(wù)器的對比

如今, 升級安全問題驅(qū)動了IoT軟件的升級更新, 也提高了工程師添加新的功能和修復(fù)漏洞可能性。

對于嵌入式設(shè)備, 固件更新機制不僅必須是安全的, 而且是可靠的, 因為它要么成功更新, 要么失敗到可恢復(fù)狀態(tài)。 一般地, 很難在用戶現(xiàn)場升級固件,而需要在無人看管的情況下完成自動升級。 大多數(shù)更新也必須保留先前的設(shè)備狀態(tài), 盡管在某些情況下恢復(fù)設(shè)備可能涉及將系統(tǒng)重新設(shè)置為默認狀態(tài)。

還有一個原子性問題。 Linux 服務(wù)器世界已經(jīng)習(xí)慣于執(zhí)行基于軟件包的更新, 所有的東西似乎都能運行良好。 但是嵌入式設(shè)備則不一定。

服務(wù)器通常運行在一個可控的環(huán)境中, 可能是安全的, 并且有電源的保障和網(wǎng)絡(luò)連接。 也就是說位于一個受監(jiān)控的、可訪問的位置, 用戶干預(yù)恢復(fù)是可能的, 即使并不是必要條件。

Linux 服務(wù)器通常依賴于包管理, 基于 RPM (或 YUM)或基于 deb 的apt , 具有非原子增量更新的依賴辨識。 由包版本更新驅(qū)動流程, 每個都有一組復(fù)雜的預(yù)安裝腳本, 這些腳本可能會讓系統(tǒng)處于一個未定義的狀態(tài), 甚至是非工作狀態(tài)。

不幸的是, 嵌入式設(shè)備可能無法訪問, 大部分時間可能處于低功耗模式, 有很長的存活周期, 可能會遭受電力或網(wǎng)絡(luò)中斷的困擾, 從而中斷固件升級。

總之, 基于包管理器的更新不是原子的, 因此很難測試和支持它們。 這通常會導(dǎo)致對設(shè)備固件實際狀態(tài)的跟蹤, 以及令人畏懼的"上次更新了什么?" 等問題。 這種方法不適合嵌入式系統(tǒng), 因為這些系統(tǒng)會要求始終保持一致性。

[[227534]]

鏡像更新

更新嵌入式設(shè)備的傳統(tǒng)最佳方式是對鏡像進行整體更新。 在設(shè)備中, 這將是整個鏡像和所有的設(shè)備固件。 在嵌入式 Linux 設(shè)備中, 這通常轉(zhuǎn)化為分區(qū)更新, 所以分區(qū)方案是一個重要的考慮因素, 因為它將影響可以執(zhí)行的軟件更新類型。

嵌入式 Linux 設(shè)備通常將媒介分為不同的分區(qū), 可以分別更新:

  • Bootloader 分區(qū): 如果有的話, 很少更新, 更新嵌入式設(shè)備的引導(dǎo)程序最終將導(dǎo)致設(shè)備最終被退出。 因此, 完善的更新機制應(yīng)盡可能避免這種情況。
  • 引導(dǎo) / 內(nèi)核分區(qū): Linux 內(nèi)核和相關(guān)固件, 如設(shè)備樹和 initramfs 鏡像,除非為了安全,通常不需要更新。
  • 根文件系統(tǒng)分區(qū): 存儲的 OS 文件通常是只讀且不可變的。 這也很少更新, 但如果應(yīng)用程序依賴于這里的庫, 可能會發(fā)生較多的更新情況。
  • 用戶分區(qū): 用戶應(yīng)用程序的存儲位置和持久性數(shù)據(jù)是最需要更新的分區(qū)。

基本上, 固件鏡像更新可以從整個系統(tǒng):內(nèi)核、根和用戶分區(qū)到其中的某些部分。

有兩種可能的鏡像更新: 對稱和非對稱。

  • 對稱: 對稱更新需要更新分區(qū)鏡像的雙重副本, 以便可以在另一個運行時完成更新。 這通常需要兩個引導(dǎo)/內(nèi)核分區(qū)、兩個根文件系統(tǒng)以及兩個用戶分區(qū)。 然后, bootloader 會跟蹤哪些分區(qū)用于給定的引導(dǎo)。 對稱更新的停機時間很小, 通常只有重啟時間, 并允許更新取消。
  • 非對稱: 非對稱更新使用了一個通常由內(nèi)存運行的恢復(fù)操作系統(tǒng), 它有一個 Linux 內(nèi)核和 initramfs 鏡像。 這樣就減少了所需的分區(qū)數(shù)量, 因為恢復(fù)模式只在一個額外的分區(qū)中存在, 并且可以更新其他任何分區(qū)。 如果更新失敗, 可以重新嘗試恢復(fù)。 不對稱更新在更新時會有較長的下行時間, 并且不允許用戶取消。

用戶空間更新

通常情況下, 更新由用戶空間應(yīng)用程序執(zhí)行, 該應(yīng)用程序可以獲取軟件更新包, 使用它, 并通知 bootloader 更新。 它還需要允許安裝后進行操作。 然后 bootloader 啟動一個硬件監(jiān)視器并嘗試啟動。 如果引導(dǎo)成功, 那么硬件監(jiān)視器就會被關(guān)閉; 如果不成功, 它就會被觸發(fā), bootloader 再次嘗試啟動。 在多次嘗試之后, 它要么回到已知運行良好的分區(qū), 要么進入恢復(fù)模式。

一個重要的考慮是, 用戶空間固件更新必須通過固件更新進程進行。 另一個風(fēng)險是, 有可能更新到一個可啟動系統(tǒng), 該系統(tǒng)具有一個已損壞的固件更新機制。 不幸的是, 需要回到 bootloader 或者其他恢復(fù)機制來更新固件。

有些系統(tǒng)使用 bootloader 來執(zhí)行更新。 這存在嚴重的缺點, 如果固件更新代碼必須更新(例如因為分區(qū)更改) , 那么需要更新的是 bootloader, 這是非常危險的。 Bootloader 在驅(qū)動程序、工具、庫和它所支持的網(wǎng)絡(luò)協(xié)議數(shù)量方面也非常有限, 因此更新會發(fā)生在資源有限的環(huán)境中。

基于鏡像的開放源碼軟件更新有兩個主要選項, 分別支持對稱和非對稱更新:

  • Swupdate[1] (GPLv2許可下)

swupdate 在 Yocto 通過 meta-swupdate 層(但僅限于對稱更新)來支持 swupdate。 它還包含一個 Mongoose web 服務(wù)器—— Suricatta daemon, 可以從一個遠程服務(wù)器上拉取 Eclipse HawkBit[2]提供的更新新(用于向終端設(shè)備執(zhí)行軟件更新的后端解決方案)。 它目前只適用于 U-Boot bootloader。

  • RAUC [3] (在 LGPLv2.1許可下)

RAUC 在 Yocto 通過 meta-ptx 層提供支持, 支持 Grub 或 Barebox bootloader。

[[227535]]

遠程鏡像更新

固件更新過程不僅能夠從本地來源(例如 FLASH、 USB、 SD 或 UART)完成更新, 還必須能夠遠程更新,即通常所說的OTA更新。 OTA更新使用遠程服務(wù)器向運行在設(shè)備上的客戶端推送更新。

開源遠程 OTA 固件更新的一些選項包括:

  • Mender.io [4](在 Apache 2 許可下)

mender.io同時用于客戶端和服務(wù)器。它是通過meta-mender層支持Yocto。服務(wù)器可以充當部署和構(gòu)建管理器,但也可包含設(shè)備管理控制臺。

  • Digi International Remote Manager [5], (在 MPLv2 許可下)

Digi 遠程管理器有一個基于云的專屬服務(wù)器和一個開源客戶端。 它通過 meta-digi 層在 Yocto 得到了支持。 服務(wù)器可以充當部署和構(gòu)建管理器, 還包含一個設(shè)備管理控制臺, 該控制臺具有設(shè)備報告和監(jiān)控功能。

  • Eclipse HawkBit [2](在Eclipse公共許可下)

Eclipse HawkBit 是一個 Eclipse公共許可證服務(wù)器, 同時充當部署和構(gòu)建管理器, 以及具有設(shè)備報告和監(jiān)視功能。

全量更新的問題通常是尺寸較大, 可能會導(dǎo)致資源的受限, 尤其是設(shè)備端帶寬的限制, 如蜂窩網(wǎng)絡(luò)。 差分驚喜固件更新是一個很好的妥協(xié), 只傳輸前一版本的查分數(shù)據(jù)。

容器式更新

使用容器化程序簡化了軟件更新的用例, 應(yīng)用程序可以單獨更新。

容器更新是建立在一個不可變的分發(fā)上(可能是只讀文件系統(tǒng)) , 其應(yīng)用程序只存在于容器升級的容器中。

一些使用基于容器的固件更新的開源項目的例子有:

  • Resin.io [6]

resin.io基于Docker的專有OTA更新服務(wù)器,遵從Apache 2 的許可,包括服務(wù)器和客戶端。它是通過meta-resin層來支持Yocto的。

  • Ubuntu “Snappy” Core [7] 

Ubuntu Core 是一個基于 Ubuntu 的最小化操作系統(tǒng), 它提供了與docker類的應(yīng)用程序。

還有新的 OS 設(shè)計來支持 Docker 應(yīng)用程序, 這些應(yīng)用程序最終可能用于嵌入式空間, 如 CoreOS[8] 和 Project Atomic 9。

[[227537]]

增量二進制原子化OS更新

在嵌入式領(lǐng)域中,一個即將到來的趨勢是對每個文件的原子化增量更新, 可以快速部署或回滾, 同時保持完整的部署歷史。

一些開源項目:

  • libOSTree [10] 

libOSTree 由一個庫和命令行工具組成, 定義為"操作系統(tǒng)二進制文件的 Git"。 它使用類似 git 的對象來存儲和部署 OS 查分包, 每個都有一個持久的數(shù)據(jù)副本。 對于使用它的 Yocto, 有一個 meta-updater 層,也被用于類似于 Atomic 的OS更新。

  • swupd [11] 

swupd 最初是 ClearLinux 的一部分, 由英特爾贊助。 它非常類似于 libOSTree, 在 Yocto 通過 meta-swupd 層提供支持。

[[227538]]

選擇范圍

隨著物聯(lián)網(wǎng)設(shè)備的出現(xiàn), 不僅固件更新是必要的, 而且新產(chǎn)品開發(fā)同樣必要。 固件更新策略的選擇需要盡早考慮, 因為這將影響到未來的產(chǎn)品設(shè)計決策。 與所有早期的決定一樣, 錯誤的選擇會給發(fā)展帶來沉重的負擔。

那些時間與市場緊密相連的項目可能會傾向于更傳統(tǒng)的、經(jīng)過測試的、完整的固件更新策略。 這些包括通過 Yocto Project 的 meta-swupdate 層提供的各種技術(shù), 以及像 Digi International 的 Remote Manager 這樣的為企業(yè)準備的 OTA 更新方案。

然而, 在新涌現(xiàn)的邊緣項目可以通過類似容器設(shè)計,來擴展整個系統(tǒng)固件的更新方法, 使應(yīng)用程序能夠從系統(tǒng)更新中分離出來。

References:

[1] "SWUpdate: Software update for embedded system." SWUpdate: software update for embedded system — Embedded Software Update Documentation 2017.07 documentation. Accessed September 14, 2017. https://sbabic.github.io/swupdate/swupdate.html.

[2] Beaton, Wayne. "Eclipse hawkBit." Projects.eclipse.org. October 20, 2016. Accessed September 14, 2017. https://projects.eclipse.org/projects/iot.hawkbit.

[3] "Safe and Secure Updating!" Safe and secure embedded Linux updates | RAUC. Accessed September 14, 2017. http://rauc.io/.

[4] "Over-the-air software updates for embedded Linux devices." Open source OTA software updates for embedded Linux | Mender. Accessed September 14, 2017. https://mender.io/.

[5] "Digi Remote Manager?." Monitor and Manage Remote Connected Devices - Digi International. Accessed September 14, 2017. https://www.digi.com/products/cloud/digi-remote-manager.

[6] "Embedded software deployment done right." Home | Resin.io. Accessed September 14, 2017. https://resin.io/.

[7] Canonical. "Ubuntu Core." Ubuntu Core | Ubuntu. Accessed September 14, 2017. https://www.ubuntu.com/core.

[8] "CoreOS." CoreOS Blog ATOM. Accessed September 14, 2017. https://coreos.com/.

[9] "Building the Next Generation Container OS." Project Atomic. Accessed September 14, 2017. http://www.projectatomic.io/.

[10] OSTree. Accessed September 14, 2017. https://ostree.readthedocs.io/en/latest/.

[11] "Software update." Clear Linux Project. April 25, 2016. Accessed September 14, 2017. https://clearlinux.org/features/software-update.

編譯自http://www.embedded-computing.com/dev-tools-and-os/identifying-secure-firmware-update-mechanisms-for-embedded-linux-devices-and-open-source-options

 【本文來自51CTO專欄作者“老曹”的原創(chuàng)文章,作者微信公眾號:喔家ArchiSelf,id:wrieless-com】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關(guān)推薦

2014-04-28 09:35:19

紅帽開源軟件

2015-05-18 17:09:45

Omaha

2012-06-20 10:28:11

固網(wǎng)寬帶

2010-06-11 12:49:52

openSUSE播放器

2018-11-01 15:26:38

開源軟件安全

2021-09-28 09:24:00

存儲虛擬化存儲虛擬化

2010-02-25 17:23:09

Fedora IT

2023-09-21 00:09:23

2021-09-14 10:09:33

開源MowiSeptentrio

2023-09-12 13:49:35

開源IoT框架

2013-06-24 17:59:16

軟件定義IBM云計算

2012-09-21 09:40:14

開源云軟件OpenStack云計算

2022-11-06 23:17:23

Go語言項目

2021-06-10 10:43:13

Necro惡意軟件漏洞

2022-03-29 09:39:57

開源OSI抗議

2012-02-22 22:11:20

開源Tomcat

2023-01-09 14:30:03

2018-02-28 16:15:00

IOT語義標準開源

2009-12-11 17:49:13

2012-02-28 09:11:09

開源bug
點贊
收藏

51CTO技術(shù)棧公眾號