許多使用容器等云技術的嵌入式開發(fā)人員將物聯(lián)網(wǎng)和嵌入式Linux設備視為他們目前工作環(huán)境的擴展。但現(xiàn)實是,為嵌入式Linux設備開發(fā)和維護應用程序帶來了一系列獨特的挑戰(zhàn)和工作流程。此外,由于各種原因,一些創(chuàng)建新物聯(lián)網(wǎng)產(chǎn)品的嵌入式工程師沒有采用容器等現(xiàn)代工具及其實踐。
我們將討論工程師今天使用的典型嵌入式Linux構建工作流和流程。
軟件開發(fā)更為復雜
毫無疑問,軟件開發(fā),特別是云計算,多年來變得更加復雜,同樣的復雜程度也適用于物聯(lián)網(wǎng)和嵌入式Linux系統(tǒng)。目前的Raspberry
Pi和Nvidia板就是一個很好的例子。這些都是片上系統(tǒng)(SOC)的例子,它提供了許多具有創(chuàng)新功能的資源,使開發(fā)和管理應用程序和其他系統(tǒng)變得更加復雜。
云開發(fā)人員所需的技能范圍廣泛多樣,無論是從單個開發(fā)人員的角度還是整個團隊的角度來看,云開發(fā)人員需要協(xié)調(diào)許多不同的系統(tǒng),從Git之類的源代碼管理存儲庫到Kubernetes之類的自動化持續(xù)集成和部署管道以及編排系統(tǒng)。盡管如此,在將應用程序部署到云端之前,開發(fā)應用程序還需要掌握各種語言、框架和存儲系統(tǒng)。
嵌入式工程師和硬件
嵌入式工程師有管理硬件的額外要求,與云不同的是,云幾乎有無限的資源,他們必須評估每個板的功能和限制。
嵌入式Linux產(chǎn)品也傾向于在市場上存在很長時間,有時長達10年,因此,另外一個關鍵考慮因素是軟件和固件必須可靠且易于更新。大多數(shù)設備都是連接的,就像裸機服務器一樣,是物聯(lián)網(wǎng)基礎設施的基本組件。嵌入式開發(fā)工程師最不想考慮的是可能導致整個網(wǎng)絡或生態(tài)系統(tǒng)崩潰的關鍵軟件缺陷。
嵌入式工程需要采用現(xiàn)代云技術
通過采用容器及其實踐等現(xiàn)代云技術,可以滿足許多嵌入式特定需求。但是,采用容器也有許多其他好處,可以幫助嵌入式工程團隊,例如加快從概念驗證原型到生產(chǎn)準備的周轉時間,提高開發(fā)速度。
從概念驗證到生產(chǎn)準備
在處理新的和復雜的框架和庫時,嵌入式工程師必須保持高效和領先。例如,工程師需要快速構建和迭代概念驗證或可以與客戶一起評估和測試的產(chǎn)品原型,以快速確定它是否是一個可以構建并推向市場的可行產(chǎn)品。
上市速度
隨著原型的測試和批準,你需要做好準備并盡快將其投入市場。如果測試成功,你將希望在市場上率先推出新一代產(chǎn)品,有望領先于你的競爭對手。
生命周期管理的長期前景
嵌入式Linux設備需要長期維護。我們需要的是一種可靠的方法來安全地更新和維護設備。對于嵌入式系統(tǒng),你需要一個一致的電源和一種簡單的方法,以便在出現(xiàn)問題時返回或前進到良好狀態(tài),而不是以磚塊設備結束。
構建沒有容器的嵌入式Linux系統(tǒng)
多年來,構建嵌入式Linux系統(tǒng)幾乎沒有什么變化。盡管存在Buildroot和Yocto等特定于嵌入式系統(tǒng)的發(fā)行版,但圍繞嵌入式系統(tǒng)設計和體系結構的嵌入式開發(fā)方法和實踐與20年前類似。
傳統(tǒng)上,嵌入式團隊有一個緩慢的發(fā)布周期,每幾個月甚至每年發(fā)布一次monolith版本,將每個小的更改都包含在一個大的版本中。這種類型的釋放可能適用于封閉設備。但是,如果你的設備連接到互聯(lián)網(wǎng)中,該怎么辦?如果是這種情況,則需要快速交付其中一些更改和更新。
單映像單片部署
下面是嵌入式Linux工程師在創(chuàng)建嵌入式系統(tǒng)時將開始的傳統(tǒng)工作流程。編譯和調(diào)試后,結果是一個單獨的映像部署到板上。
組裝和自定義板支持包以及Linux內(nèi)核庫和模塊后,需要決定應用程序使用的框架和庫。然后,整個系統(tǒng)通過Yocto或Buildroot以層或“配方”的形式構建。當然,這并不像聽起來那么簡單,而且當使用特定的工具鏈進行交叉編譯時,常常會出現(xiàn)需要調(diào)試的依賴沖突。但是,一旦完成,最終的結果是將單個單片映像部署到設備上。
單個映像部署的優(yōu)缺點
單個映像的一個優(yōu)點是可以對其進行優(yōu)化,使其在設備上運行得更快。但缺點是,如果你有關鍵補丁、新功能或任何其他類型的更新,則必須重復整個嵌入式開發(fā)過程,這可能會很耗時。