Yocto 还是 Buildroot,构建自定义嵌入式系统时,您会选择哪一种?

在这里插入图片描述

假设您正在采用集成平板开发新一代大型智能微波炉。这个创意不错吧!现在,您需要构建自定义操作系统,在保证不会烧焦食物(更不要烧毁房屋哦)的前提下,辅助管理各项事务。除此之外,您还需要创建一个专门的项目,帮助您实施高效的 Linux 构建,而且,时间必须要快。好消息是:我们有很多不错的项目,都可以帮助您实现目标。但真正的问题是,您应该选择哪一个?

可供选择的方案很多,不过在本文中,我们只重点介绍其中两种最受欢迎的方案:Yocto 和 Buildroot。各个团队出于不同的原因,都希望构建嵌入式系统。对于他们来说,Yocto 和 Buildroot 已经成为他们的首选工具。这两种工具各有不同的优点(和一些缺点),值得我们仔细探讨。因此,让我们深入分析,判断哪一种更适合您。

注意事项

值得注意的是,Yocto 和 Buildroot 本身并不是 Linux 发行版,它们只是帮助开发人员构建基于 Linux 的嵌入式系统(选择 Yocto,您可以构建 Linux 发行版;选择 Buildroot,您可以开发用于构建发行版的根文件系统)。

这是二者之间重要的区别之一,也体现了两个项目之间的差异,以及它们深受喜爱的原因。言归正传,让我们回到原定的主题上来。

首先,介绍一下我们要讨论的对象

让我们深入解析这两种方案及其效果。

Yocto

Yocto 是一种伞式项目,侧重于通过开放式嵌入内核,打造嵌入式系统 Linux 发行版,而不受硬件架构的限制。其中要切记的关键是:Yocto 本身并非发行版,而是帮助您构建发行版的框架。Yocto 已然成为必可不少的首选工具。有了它,开发人员和嵌入式系统制造商可以根据其自身硬件和软件限制以及实际应用程序,度身打造最适合自己的 Linux 版本。

更重要的是,Yocto 内置各种现有工具,拥有大量的开源支持,以灵活多变的特点而闻名。丰富的工具、维护、模板和社区产品,可以帮助您完成各种无与伦比的特殊构建任务。Yocto 有三大关键组件:

  • BitBake —— 实质上就是 Yocto 的构建系统引擎。它负责创建配方,构建特定系统所需的任务列表,以及解析元数据和执行配方。
  • OpenEmbedded-Core —— 元数据,它保存了创建系统所需的基本配方、相关文件和类。构建时设定为通用,以便适用于各种基于 OpenEmbedded 的系统。
  • Poky —— 包含一个基于 Linux 的全平台构建工具和各种其他技术,帮助各大团队以可靠的方式快速地开发新系统。Poky 基于各种架构生成文件系统镜像。其中的典型示例就是 QEMU 全系统仿真,一种极其出色的嵌入式软件测试平台。

Yocto 还支持将其他关键组件(例如 QT、Chromium、LLVM 等)内置到您的嵌入式发行版中,这也是它极受欢迎的原因之一。

Buildroot

Buildroot 是一组生成文件和脚本。在它的帮助下,您可以更轻松地在源代码上构建嵌入式 Linux 发行版。与 Yocto 不同,Buildroot 是一个完整的项目,包含多个层级和工具。它的构建目标就是简单方便。Buildroot 的设计理念就是使用尽可能少的核心 Buildroot 工具,避免操作过于复杂,防止增加构建时间。这样,Buildroot 就易于理解和使用。例如,如果条件允许,Buildroot 构建会反复利用现成的工具,如 kconfig,而不是针对每种自定义发行版创建新的工具。

Buildroot 属于“通用”工具,它可以跨系统广泛使用。这种理念的另一个有趣点就是:Buildroot 会生成根文件系统镜像,而非完整的发行版。也就是说,每当需要更新时,您都需要重新生成整个镜像。嵌入式系统默认不同于桌面或服务器发行版。正是在这样的理念下,项目团队专门设计成如此机制。故障或部分更新都有可能造成灾难性的影响,而从头开始重建镜像,就可以完全避免这种问题。

那么,哪一种方案更好呢?

老实说,这很复杂。究竟哪个更好?在很大程度上还要取决于您的需求以及您计划创建的内容。让我们来深入分析一下,看看究竟应该选择哪一种:

为什么应该选择 Yocto

尽管 Yocto 操作更复杂,但它也有很明显的优势。或许其中最大的优势就是 Yocto 拥有广泛的用户群体和支持,开发社区非常活跃,为其创建了各种新的工具、层级和特性。此外,它由 Linux 基金会出资扶持,因而也更得人心。

Yocto 的另一大好处则是它可以实现层级,用于各种任务,从功能添加,到项目版本中不可用平台的定位等,都可以实现。此外,还可以添加特殊功能,例如自定义浏览器,以便实现 Yocto 本身进一步的功能定制化。

Yocto 获得了多家半导体和电路板生产商的支持,在同类项目中,可以兼容的设备最多。也就是说,除了充满活力的 Yocto 生态系统之外,自定义 Yocto 构建还可以添加大量的 SDK、工具和功能。
正是有了这些要素,Yocto 实现了高度可定制,同时还拥有强劲的支持,可供计划构建嵌入式系统的开发人员使用。

Yocto 的缺点

即便如此,Yocto 也有一些缺点。一方面,入门时的学习曲线稍微有点陡峭。对于时间有限的小型单个项目或小型团队来说,使用这个工具可能根本没有意义。另一方面,众所周知,Yocto 的构建时间很长。这就降低了迭代频率,如用在时间紧迫的项目中,效果可能会不太理想。

为什么应该选择 Buildroot

Buildroot 的构建很简单,从运行方式到输出,都非常简便快捷。它的核心构建系统采用 Make 语言编写而成,语言十分简短,开发人员不需要学习,就能轻松理解。正如上文所述,Buildroot 使用标准的 Makefiles 和 kconfig 进行配置。Makefiles 和 kconfig 是 Linux 内核社区制作的两个工具,它们获得了广泛应用和支持。

Buildroot 要求的“企业”参与度较低,因此它也是开源社区的“宠儿”。这样就会实现更高的可定制性以及更多的能力,从而尽可能开发具有针对性的系统,满足开发团队的需求。

最后,Buildroot 还有一项极其有用的功能,它禁用了可选的构建时间设置,选择以即开即用的方式,创建尽可能小的镜像。这样大幅缩短了构建时间,减少了所需的必要计算资源(不过无法实现更灵活的构建)。对于小型团队或资源有限的团队而言,这可能是一种理想的解决方案。

Buildroot 的缺点

首先必须要讨论的就是它最明显的缺点,缺乏公司支持。尽管对于许多开发人员来说,这可能是一个好处,但其实它也有一些明显的不足。即,社区较小,且生态系统不太活跃。也就是说,它没有那么多的支持。由于许多开发人员更愿意专注研究应用更广泛的工具,因此,如果您遇到问题,您可能必须自己处理或学习如何解决。

Buildroot 的另一个主要缺点是它不支持增量构建。每当您需要进行更新,即使是很小的更新,您都必须从头开始重新制作镜像。这样必定会使开发周期延长,增加不必要的时间。

此外,Buildroot 最大的亮点就是其注重简约,但这也意味着,相比 Yocto,Buildroot 定制和特殊系统搭建会困难得多。

还是没有答案

是的,确实没有答案。事实是,我们没有绝对正确或错误的答案,只有具体实例中哪种更好或更快的情况。如果您要开发一个拥有较多资源的大型项目,且时间也比较充裕,那么选择 Yocto 会更好。它的定制化程度更高,获得的支持也更广泛,同时还更加兼容各种嵌入式设备板和半导体。
如果您只是要开发一个小型项目,希望找到一种快速简便的解决方案来构建嵌入式系统,那么 Buildroot 就很棒。

真正的答案是,在开始之前,您应该了解项目的范围、可用的资源(时间、计算、硬件、团队规模、支持),然后再决定选择哪种工具,才能获得更大的成功。

点击了解嵌入式 C++ 构建加速解决方案,并获取试用 License!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/213898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用BeautifulSoup 4和Pillow合并网页图片到一个PDF:一种高效的方式来处理网页图像

背景 ​ 网页上的培训材料,内容全是PPT页面图片。直接通过浏览器打印,会存在只打印第一页,并且把浏览器上无效信息也打印出来情况。但目标是希望将页面图片全部打印为pdf形式。 实现方案 利用网页“另存为”,将页面内所有图片资…

官宣!「湾区之光群星演唱会」拉开2024新年音乐华丽序幕!

万众期待,群星荟萃!青春宝安时尚湾区——湾区之光群星演唱会即将在2024年1月5日闪耀亮相深圳宝安。 华语歌坛巨星天后齐聚一堂,携手多位实力唱将,共同呈现一场无与伦比的演唱会盛宴!在深情而又充满力量的歌声之中&…

15、lambda表达式、右值引用、移动语义

前言 返回值后置 auto 函数名 (形参表) ->decltype(表达式) lambda表达式 lambda表达式的名称是一个表达式 (外观类似函数),但本质绝非如此 语法规则 [捕获表] (参数表) 选项 -> 返回类型 { 函数体; }lambda表达式的本质 lambda表达式本质其实是一个类…

textarea文本框回车enter的时候自动提交表单,根据内容自动高度

切图网近期一个bootstrap5仿chatgpt页面的项目遇到的&#xff0c;textarea文本框回车enter的时候自动提交表单&#xff0c;根据内容自动高度&#xff0c;代码如下&#xff0c;亲测可用。 <textarea placeholder"Message ChatGPT…" name"" rows"&q…

conda 计算当前包的个数

Conda是一个强大的包管理器和环境管理器&#xff0c;它用于安装和管理来自不同源的软件包。若要计算当前conda环境中安装的包的数量&#xff0c;你可以使用以下命令&#xff1a; 首先&#xff0c;激活你想要检查的conda环境&#xff08;如果不是默认的base环境&#xff09;&am…

虹科新闻丨广州市“强企增效”项目助力虹科高质量发展!

来源&#xff1a;虹科电子科技有限公司 虹科新闻丨广州市“强企增效”项目助力虹科高质量发展&#xff01; 原文链接&#xff1a;https://mp.weixin.qq.com/s/9pUXx5ZZpIi5S4s4o90GJA 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; 2023年12月6日至7日&#xff0c;工…

如果将视频转化为gif格式图

1.选择视频转换GIF&#xff1a; 2.添加视频文件&#xff1a; 3.点击“开始”&#xff1a; 4.选择设置&#xff0c;将格式选择为1080P更加清晰&#xff1a; 5.输出后的效果图&#xff1a;

ReetrantReadWriteLock底层原理

文章目录 一、读写锁介绍二、ReentrantReadWriteLock底层原理1. 读写锁的设计 一、读写锁介绍 现实中有这样一种场景:对共享资源有读和写的操作&#xff0c;且写操作没有读操作那么频繁(读多写少)。在没有写操作的时候&#xff0c;多个线程同时读一个资源没有任何问题&#xf…

TikTok挑战榜单:全球用户如何共襄盛举

TikTok作为全球最受欢迎的短视频应用之一&#xff0c;在这个平台上&#xff0c;用户们通过参与各种挑战&#xff0c;创造了无数令人惊叹的短视频。 本文将深入探讨TikTok挑战榜单的现象&#xff0c;探究全球用户如何共襄盛举&#xff0c;以及这种创意激发和社交互动如何成为Ti…

前端开发常用的Vscode插件整理(持续更新)

本文记录用vscode进行前端开发时&#xff0c;常用到的有用的vscode插件&#xff0c;将不定时更新&#xff5e; 1、Chinese (Simplified) 将编辑器变成简体中文 2、vscode-icon 让 vscode 资源树目录加上图标&#xff0c;官方出品的图标库 3、Import Cost 引入包大小计算,对于…

基于ssm实验室开放管理系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本实验室开放管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信…

高效纯化树脂A-2313 CPR

在化工、制药等行业中&#xff0c;对colorful chemicals的纯化一直是挑战。本文将为您介绍一款具有卓越性能的强碱性阴离子交换树脂——Tulsion A-2313 CPR。通过分析其特性和应用&#xff0c;展示其在colorful chemicals纯化领域的优势。 一、Tulsion A-2313 CPR离子交换树脂的…

代码随想录二刷 |二叉树 |94.二叉树的中序遍历

代码随想录二刷 &#xff5c;二叉树 &#xff5c;二叉树的中序遍历 题目描述解题思路代码实现迭代法递归法 题目描述 94.二叉树的中序遍历 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&a…

漏洞复现-浙江宇视 isc LogReport.php 远程命令执行漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

第二百回 如何获取App自身的信息

文章目录 1. 概念介绍2. 使用方法2.1 ClipOval2.2 ClipRRect 3. 示例代码 我们在上一章回中介绍了AspectRatio Widget相关的内容&#xff0c;本章回中将介绍剪裁类组件(Clip).闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在这里说的剪裁类组件主要是指对…

dockerfile---创建镜像

dockerfile创建镜像&#xff1a;创建自定义镜像。 包扩配置文件的创建&#xff0c;挂载点&#xff0c;对外暴露的端口。设置环境变量。 docker镜像的方式: 1、基于官方源进行创建 根据官方提供的镜像源&#xff0c;创建镜像&#xff0c;然后拉起容器。是一个白板&#xff0c…

初识人工智能,一文读懂强化学习的知识文集(5)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

2023年运营级网赚网盘平台搭建指南(包含源码和教程)

源码介绍 为什么要考虑自己搭建网盘呢&#xff1f;现如今&#xff0c;许多大型网盘平台都对文件添加了各种限制&#xff0c;导致很多文件容易被删除。而且&#xff0c;大部分网盘还会限制下载速度&#xff0c;如果没有开通VIP会员&#xff0c;使用起来非常不便。 本指南提供了…

免费节假日api接口使用教程-聚合数据

免费节假日api接口使用教程-聚合数据 文章目录 &#x1f4d6;访问官网&#x1f330;例子完整代码&#x1f58a;️最后总结 &#x1f4d6;访问官网 聚合数据 官网地址 https://dashboard.juhe.cn/home 点击api 接口文档 &#x1f330;例子 get方式 curl -k -i -d “key您申请…

解决Git提交错误分支

如果 Git 提交到错误的分支&#xff0c;可以通过以下步骤将其转移到正确的分支上&#xff1a; 1.检查当前所在的分支&#xff0c;可以通过 git branch 命令查看。 git branch2.切换到正确的分支&#xff0c;可以通过 git checkout <正确的分支名> 命令进行切换。 git …