
傳統上,在選擇用于部署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
(
https://www.yoctoproject.org/)是基于源的發行版,已在許多嵌入式和IoT裝置中使用。它試圖将基于二進制的發行版的好處(例如,将程式包及其依賴項明确分離)與基于源的發行版的好處結合在一起,後者使您可以在進行較小的更改時以顯著的方式更改目标二進制檔案。
Yocto由一系列配方(recipes)組成,每個配方都描述了如何建構系統的一個子產品(例如,庫,守護程式,應用程式等)。然後将這些配方收集到各層中,這些層收集一系列配方并配置應如何一起使用的各個方面,從編譯标志到配方功能,再到有關它們如何顯示在目标上的詳細資訊。每個目标建構都将由這些層中的一些層組成,每個層都在較低層中添加或删除軟體包,或修改其預設行為。這允許多方調整他們自己的二進制映像以影響最終軟體。 是以,如果基礎層使用保守的一組編譯器标志(通常這樣做),則晶片供應商可以添加對其特定晶片模型有利的編譯器标志,而主機闆供應商可以删除其主機闆可能不支援的晶片功能。
對于您的物聯網産品,這實際上意味着您使用已經支援Yocto的主機闆來建構解決方案的努力将是添加或修改配方,以提供基本功能的增值。您還需要具有一個建構和配置管理基礎結構設定,該設定允許您為目标建立映像,盡管在當今的容器世界中,這并不難做。
關于Yocto的更多資訊,請從
這裡 https://www.yoctoproject.org/docs/2.5/overview-manual/overview-manual.html)開始。同樣值得一提的是,在你考慮的物聯網解決方案中,Yocto在任何開發闆上的支援程度如何。
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看來,容器是一個獨立的子產品,通常提供垂直功能,例如資料庫或幾乎不依賴主機作業系統、庫等的網絡服務)。
29-1.jpg](
https://ucc.alicdn.com/pic/developer-ecology/96bfe1d338f14cde93d91e4d05ab739a.jpg)EdgeX Foundry背後的概念為大型IoT裝置(尤其是邊緣裝置)指明了前進的方向,但是要定義更受限制的版本以提供一組良好的基準服務仍有待完成。在這方面已經取得了一些進展,一些服務已從JVM遷移到基于golang的實作,但是在不久的将來,對于基于低端和中端Linux的IoT來說,其覆寫範圍仍然遙不可及。
Foundries.io Microplatform
Foundries.io使用基于Yocto的方法建立了一個Linux平台,以建立闆支撐層,然後在其之上分層一組容器化的微服務。與EdgeX Foundry方法相比,它們的容器集更小,更适中,而且占用可見更小。
雖然可以通過訂閱完全通路Foundries.io産品并進行自動更新和管理,但底層平台是開源的,并且是可用的。
小結
基于Linux的IoT正在從傳統的嵌入式模型開始遷移,在傳統的嵌入式模型中,将完整的垂直解決方案從單個團隊/worldwiew/toolchain/model建立到更靈活的模型,其中固件,電路闆,中間件和應用程式元件的分離程度更高。 但是,這種遷移并非沒有代價,并且對CPU,記憶體和磁盤的要求也更高。 為了為您的下一個物聯網項目選擇Linux基準,您需要考慮您可以負擔的占用空間和産品壽命。體積更小,更換速度更快的産品最好與Yocto等當今久經考驗的真正解決方案保持一緻。能夠提供更多資源并需要将新功能部署到已部署産品中的産品應考慮使用更主流的Linux發行版和以容器為中心的新解決方案作為前進的道路。
原文連結