用於物聯網設備的Linux發行版

用於物聯網設備的Linux發行版

傳統上,在選擇用於部署Linux的發行版時,面臨著很多麻煩。

什麼是Linux發行版(Linux Distribution)

Linux是一個操作系統:該程序是控制計算機的核心。它決定如何在爭奪它的所有其他程序之間劃分可用資源(CPU,內存,磁盤,網絡)。操作系統雖然非常重要,但它本身並沒有用。其目的是管理其他程序的計算資源。沒有這些其他程序,操作系統就無法實現很多目的。

這就是發行版的來源。發行版提供了許多其他程序,這些程序與Linux一起可以組裝到工作集中用於多種用途。這些程序的範圍從基本的程序編寫工具(例如編譯器和鏈接器,到通信庫,再到電子表格和編輯器),到介於兩者之間的幾乎所有內容。發行版往往具有每個計算機或解決方案實際使用的超集。它還為用戶或公司可以組合成他們認為是工作集的每種軟件組件類別提供了許多選擇。可以粗略地比喻為一家超市,在超市中貨架上有很多物品可供選擇,每個用戶都可以從購物車中選擇對他們有意義的物品。

基於二進制的分發還是基於源的分發

分發可以大致分為兩類:基於二進制的和基於源的。

基於二進制的發行版提供了所有已經預編譯並準備安裝的軟件組件。這些組件使用“足夠好”的構建選項進行編譯,這些選項對於大多數用戶來說都可以正常工作。它們也確實為少數需要或想要編譯自己的組件的用戶提供了這些組件的資源。Debian,Fedora Core,OpenSUSE,Ubuntu和其他許多版本都體現了這種發行方式。儘管它們提供相同類型的系統,但它們都使用不同的方法(不幸的是,不兼容)來這樣做。它們是服務器,臺式機和筆記本電腦等通用計算機中使用的主要分發方式。

另一方面,基於源代碼的發行版側重於提供一個框架,在這個框架中,最終用戶可以從源代碼構建所有組件。這些發行版還提供了一些工具,可以方便地選擇組件的合理起始集合,並根據需要調整每個組件的構建。這些調整可以簡單到添加編譯標誌以使用不同版本的源或以某種方式修改源。用戶將組裝一個他們想要構建的菜單,然後開始構建。幾分鐘或幾小時後,視情況而定,他們將得到一個系統軟件,可以用於他們的計算機。這種發行版的例子有Gentoo、Android和Yocto。

通常,這些基於源的發行版通常對於嵌入式基於Linux的設備尤其是IoT設備是首選。 儘管它們難以設置和維護,但基於源的發行版具有獨特的優勢,即能夠根據實際的目標硬件定製已安裝的映像,以最大程度地利用資源或最大程度地減少資源浪費。 對於嵌入式設備而言,這往往是一個強大的約束。 此外,基於源代碼的發行版更適合交叉構建(在該平臺上,構建平臺的計算機與在其上運行的計算機不同),而基於二進制的發行版則更適合於自託管構建。 您在同一臺機器(或同一體系結構)上構建並運行。

鑑於當今普遍存在使用英特爾架構機器作為構建機器以及將ARM體系結構用於IoT產品的情況,跨構建支持對於IoT設備至關重要。

以容器為中心的發行版

傳統的Linux方法只提供內核外部所有平臺的單個統一用戶空間。新模型是關於將用戶空間組成一個“容器(containers)”的集合。容器化模型將用戶空間的一部分轉換為組件的聯合集合,每個組件之間具有高度獨立性。

容器化的linux發行版帶來了許多好處,從允許團隊更加獨立地工作到使進行細粒度平臺升級成為可能。缺點是它們比非容器化解決方案佔用的空間更大。然而,如果說技術的發展給我們帶來了什麼啟示的話,那就是當一項新技術的唯一缺點是它的佔用空間時,其可用資源往往會擴大,從而使每一代新問題都變得越來越小。

下面將介紹一些早期的選項,以便與現有的發行版進行比較。

物聯網的Linux發行版

現在,我們必須深入探討有爭議的領域。許多人擁有自己喜歡的Linux發行版,即使他們的需求發生了巨大變化(例如,從服務器設置更改為嵌入式IoT設備),他們仍然堅持使用該發行版。

我將在下面的列表中開始介紹:這是一些成熟的Linux發行版和一些後起之秀的示例。還有許多其他的存在,可能更適合一些用例。

Yocto

Yocto(https://www.yoctoproject.org/)是基於源的發行版,已在許多嵌入式和IoT設備中使用。它試圖將基於二進制的發行版的好處(例如,將程序包及其依賴項明確分離)與基於源的發行版的好處結合在一起,後者使您可以在進行較小的更改時以顯著的方式更改目標二進制文件。

用於物聯網設備的Linux發行版

Yocto由一系列配方(recipes)組成,每個配方都描述瞭如何構建系統的一個模塊(例如,庫,守護程序,應用程序等)。然後將這些配方收集到各層中,這些層收集一系列配方並配置應如何一起使用的各個方面,從編譯標誌到配方功能,再到有關它們如何顯示在目標上的詳細信息。每個目標構建都將由這些層中的一些層組成,每個層都在較低層中添加或刪除軟件包,或修改其默認行為。這允許多方調整他們自己的二進制映像以影響最終軟件。 因此,如果基礎層使用保守的一組編譯器標誌(通常這樣做),則芯片供應商可以添加對其特定芯片模型有利的編譯器標誌,而主板供應商可以刪除其主板可能不支持的芯片功能。

對於您的物聯網產品,這實際上意味著您使用已經支持Yocto的主板來構建解決方案的努力將是添加或修改配方,以提供基本功能的增值。您還需要具有一個構建和配置管理基礎結構設置,該設置允許您為目標創建映像,儘管在當今的容器世界中,這並不難做。

關於Yocto的更多信息,請從這裡(https://www.yoctoproject.org/docs/2.5/overview-manual/overview-manual.html)開始。同樣值得一提的是,在你考慮的物聯網解決方案中,Yocto在任何開發板上的支持程度如何。

Debian

Debian(https://www.debian.org/)是一種古老的開源二進制發行版。它既是自身的發行版,也是其他知名衍生版本的基準,其中最著名的是Ubuntu(https://www.ubuntu.com/)。

Debian擁有大量為ARM(IoT的首選體系結構)預先構建的軟件包,但考慮到Debian在英特爾生態系統中的優勢,這些軟件包對ARM二進制文件的支持和維護水平往往遠低於英特爾的同類產品。因此,諸如“10000多個構建的包”這樣的指標並沒有那麼有意義。您需要了解對您很重要的包以及它們的支持程度。

在自託管設置(例如Debian)中使用的許多發行版的一個缺點是,開發人員不理解或不記得包的安裝可能不會在最終運行包的計算機上完成,因此他們不能依賴目標可用的任何功能。考慮到這種麻煩對於docker環境來說也是一個頭疼的問題,發行版在清理這些依賴關係方面花費了大量精力,所以這是一個比以前更小的問題。

為少量軟件包設置構建環境的工作相當瑣碎,但是為系統構建所有軟件包的基礎架構可能會變得很重要。

由於這些原因,IoT的Debian是一個不錯的選擇,在這種情況下,您只需添加或創建一些軟件包即可完成您的平臺。

EdgeX Foundry

從嚴格意義上講,EdgeX Foundry並不完全是一個發行版,因為它對發行版的BSP組件沒有任何意見。BSP是包含Linux內核本身,設備驅動程序和用於啟用硬件平臺的庫的部分。它從一個更高的級別開始,需要一個以docker支持為基礎的可運行Linux系統。從那裡開始,它提供了各種各樣的容器,這些容器為IoT設備(尤其是邊緣設備)提供了豐富的中間件和垂直集(在docker看來,容器是一個獨立的模塊,通常提供垂直功能,例如數據庫或幾乎不依賴主機操作系統、庫等的網絡服務)。

用於物聯網設備的Linux發行版

EdgeX Foundry背後的概念為大型IoT設備(尤其是邊緣設備)指明瞭前進的方向,但是要定義更受約束的版本以提供一組良好的基準服務仍有待完成。在這方面已經取得了一些進展,一些服務已從JVM遷移到基於golang的實現,但是在不久的將來,對於基於低端和中端Linux的IoT來說,其覆蓋範圍仍然遙不可及。

Foundries.io Microplatform

用於物聯網設備的Linux發行版

Foundries.io使用基於Yocto的方法創建了一個Linux平臺,以創建板支撐層,然後在其之上分層一組容器化的微服務。與EdgeX Foundry方法相比,它們的容器集更小,更適中,而且佔用可見更小。

雖然可以通過訂閱完全訪問Foundries.io產品並進行自動更新和管理,但底層平臺是開源的,並且是可用的。

小結

基於Linux的IoT正在從傳統的嵌入式模型開始遷移,在傳統的嵌入式模型中,將完整的垂直解決方案從單個團隊/worldwiew/toolchain/model創建到更靈活的模型,其中固件,電路板,中間件和應用程序組件的分離程度更高。 但是,這種遷移並非沒有代價,並且對CPU,內存和磁盤的要求也更高。 為了為您的下一個物聯網項目選擇Linux基準,您需要考慮您可以負擔的佔用空間和產品壽命。體積更小,更換速度更快的產品最好與Yocto等當今久經考驗的真正解決方案保持一致。能夠提供更多資源並需要將新功能部署到已部署產品中的產品應考慮使用更主流的Linux發行版和以容器為中心的新解決方案作為前進的道路。


分享到:


相關文章: