buildroot VS yocto

2023-05-16

翻译自Buildroot vs. OpenEmbedded or Yocto Project: A Four Hands Discussion - 2016.pdf


Buildroot 和 yocto的对比

对比内容:
(1) 嵌入式构建系统
    目标是构建一个完整的,客制化的嵌入式Linux系统
    包括root filesystem, toolchain, kernel, bootloader
(2) 从源代码开始
(3) 使用交叉编译工具链
(4) 非常活跃的维护和开发工程
(5) 工业界广泛使用
(6) 有文档和培训课程
(7) 自由软件

buildroot的通用信条
(1) 专注于简单化
(2) 使用简单,理解简单,扩展简单
(3) 通过扩展脚本而不是buildroot本身来处理特殊情况
(4) 使用现存的技术/语言: kconfig, make. (值得投入时间去学习)
(5) 默认小
(6) 目的无关的(Purpose-agnostic)
(7) 开放社区,没有供应商、官僚/公司的管理

yocto的通用信条
(1) 支持主要的CPU架构
    OpenEmbedded:仅qemu
    Yocto Project: 为一小部分机器增加支持
(2) 只提供核心方法,使用layers来支持更多的package和机器
(3) 客户的改动应该在一个单独的layer
(4) 多用途的构建系统:尽可能灵活的处理更多的使用情况
(5) 开放社区,但是该工程被公司赞助商发起的Yocto Project Advisory Board监管
(6) OpenEmbedded 是一个独立社区驱动的工程。

buildroot 输出
(1) 主要是根文件系统镜像
    同时包含:工具链, 内核镜像, bootloader等
(2) 支持多种格式: ext2/3/4, ubifs, iso9600等
(3) 没有二进制包, 没有包管理系统
    一些人称之为一个firmware generator
    通过包不可能更新
    更新需要一个完整的系统更新,像Andorid一样
    认为部分更新是有害的

Yocto 输出
(1) 构建distribution,主要的输出是一个package feed
    包管理系统是可选的
    装载和更新系统的一部分是可能的
(2) 通过安装一些包,也可以产生根文件系统镜像。支持ext2/3/4, ubifs, iso9600等,也支持VM镜像:vmdk,vdi,qcow2
(3) 最终,镜像类或者工具,wic可用来构建磁盘镜像
(4) 生成image时也可以生成SDK,可以让应用开发者编译和测试他们的应用(不用集成到build中)。但是SDK必须要和image匹配。

Buildroot 配置
(1) 和Linux kernel一样使用kconfig
(2) 简单的{menu,x,n,g}配置接口
(3) 整个配置保存在一个文件 .config/defconfig
(4) 定义系统的各个方面:架构,内核版本/内核配置,bootloader,用户空间package等等。
(5) make menuconfig, make
(6) 为不同的机器构建通用的系统:单独处理
    一个可以从fragment中构建出defconfig的工具
    可行的,但是并非超级简单
    每台机器完全独立的构建

Yocto 配置
(1) 配置分成几个部分:
    Distribution 配置 (package配置,toolchain和libc选择...)
    Machine Configuration (定义架构, CPU功能, BSP)
    Image recipe (target安装什么package)
    Local配置 (Distribution和默认machine选择, 编译时使用多少个线程, 是否删除build artifact)
(2) 有必要收集将要被使用的layers,并宣布它们。
(3) 允许为不同的机器构建相同的镜像,或者为同一个机器构建不同的distribution或镜像。


Buildroot layers
(1) 没有layer的概念
(2) 所有的包在官方repository中维护
(3) 添加BR2_EXTERNAL
    允许存储包定义、配置和其他人工文件
    一个BR2_EXTERNAL
    通常用作专有的/客制化的包和配置
    仅增加包,不覆盖buildroot中的包


yocto layers
(1) layer机制允许修改和增加新package或image
(2) core build system, BSP和custome modifications之间明确分离
(3) 第三方提供为它们layers提供BSP,或者一套处理专用应用程序的方法
(4) Layers需要兼容和使用相同的OE branch base
(5) 谨防layer quality, 检查不是系统性的
(6) OpenEmbedded Metadata Index 列出了可用的layers,recipes,machines:http://layers.openembedded.org/layerindex/
(7) 此外,有一个强大的override机制,可以基于machine或者distribution调整recipe variables


buildroot/yocto toolchain
相同的功能:
(1) 构建自己的toolchain,基于gcc、C库(glibc, uClibc, musl)
(2) 使用external toolchain, 对于buildroot更简单,因为内置有这个功能,对于yocto,只有在additional vendor layers正真完全支持。


buildroot new package
涉及三个文件Config.in xxx.mk xxx.hash

yocto new package
涉及一个文件×××.bb


buildroot: complexity
(1) 设计成简单使用
(2) 对于core,每个建议的功能以有用性/复杂度比来分析
(3) core逻辑完全使用make编写,少于1000行的code包含了230行注释: 确实容易理解what、why、how;几乎和一个shell脚本一个接一个地下载、提取、构建、安装软件那样简单。
(4) 文档很充分,有很多资源可用
(5) 一个小时的talk足以描述所有内部实现(ELCE 2014)
(6) IRC上典型的反馈: 来自Yocto,非常惊喜,使用起来这么简单。 这是让我为难的第一件事。

Yocto Project: complexity
(1) 有点陡峭的学习曲线
(2) 核心是bitbake, 一个用python编写的单独项目(60千行代码)
(3) 一套class定义common task
(4) recipe 使用 bitbake specific language, python 和 shell 混合编写
(5) 日志和调试可帮助理解每个task具体做了什么
(6) 详细的文档,但是有很多不同的配置变量
(7) 并不总是容易理解最佳实践(比如, Poky 不能用于 production, distro/image 修改不能在local.conf中做, 删除tmp/)
(8) 人们依然对一些术语感到疑惑(Yocto Project, Poky, OpenEmbedded, bitbake)


Buildroot packages
(1) 1800+ packages
(2) Graphics: X.org, Wayland, Qt4/Qt5, Gtk2/Gtk3, EFL
(3) Multimedia: Gstreamer 0.10/1.x, ffmpeg, Kodi, OpenGL
(4) Languages: Python2/3, PHP, Lua, Perl, Erlang, Mono, Ruby, Node.js
(5) Networking: Apache, Samba, Dovecot, Exim, CUPS, lots of servers/tools
(6) Init systems: Busybox(default), initsysv, systemd
(7) No support for a toolchain on the target


Yocto Project packages
(1) 几千个recipes: 对于oe-core, meta-openembedded, meta-qt5大约2200个。通过Metadata Index知道多余8400
(2) 大部分和buildroot一样
(3) 更多的语言: Java, Go, Rust, smalltalk
(4) 对于Qt3仍有一个起作用的layer
(5) meta-virtualization(Docker, KVM, LXC, Xen)和 meta-openstack layers


Buildroot 依赖方法
(1) 极简依赖, 如果一个功能可以关闭,那么默认关闭
(2) 很多自动依赖,比如,如果你开启OpenSSL,将自动从其他可提供SSL支持的enabled的包中获得SSL支持
(3) 默认毫不费力的的得到小的根文件系统


Yocto Project 依赖方法
(1) 在distribution级进行package 配置
    开启OpenSSL将对所有package打开,但是可以对一些package关闭,相反,也可以对选定的pacakge开启一些功能。
(2) 可以在machine级进行修改,但是应该避免这样做
(3) 每个recipe可以定义自己的默认功能集,一个稳健的默认配置。


Buildroot 更新/安全
(1) 每三个月release,两个月开发,一个月稳定
(2) release包含package版本更新: security 更新和major 更新
(3) 核心架构也可能潜在性的发生改变
(4) 没有LTS版本,用于需要自己处理
(5) 正在提供一个脚本来评估给定buildroot配置中未解决的CVE (Common Vulnerabilities & Exposures)


Yocto Project 更新/安全
(1) 每6个月release,一次在4月,一次在10月
(2) 可通过wiki: https://wiki.yoctoproject.org/wiki/Yocto_Project_v2.1_Status了解planning和roadmap
(3) 在M1和最终release之间的三个月内包含4个milestone
(4) 至少先前和当前release的版本有指定维护者,他们获取安全和重要的解决方法,但是没有recipe更新
(5) 旧版本由社区维护


Buildroot 检测配置修改
(1) Buildroot不很智能
(2) 当修改配置是,它不尝试检测哪些需要rebuild
(3) 一旦build一个package,buildroot将不rebuild它,除非你强制
(4) 大的配置修改需要full rebuild
(5) 小的配置修改可以不需要full rebuild
(6) 一个配置,一个build,不能配置间不能分享


Yocto Project 检测配置修改
(1) bitbake 维护一个shared State Cache允许增加的builds
(2) 它通过创建inputs的checksum检测task的input修改
(3) 该cache可在所有的builds间共享, 对于类似的machines,build很快
(4) 可以跨主机分享该cache,比如一个夜间服务器和一个开发机,大大加快full build


Buildroot: architecture support
(1) 支持很多架构
(2) ARM(64), MIPS, PowerPC(64), x86/x86-64
(3) 也支持很多更专用的架构: Xtensa, Blackfin, ARC, m68k, SPARC, Microblaze, NIOSII; ARM noMMU, especially ARMv7-M
(4) 架构供应商提供援助: Imagination Technologies的MIPS, IBM的PowerPC64, Synopsys的ARC, Analog Devices的Blackfin


Yocto Project: architecture support
(1) core中, ARM, MIPS, PowerPC, X86,以及它们64bit 系列
(2) separate layers: Microblaze, NIOSII
(3) 通常芯片厂商维护他们自己的BSP layer: meta-intell, meta-altera (ARM & NIOSII), meta-atmel, meta-fsl, meta-ti, mtea-xilinx ...
(4) 社区提供: meta-rockchip, meta-sunxi


Buildroot: minimal build
最小的build花费15分25秒,image size 2.2MB

yocto project: minimal build
最小build花费50分47秒, image size为4.9MB。 如果有存在的sstate-cache,花费1分21秒



License
(1) 都可以创建一个使用许可证的列表
(2) 都能够检测到许可证更改
(3) Yocto项目可以剔除GPLv3


Buildroot & Yocto 选择

Buildroot
(1) 非常专用的CPU架构
(2) 非常小的rootfs < 8M
(3) 对工程师没有很大的要求
(4) 不支持各种mechines或者类似的系统
(5) 不需要包/部分系统的更新
(6) 小系统

yocto
(1) 不是非常特殊的CPU架构,不是非常小的rootfs,需要有经验的工程师。
(2) 不是非常特殊的CPU架构,不是非常小的rootfs,需要有经验的工程师。支持几种类似的系统
(3) 不是非常特殊的CPU架构,不是非常小的rootfs,需要有经验的工程师。需要更新包和部分系统
(4) 不是非常特殊的CPU架构,不是非常小的rootfs,需要有经验的工程师。非常大的系统
















本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

buildroot VS yocto 的相关文章

  • 20220909编译ITX-3588J的Buildroot的系统0(SDK预处理)

    rootroot 64 rootroot HP ZHAN 66 Pro A 14 G3 Linux SDK ll total 11856864 drwxrwxrwx 4 rootroot rootroot 4096 9月 6 22 59 d
  • buildroot使用外部编译链编译bluez蓝牙工具

    在开发ublox w263 wifi蓝牙时 xff0c 之前是使用yocto系统集成编译出的bluez工具 xff0c 减少了自己编译工具软件和依赖库的工作 xff0c 切换项目使用原生linux系统后 xff0c 所以的软件需要自己编译
  • 使用Openembedded定制嵌入式Linux镜像

    By Toradex秦海 1 简介 嵌入式设备采用Embedded Linux操作系统进行开发已经越来越成为主流 但是如何将开发完成的Linux uboot kernel配置 以及应用程序整合到Embedded Linux镜像中以便在量产的
  • yocto配置好eclipse之后编译多线程配置

    在yocto项目中配置好eclipse的开发环境 如何配置eclipse开发出多线程程序 普通的eclipse程序只需要在Properties gt C C Build gt Settings gt Tool Settings gt GCC
  • rv1126编译报错 buildroot 添加rsync导致popt报错

    报错现象 解决方案 路径 home forlinx rv1126 buildroot package popt popt mk 文件修改 修改 POPT SITE http ftp rpm org popt releases histori
  • yocto 的 Linux 功能

    我想为几个文件提供 Linux 功能 例如 CAP NET ADMIN 我正在使用 Yocto 我的文件系统应该是只读的 并且在刷新软件后不得更改 这意味着通常可以使用 setcap 的 pkg postinst 是不可能的 有没有其他方法
  • 如何在 yocto 中编译基本的 c 文件

    我正在 yocto 上工作 我想在 yocto 中编译一些 C 文件并将生成的二进制文件安装到外部文件系统 在此之前 我尝试创建一个单独的记录并从中编译 C 代码 我无法编译它 我不确定是否理解这个问题 因为它不够精确 在配方树中包含 C
  • Yocto - 根据图像类型选择正确的配置文件

    在我相当标准的 Yocto 构建中 我有openssh包括 它的配置文件 etc ssh sshd config 对于生产和开发映像自然应该是不同的 例如 希望在开发映像上进行 root 登录 而不是在生产映像上登录 生产和开发映像是不同的
  • bitbake:构建系统如何选择多个层提供的配方

    元层提供配方 meta recipes graphics x11 common xserver nodm init bb 元 oe 层提供配方 meta oe recipes graphics xserver nodm init xserv
  • 将特定标头添加到 bitbake wget fetcher

    我需要设置一个特定的标头以使用以下命令从资源中获取存档wgetfetcher 类似于 wget header PRIVATE ACCESS TOKEN blablablablabla https some resource 如何使用该获取器
  • 使用 Yocto 构建固件的最佳实践

    我有一个基于 rocko 分支的工作 Yocto 构建系统 该系统正在为基于 ARM 的目标板生成图像 该板上的芯片之一是一个基于 ARM 的小型微控制器 与主 CPU 分离 它需要加载我必须构建的固件映像 制定构建此微控制器固件的方法很容
  • 如何使用 yocto 构建简单的 qt 应用程序?

    I have yocto开发环境设置 我可以在其中进行 bitbake 并在目标中运行一个简单的 C 应用程序 现在我想尝试使用简单的 Qt 应用程序 当我执行时bitbake layers 显示层它在列表中显示meta qt5 meta
  • 如何在 Yocto 中使用自己的设备树和修改后的内核配置?

    我正在努力用 yocto 构建一个自己的 嵌入式 Linux 它基于 SAMA5D3x MB SAMA5D3x CM RONETIX 和 SAMA5D35 我有两个问题 1 更改设备树 我基于以下内容构建图像 MACHINE sama5d3
  • bitbake SRC_URI 文件://

    如果我在本地目录中有一个 tarball helloworld tar gz 比如 home user tarballs 我怎样才能从该目录中获取我的 bitbake 配方 我的 helloworld bb 是 SECTION exampl
  • 为定制 RISC-V imafd SOC 移植 Linux

    我正在尝试构建一个 yocto演示 coreip cli我的自定义 risc v SOC 的图像仅支持imafd指示 对于 Bitbake 使用的交叉工具链的编译 我尝试更改 openembedded core 层中的 cross binu
  • 仅使用 Yocto/bitbake 快速重建设备树?

    因此 每次修改设备树时 我通常会更改自定义配方中的 dts 并重建映像 重建需要很长时间 因为它会重建整个内核 然后需要构建镜像 最后部署到目标设备 我是否缺少任何仅重建设备树的技巧 UPDATE 我已将 g0hl1n 的答案标记为正确答案
  • yocto 中图像版本控制的最佳方法

    在 Yocto 中维护映像版本的最佳方法是什么 我的意思是假设我们构建一个图像并将其提供给客户 将来我们会向客户提供错误修复 我们如何知道客户正在使用哪个版本的 yocto 图像 有没有任何标准方法可以实现这一点 谢谢你的时间 赞赏你的努力
  • 如何控制rpmbuild的buildroot和安装目录

    我对 rpmbuild 中的一些目录感到困惑 1 buildroot 用于存储最终用户安装二进制包时应安装的文件 问题 如何控制这个目录 构建根是什么意思 cat 3 spec BuildRoot opt abc prep echo bui
  • Yocto 添加自定义 UBoot 环境变量

    我正在尝试通过 Yocto 构建过程添加两个新的 u boot 环境变量 My file u boot imx 2021 04 bbappend包含 FILESEXTRAPATHS prepend THISDIR PN SRC URI fi
  • beagleboneBlack 上的 buildroot 有什么用处?

    我不明白beaglebone black这样的卡买来时有Linux系统 buildroot是什么原因 buildroot有什么用 构建一个完全定制的 轻量级的 快速启动的嵌入式 Linux 系统

随机推荐

  • Excel表格数据如何批量乘以一个数字

    今天跟大家分享一下Excel表格数据如何批量乘以一个数字 1 打开Excel文件 xff0c 我们想要批量将数字乘以10 2 首先我们选择所有数据单元格区域 3 点击下图选项 xff08 Excel工具箱 xff0c 百度即可了解详细下载安
  • Win2003系统部署SSL证书(部署https教程)

    在windows 2003操作系统下 xff0c IIS 6 环境的服务器SSL证书安装教程 安装前 xff0c 请准备好SSL证书 部署前请退出服务器内安装的杀毒软件 xff08 360 金山 安全狗等安全软件有可能导致SSL证书部署出错
  • Android启动模式之singleinstance的坑

    Android启动模式之singleinstance的坑 前言 在实际应用中 xff0c 使用singleinstance启动模式时 xff0c 会遇到一些奇奇怪怪的问题 Android有四种启动模式 xff0c 分别是standard x
  • 关于使用iconfont图标总生成小长方形框的解决办法

    起因是在联系仿写网易的静态页面的时候 xff0c 使用iconfont小图标的时候 xff0c 引入正确 xff0c 但是在页面上一直显示的是一个长方形小框的页面 各种搜索终于找到了解决办法 主要原因是由于iconfont css中路径不对
  • Qt和MFC的效率对比

    Qt和MFC的效率对比 之前一直做mfc xff0c 昨天看了一晚上的Qt xff0c 瞬间就喜欢上它了 xff0c Qt在windows下应该没有mfc的运行效率高 xff0c 但是我想知道差多少 xff0c 不知有没有大牛做过这方面的对
  • android 移植

    from http wiki kldp org wiki php AndroidPortingOnRealTarget s 6 1 Contents 1 Introduction 2 Copyright and Acknowledgemen
  • LD3320语音识别模块+JQ8900-TF语音模块实现简单的语音交互控制

    玩这个真的要感谢头条的强大推荐 xff0c 清明节回家的大巴车上 xff0c 无聊的刷着头条 xff0c 很智能的给我推荐了一款语音识别模块 xff0c 一直很想自己试着玩一把的我 xff0c 按奈不住 xff0c 点开视频看到了介绍 xf
  • 智能配网方案 Airkiss 技术原理介绍及应用

    写在前面 站在巨人的肩膀上 xff0c 可以看得更远 一 什么是Air Kiss 可以说AirKiss 是微信硬件平台提供的一种WIFI硬件设备快速配置连接网络的技术 xff0c 是一种创新性的信息传递技术 通过该技术可以便捷的向一台具有W
  • 谈谈Android 安全策略SElinux

    不积跬步无以至千里 xff0c 补全自己的短板 xff0c 完善体系 xff0c 站在巨人的肩膀上 xff0c 看到的更远 xff0c 写这篇文章也算是对这个知识点的总结 一 xff0c 背景 SElinux出现之前 xff0c Linux
  • AOSP添加新硬件设备开发-HAL层

    此篇文章接上一篇hidl 我们来实现hal层 hal层官方解释系统硬件抽象层 xff0c 理解为kernel的代理层 xff0c 他的存在屏蔽了不同硬件设备的差异 xff0c 根据提供的访问标准 xff0c 就可以对不同的硬件进行操作 xf
  • 解决 Windows has triggered a breakpoint in Linkage.exe问题

    这两天在做一个小项目 xff0c 里面有多线程的东东 xff0c 在调试的时候 总是遇到 Windows has triggered a breakpoint in Linkage exe 的错误 现在将这个问题和大家分享一下 前提是这样的
  • android rc文件的启动

    记录hostapd 启动方式 xff0c 多种方式可以启动一个bin hostapd android rc init rc fragment for hostapd on Android Copyright c 2002 2016 Joun
  • MTK WLAN支持多种NVRAM方案

    背景 硬件差异的前提 wifi功率会有差异 软件上可以做功率补偿方案 但是需要知道整机状态 然后设定一个flag 软件根据flag 选择使用预制的多NVRAM 简单点来说就是 根据不同条件 加载不同的NVRAM 实现原理 1 根据不同的射频
  • C51矩阵键盘

    对于键盘按键之前也是似懂非懂 xff0c 手里有一块浩豚电子的51板子 xff0c 现在跟着使用说明看一遍学习 矩阵键盘 xff0c 称为行列键盘 xff0c 在单片机上使用4条I O口作为行线 xff0c 4条I O口作为列线 xff0c
  • Ubuntu 获取 root 权限 (临时&永久)

    xfeff xfeff xfeff xfeff Ubuntu 获取 root 权限 操作环境 xff1a Win7 43 VMware Workstation 12 0 1 43 Ubuntu 12 04 1 临时获取 root 权限 xf
  • 广播Boradcast socket sendto出错 errno: 101 Network is unreachable

    关键字 xff1a linux 广播 255 255 255 255 sendto error Network is unreachable 全网广播 场景 xff1a 今天调试linux 网络编程的广播 xff0c 当向255 255 2
  • ubuntu下查看某个包是否已安装

    dpkg l dpkg l grep package name dpkg status package name 查看 var lib dpkg status 内容
  • 查看一个可执行文件或者库的依赖库

    经常需要查看一个可执行文件或者库依赖那些库文件 通常情况下这很好办 xff0c 使用ldd命令就可以了 xff0c 比如 xff1a 1 2 3 4 5 6 ldd bin bash linux vdso so 1 61 gt 0x0000
  • 构建gcc交叉编译工具链

    如何构建一个GCC 交叉编译工具链 GCC不仅是一个编译器 xff0c 它是一个开源工程 xff0c 可以让你建立各种编译器 一些编译器支持多线程 xff0c 一些支持共享库 xff0c 一些支持 Multilib xff08 典型的应用是
  • buildroot VS yocto

    翻译自Buildroot vs OpenEmbedded or Yocto Project A Four Hands Discussion 2016 pdf Buildroot 和 yocto的对比 对比内容 xff1a xff08 1 x