当前位置: 首页 > 科技观察

用于物联网设备的Linux发行版

时间:2023-03-18 22:25:04 科技观察

传统上,选择用于部署Linux的发行版面临着许多令人头疼的问题。什么是Linux发行版?Linux是一个操作系统:控制计算机心脏的程序。它决定如何在竞争它的所有其他程序之间分配可用资源(CPU、内存、磁盘、网络)。操作系统虽然非常重要,但它本身是无用的。它的目的是管理其他程序的计算资源。没有这些其他程序,操作系统就无法满足许多目的。这就是发行版的用武之地。发行版提供了许多其他程序,连同Linux,可以出于各种目的组装到工作集中。这些程序的范围从基本的程序编写工具(如编译器和链接器)到通信库、电子表格和编辑器,以及介于两者之间的几乎所有东西。发行版往往具有每台计算机或解决方案实际使用的超集。它还为用户或公司可以将其组合到他们认为的工作集中的软件组件的每个类别提供了许多选择。大致可以类比超市,货架上有很多商品可供选择,每个用户都可以从购物车中选择对自己有意义的商品。基于二进制还是基于源代码的发行版?发行版大致可以分为两类:基于二进制的和基于源代码的。基于二进制的发行版提供了所有预编译和准备安装的软件组件。这些组件是使用“足够好”的构建选项编译的,这些选项对于大多数用户来说应该可以正常工作。他们也确实为那些需要或想要自己编译的少数用户提供了这些组件的资源。Debian、FedoraCore、OpenSUSE、Ubuntu和许多其他软件都是这种发行版的范例。尽管它们提供相同类型的系统,但它们都使用不同的(不幸的是,不兼容的)方法来实现。它们是服务器、台式机和笔记本电脑等通用计算机中使用的主要分发方法。另一方面,基于源代码的发行版专注于提供一个框架,最终用户可以在该框架内从源代码构建所有组件。这些发行版还提供了一些工具,可以轻松地选择一组合理的起始组件并根据需要调整每个组件的构建。这些调整可以像添加编译标志以使用不同版本的源代码或以某种方式修改源代码一样简单。用户将组装他们想要构建的菜单,然后开始构建。几分钟或几小时后,视情况而定,他们将拥有一个可以在他们的计算机上使用的系统软件。此类发行版的示例包括Gentoo、Android和Yocto。通常,这些基于源代码的发行版通常是基于Linux的嵌入式设备(尤其是物联网设备)的首选。虽然它们很难设置和维护,但基于源代码的发行版具有独特的优势,即能够根据实际目标硬件定制安装的映像,以最大限度地利用资源或最大限度地减少资源浪费。对于嵌入式设备,这通常是一个很强的约束。此外,基于源代码的发行版更适合交叉构建(构建平台的机器与运行它的机器不同),而基于二进制的发行版更适合自托管构建。您在同一台机器(或同一架构)上构建和运行。鉴于当今普遍使用Intel架构机器作为构建机器以及将ARM架构用于IoT产品,交叉构建支持对于IoT设备至关重要。以容器为中心的发行版传统的Linux方法只为内核之外的所有平台提供一个统一的用户空间。新模型是关于将用户空间分组为“容器”的集合。容器化模型将用户空间的一部分转换为组件的联合集合,每个组件彼此之间具有高度的独立性。容器化Linux发行版带来了许多好处,从允许团队更独立地工作到支持细粒度平台升级。缺点是它们比非容器化解决方案占用更多空间。然而,如果技术的发展教会了我们什么的话,那就是当一项新技术的唯一缺点是它的足迹时,它的可用资源往往会扩大,从而使每一代新人都面临更多问题。变小。下面描述了一些早期选项,以便与现有发行版进行比较。用于物联网的Linux发行版现在,我们必须深入研究有争议的领域。许多人都有一个最喜欢的Linux发行版,即使他们的需求发生巨大变化(例如,从服务器设置到嵌入式IoT设备),他们也会坚持使用该发行版。我将从下面的列表开始:这是一些已建立的Linux发行版和一些后起之秀的示例。许多其他的存在并且可能更适合某些用例。1.YoctoYocto(https://www.yoctoproject.org/)是一种基于源代码的发行版,已在许多嵌入式和物联网设备中使用。它试图将基于二进制的分发的优点(例如包及其依赖项的完全分离)与基于源代码的分发的优点结合起来,这允许您通过更改目标二进制文件的重要方式进行小的更改.Yocto由一系列配方组成,每个配方都描述了如何构建系统的一个模块(例如,库、守护进程、应用程序等)。然后将这些配方收集到层中,这些层收集一系列配方并配置它们应该如何一起使用的各个方面,从编译标志到配方功能再到有关它们如何出现在目标上的详细信息。每个目标构建都将包含其中一些层,每个层都在较低层中添加或删除包,或修改它们的默认行为。这允许多方调整他们自己的二进制图像以影响最终软件。因此,如果基础层使用一组保守的编译器标志(通常如此),芯片供应商可以添加适合其特定芯片型号的编译器标志,而主板供应商可以删除其主板可能不支持的芯片功能。对于您的IoT产品,这实际上意味着您使用已经支持Yocto的电路板构建解决方案的努力将添加或修改配方以为基本功能提供附加值。您还需要有一个构建和配置管理基础设施设置,允许您为您的目标创建图像,尽管在当今的容器世界中,这并不难做到。有关Yocto的更多信息,请从这里开始(https://www.yoctoproject.org/docs/2.5/overview-manual/overview-manual.html)。还值得一提的是Yocto在您考虑用于IoT解决方案的任何开发板上的支持程度。2.DebianDebian(https://www.debian.org/)是一个古老的开源二进制发行版。它既是自己的发行版,也是其他知名衍生产品的基准,最著名的是Ubuntu(https://www.ubuntu.com/)。Debian有大量针对ARM(IoT的首选架构)的预构建包,但鉴于Debian在Intel生态系统中的主导地位,这些包对ARM二进制文件的支持和维护水平往往远低于其Intel同行。所以像“10000+构建的包”这样的指标没有那么有意义。您需要知道哪些包对您很重要,以及它们的支持情况。自托管设置中使用的许多发行版(例如Debian)的一个缺点是开发人员不理解或不记得软件包的安装可能不会在最终运行软件包的机器上完成,因此他们不能依赖目标可用的任何功能。考虑到这个麻烦也是docker环境头疼的问题,distros花了很多精力清理这些依赖项,所以这个问题比以前小了。为少量包设置构建环境相当简单,但是为系统构建所有包的基础设施可能变得很重要。由于这些原因,DebianforIoT是一个不错的选择,在这种情况下,您只需添加或创建几个软件包即可完成您的平台。3.EdgeXFoundry严格来说,EdgeXFoundry不完全是一个发行版,因为它对发行版的BSP组件没有意见。BSP是包含Linux内核本身、设备驱动程序和用于启用硬件平台的库的部分。它从更高的层次开始,需要一个运行中的Linux系统,上面有docker支持。从那里,它提供了各种各样的容器,这些容器为物联网设备提供了丰富的中间件和垂直设备,特别是边缘设备(在docker看来,容器是一个独立的模块,通常提供垂直功能,例如数据库或几乎不依赖于主机操作系统、库等的网络服务)。EdgeXFoundry背后的概念为大规模物联网设备(尤其是边缘设备)指明了前进方向,但定义一个更受限的版本以提供一组良好的基线服务仍有待完成。在这方面已经取得了一些进展,一些服务从JVM迁移到基于golang的实现,但在不久的将来仍然无法覆盖基于Linux的中低端物联网。3.Foundries.ioMicroplatformFoundries.io使用基于Yocto的方法创建了一个Linux平台,以创建板支持层,然后在其上放置一组容器化微服务。与EdgeXFoundry方法相比,他们的容器集更小、更适中,并且占地面积小得多。虽然Foundries.io产品可通过自动更新和管理订阅完全访问,但底层平台是开源且可用的。总结基于Linux的物联网开始从传统的嵌入式模型(完整的垂直解决方案由单个团队/worldwiew/工具链/模型创建)迁移到更灵活的模型,其中固件、板、中间件和应用程序组件之间的分离程度更高。然而,这种迁移并非没有成本,而且对CPU、内存和磁盘的要求也更高。为了为您的下一个物联网项目选择Linux基准,您需要考虑您可以承受的占地面积和产品寿命。更小、变化更快的产品最好与当今久经考验的真实解决方案(如Yocto)保持一致。能够提供更多资源并需要将新功能部署到已部署产品中的产品应该考虑更主流的Linux发行版和新的以容器为中心的解决方案作为前进的方向。