IoT中的Linux选择

物联网设备的Linux选择
本文探讨了物联网设备设计中Linux发行版的选择,对比了基于二进制和基于源代码的发行版,分析了Yocto、Debian和EdgeXFoundry等发行版的特点,以及它们在物联网领域的适用性。

在物联网的设备设计中,从低成本和低功耗的角度看,Android肯定比不过嵌入式Linux。但在选择用于部署Linux的发行版本时,却一直饱受困扰。

640?wx_fmt=jpeg

什么是 Linux 发行版?

Linux 是一个操作系统,它是控制计算机的核心程序。 它决定如何在所有竞争使用的其他程序之间分配可用资源(CPU、内存、磁盘、网络)。 尽管操作系统非常重要,但它本身并不有用。 它的目的是为其他程序管理计算资源。 没有这些程序,操作系统就没有多大用处。

这就是为什么发行版会有的问题。 一个发行版提供了大量的其他程序,这些程序可以与 Linux 一起组装成用于大量目的的工作集。 这些程序的范围可以从基本的程序编写工具,如编译器和连接器的通信库,到电子表格和编辑器之间的几乎所有东西。 一种倾向于拥有一个超级集合,其中包含了每个单独的计算机或解决方案实际使用的内容。 它还为每一类软件组件提供了许多选择,用户或公司可以将这些组件组装成他们认为的运行集。 一个粗略的比喻是一个超市,在那里货架上有许多商品可供选择,每个用户选择他们认为有意义的商品。

640?wx_fmt=jpeg

基于二进制还是基于源代码的发行版?

发行版大体上可以分为两类: 二进制和基于源代码的发布。

基于二进制的发行版提供了所有已经预先编译并准备安装的软件组件。 这些组件使用"足够好"的构建选项进行编译,这些选项对大多数用户都有效。 它们还为需要或希望编制自己的组件的少数用户提供这些组件的来源。 按照我们超市的类比,这家超市包含所有预包装和预煮好的食物,但是有明确的说明如何获得配料和重复的过程,为那些想要调整一个或两个食谱。 这种发行版是 Debian、 Fedora Core、 OpenSUSE、 Ubuntu 和许多其他发行版的例子。 虽然它们提供相同类型的系统,但是它们都使用不同的方法,不幸的是,这些方法甚至是不兼容的。 它们是通用计算机,如服务器、台式机和笔记本电脑的主要配置。

另一方面,基于源代码的发行版侧重于提供一个框架,在这个框架中,最终用户可以从源代码构建所有组件本身。 这些发行版还提供了一些工具,可以轻松地选择一个合理的开始组件集合,并根据需要调整每个组件的构建。 这些调整可以简单到添加一个编译标志来使用不同版本的源代码,或者以某种方式修改源代码。 用户将收集他们想要构建的内容的菜单,然后开始构建。 在几分钟或几小时后,根据具体情况,将有一个结果镜像,可以使用在电脑中使用这一。 Gentoo、安卓和 Yocto 就是这种类型的例子。 在超市的类比中,这是一个更接近散装食品商店,在那里可以得到预先衡量的食物与详细的机器可读的烹饪说明,会有一个花哨的炊具,可以读取这些说明, 并处理一系列食谱的调整,如调整为糙米而不是白米。 这个类比稍微弱了一点。

这些基于源代码的发行版通常是基于 linux 的嵌入式设备和物联网设备的首选。 虽然很难建立和维护,但基于源代码的发行版有一个独特的优势,即能够根据确切的目标硬件裁剪已安装的镜像,以便最大限度地利用资源或最小化资源浪费。 而对于嵌入式设备,这往往是一个强大的约束。 此外,基于源代码的发行版更适合于跨平台构建(在这里构建平台的机器与运行平台的机器不同) ,而基于二进制的发行版更适合于自主构建(在同一台机器上构建和运行)。

鉴于目前英特尔(Intel)架构的流行程度,以及在物联网产品中使用的ARM 架构——交叉构建支持对物联网设备非常重要。

640?wx_fmt=jpeg

以容器为中心的发行版

传统的 Linux 方法是运行一个单个统一的用户空间,包含了内核之外的所有平台,这种方式正在发生变化。 这个新模型是关于拥有一个"容器"集合,使用户空间成为组件。 容器化模型将用户空间的一部分转换为每个组件之间高度独立性的组件集合。

容器化装载带来了许多好处,从而允许团队更加独立地实现粒状平台升级的可行性。 不利的一面是,它们比非容器化的解决方案有更大的资源占用。 然而,如果技术的发展展示了什么,那就是当一项新技术唯一的缺点是尺寸大小时,那它所拥有的资源往往会扩大。

下面将描述一些早期的选项,以便与现有的发行版进行比较。

物联网 Linux 发行版

浏览一下有争议的领域。 许多人都有自己喜欢的 Linux 发行版,即使他们的需求发生了巨大的变化(例如从服务器设置到嵌入式 IoT 设备) ,他们仍然坚持这种方式,就像把一个方形的钉子装进一个圆形的洞里。

下面是一些已经建立的 Linux 发行版和一些新兴的 Linux 发行版。 还有许多其他用例,可能更适合某些用例。

640?wx_fmt=jpeg

Yocto

Yocto 是一个基于源代码的发行版,用于许多嵌入式和物联网设备。 它试图将基于二进制发行版的好处结合在一起,例如将包和它们的依赖关系清晰地分离出来,同时利用基于源代码的发行的好处,当做出较小的修改时,可以在很大程度上改变目标二进制文件。

Yocto 由一系列配方组成,每个配方都描述了如何构建系统的一个模块(例如库、守护程序、应用程序等)。 然后被分层收集,并配置它们应该如何一起使用的各个方面,从编译标记到功能特性,再到它们如何显示的详细信息。 每个目标构建将由几个这样的层组成,每个层从较低的层添加或删除包,或者修改它们的默认行为。 这允许多方调整自己的分层来影响最终的镜像。 因此,如果基本层使用一组编译器标志(通常是这样) ,芯片供应商可以添加有利于特定芯片模型的编译器标志,而电路板供应商可以删除他们的电路板可能不支持的芯片功能。

对于物联网产品而言,这实际意味着使用已经支持 Yocto 的板子来构建一个解决方案的努力将是添加或修改基本功能之上的附加值。 虽然在当今的容器世界中这并不太难做到,但还是需要建立一个允许为目标创建镜像的构建和组态管理 / 值基础设施设置。

 同样值得一看的是,Yocto 在开发项目上的支持程度,进而考虑物联网的解决方案。

640?wx_fmt=jpeg

Debian

Debian 是一个受人尊敬的基于二进制的开源发行版。 它既是发行版,也是其他知名衍生发行版(其中最著名的是 Ubuntu)的基线。

Debian 拥有大量已经预先为 ARM (物联网的选择架构)构建的软件包,但是这些软件包的 ARM 二进制文件的支持和维护水平往往远远低于英特尔的同类产品。 因此,"10,000 + 包"等度量标准并不是那么有意,需要了解那些对用户来说很重要的软件包以及它们的支持程度。

在自主安装使用的许多发行版(例如 Debian)中的一个缺点是,开发人员不理解或者不记得最终运行在机器上的包可能无法完成安装,因此他们不能依赖于目标机器的任何功能。 考虑到这种麻烦对于 docker 环境来说也是一个头疼的问题,发行版已经花费了很大的精力来清理这些依赖项,所以这个问题比以前要小。

为一小组软件集建立一个构建环境的努力是微不足道的,但是为系统构建所有软件包的基础结构可能会变得非常重要。

正因为如此,Debian 对 IoT 来说是一个不错的选择,在这种情况下,只需要添加或创建一些软件包来完成您的平台。

640?wx_fmt=jpeg

EdgeX Foundry

在严格意义上,EdgeX Foundry 并不是一个发行版,因为它对发行版中的 BSP组成部分没有任何关注。 BSP是包含 Linux 内核本身的部分,设备驱动程序和库使硬件平台成为可能。 它从一个层面开始,需要一个工作的 Linux 系统和 docker 的支持作为底层基础。 它提供了各种各样的容器,为物联网设备提供丰富的中间件和垂直设备,特别是边缘设备中(在 docker parlance 中,容器是一个独立的模块,通常提供一个垂直的功能,如数据库或 web 服务,几乎没有或根本不依赖主机操作系统、库等)。

Edgex 背后的概念为更大的物联网设备,特别是为边缘设备指明了前进的方向,但是还需要做的工作是定义一个更有约束的版本,提供一套良好的基线服务。 在这方面已经取得了进展,一些服务从 JVM 转移到了 golang 为基础的实现,但是基于 Linux 的中低端物联网在不久的将来仍然是遥不可及的。

640?wx_fmt=jpeg

Foundries.io Microplatform

这种方案使用基于 Yocto 的方法创建了一个 Linux 平台,创建了一个板级支持层,然后在上面叠加一套集装箱式的微服务。 他们的集装箱是一个比 EdgeX Foundry 方法更小、更适中的集合,足迹更小。

虽然可以通过订阅使用自动更新和管理的完全访问 Foundries.io 产品,底层平台是开源的。

640?wx_fmt=jpeg

结论

基于 linux 的物联网正在从传统的嵌入式模型向更加灵活的模型转变,从单一的团队 / 工具链 / 模型转变为更加灵活的固件、中间件和应用组件的分离。 然而,这种迁移不是没有成本的,并且对 CPU、内存和磁盘需求提出了更高的要求。 为了一个物联网项目选择一个 Linux 基准,需要考虑自己能承受的尺寸大小和产品规划的寿命。 更小、更快速的替换产品最好能够紧跟当今可靠的解决方案,比如 Yocto。 为了能够提供更多资源并且需要将新特性作为一种需求推广到已部署产品的产品,应该将更主流的 Linux 发行版和新的以容器为中心的解决方案作为前进的路径。

 

<think>好的,我现在需要回答用户关于嵌入式IoT设备上使用的Linux系统及其配置方法的问题。首先,用户提到了参考的两篇引用,我需要结合这些信息来构建回答。引用1提到Linux在嵌入式开发中的优势,包括开源、稳定、高性能等,而引用2则涉及在嵌入式设备上编译zlib,可能涉及交叉编译和工具链的使用。 首先,我需要确定用户的需求:他们可能是在开发IoT设备,想要了解应该选择哪种Linux系统,以及如何配置。常见的嵌入式Linux系统包括Buildroot、Yocto、OpenWrt等,这些都需要提到。然后,配置方法可能包括交叉编译工具链的设置、内核裁剪、文件系统构建、驱动开发等步骤。 接下来,我应该考虑用户可能的背景。他们可能对嵌入式开发有一定了解,但需要具体的指导步骤。因此,回答需要结构清晰,分步骤说明,同时结合示例或实际操作方法,比如如何用Buildroot构建系统,如何交叉编译zlib这样的库,如引用2中提到的。 还要注意用户提到的配置方法,可能需要解释为什么需要交叉编译,以及如何设置工具链。此外,驱动开发和系统优化也是关键点,比如如何根据硬件调整内核配置,如何优化启动时间等。 另外,用户可能需要了解应用场景,比如智能家居或工业物联网,所以回答中可以举例说明不同场景下的系统选择,比如OpenWrt适合网络设备。同时,需要提到测试和部署的步骤,确保系统稳定运行。 最后,生成相关问题,帮助用户进一步探索,比如如何选择适合的Linux发行版,或如何进行内核调试。这些问题需要与用户的需求紧密相关,引导他们深入学习。</think>### 嵌入式IoT设备上的Linux系统及配置方法 嵌入式IoT设备通常需要轻量级、高定制化的操作系统。Linux因其开源、稳定、可裁剪等特性成为首选。以下是常见系统及配置方法: --- #### 一、常用嵌入式Linux系统 1. **Buildroot** - **特点**:快速生成根文件系统,集成交叉编译工具链,适合资源有限的设备。 - **应用场景**:智能家居传感器、低功耗终端设备[^1]。 - **配置示例**: ```bash # 下载并配置Buildroot git clone https://github.com/buildroot/buildroot make menuconfig # 选择目标架构(如ARM)、内核版本、软件包(如zlib[^2]) make ``` 2. **Yocto Project** - **特点**:高度模块化,支持自定义发行版,适合复杂IoT设备(如工业网关)。 - **核心命令**: ```bash bitbake core-image-minimal # 生成最小化系统镜像 ``` 3. **OpenWrt** - **特点**:专为网络设备优化,内置包管理器`opkg`,适合路由器、边缘计算节点。 --- #### 二、配置步骤详解 1. **交叉编译工具链设置** - 从芯片厂商(如ARM、RISC-V)获取工具链,或通过Buildroot自动生成。 - **示例**(为ARM编译zlib[^2]): ```bash export CC=arm-linux-gnueabihf-gcc ./configure --prefix=/opt/zlib-arm make && make install ``` 2. **内核裁剪与驱动开发** - 使用`make menuconfig`移除无用模块(如GUI、冗余驱动)。 - 添加设备树(Device Tree)描述硬件外设(如GPIO、SPI)。 3. **根文件系统构建** - 使用BusyBox集成基础命令,通过Buildroot/Yocto添加必要库(如加密库)。 4. **系统优化** - **启动加速**:禁用非必要服务,使用`systemd-analyze`分析启动时间。 - **功耗管理**:配置CPU频率调节策略(如`cpufreq`)。 --- #### 三、典型应用场景 - **智能家居**:OpenWrt + MQTT协议实现设备通信。 - **工业物联网**:Yocto定制RT(实时)内核,满足毫秒级响应。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值