嵌入式linux构建之Yocto和buildroot

嵌入式电子 2023-03-28 12:00

做Linux系统开发其实大部分工作都是围绕根文件系统,因为uboot、kernel一般都是原厂提供,且外设官方也提供了驱动,移植就是了,本身开发工作不多。构建根文件系统最难做到的就是版本符合且完整。因为根文件系统涉及到的需求、库、源文件等很多,而且还有版本要求因此并不容易。

根文件系统构建最麻烦的是opengl库、java库、qt库、tslib库、openvg库、Python库、sqlite等等。下面分别介绍几种不同的构建方法,阐述途径依旧是原料和工具、过程、输出。

Yocto是常见的构建根文件系统的工具,当然uboot和kernel一并能构建出来但是大部分人只需要根文件系统。很多SOC厂比如NXP加入了Yocto计划整出Yocto版的SDK,这并不是什么好事SOC用户更喜欢每一款芯片单独提供一个SDK然后配置编译。Yocto构建原料和工具需要一台内存、主频、影盘比较高的电脑,还要Ubuntu环境和repo、git环境,一份SOC厂提供的Yocto包。过程就是下载、build配置、编译,整个编译要十几个小时还跟电脑性能有关。输出就是交叉编译工具链、二进制的uboot和kernel、还有最重要的包含了需要的各种库的根文件系统。

buildroot也是SOC厂提供SDK的惯用方法,比如瑞芯微、STM32MP等。buildroot配置和编译比较简单过程也不复杂,整个过程像极了kernel的配置编译过程,编译速度也比较快,从SDK厂商处获得SDK后编译并不难。

busybox仅仅用于构建根文件系统,但是只有一些基本的东西比如shell、telnet等。编译过程跟编译kernel很像,也是先make menuconfig,然后配置最后编译。

在构建根文件系统时笔者认为宁多勿缺,很多人会觉得flash资源有限不适合放这么多库,但是既然选择用Linux了就不要用做MCU的思维来做了,如果资源真的受限应该用RTOS来做不要考虑上Linux。因为缺一两个库最后应用跑不起来重新构建一遍根文件系统是非常痛苦的。

另外Android移植没有大家想象的困难,一般能跑Android的SOC官方都会发布一个公版SDK的。Andriod的难度在于深度定制和应用开发,移植本身难度比Linux还要小。

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,需要有经验的工程师。非常大的系统


定期以通俗易懂的方式分享嵌入式知识,关注公众号,加星标,每天进步一点点。


声明:

本号原创、转载的文章、图片等版权归原作者所有,如有侵权,请联系删除。

关注、点赞、在看、转发,支持优质内容! 

评论
  • 村田是目前全球量产硅电容的领先企业,其在2016年收购了法国IPDiA头部硅电容器公司,并于2023年6月宣布投资约100亿日元将硅电容产能提升两倍。以下内容主要来自村田官网信息整理,村田高密度硅电容器采用半导体MOS工艺开发,并使用3D结构来大幅增加电极表面,因此在给定的占位面积内增加了静电容量。村田的硅技术以嵌入非结晶基板的单片结构为基础(单层MIM和多层MIM—MIM是指金属 / 绝缘体/ 金属) 村田硅电容采用先进3D拓扑结构在100um内,使开发的有效静电容量面积相当于80个
    知白 2025-01-07 15:02 150浏览
  • 一个真正的质量工程师(QE)必须将一件产品设计的“意图”与系统的可制造性、可服务性以及资源在现实中实现设计和产品的能力结合起来。所以,可以说,这确实是一种工程学科。我们常开玩笑说,质量工程师是工程领域里的「侦探」、「警察」或「律师」,守护神是"墨菲”,信奉的哲学就是「墨菲定律」。(注:墨菲定律是一种启发性原则,常被表述为:任何可能出错的事情最终都会出错。)做质量工程师的,有时会不受欢迎,也会被忽视,甚至可能遭遇主动或被动的阻碍,而一旦出了问题,责任往往就落在质量工程师的头上。虽然质量工程师并不负
    优思学院 2025-01-09 11:48 25浏览
  • 光伏逆变器是一种高效的能量转换设备,它能够将光伏太阳能板(PV)产生的不稳定的直流电压转换成与市电频率同步的交流电。这种转换后的电能不仅可以回馈至商用输电网络,还能供独立电网系统使用。光伏逆变器在商业光伏储能电站和家庭独立储能系统等应用领域中得到了广泛的应用。光耦合器,以其高速信号传输、出色的共模抑制比以及单向信号传输和光电隔离的特性,在光伏逆变器中扮演着至关重要的角色。它确保了系统的安全隔离、干扰的有效隔离以及通信信号的精准传输。光耦合器的使用不仅提高了系统的稳定性和安全性,而且由于其低功耗的
    晶台光耦 2025-01-09 09:58 19浏览
  • 故障现象一辆2017款东风风神AX7车,搭载DFMA14T发动机,累计行驶里程约为13.7万km。该车冷起动后怠速运转正常,热机后怠速运转不稳,组合仪表上的发动机转速表指针上下轻微抖动。 故障诊断 用故障检测仪检测,发动机控制单元中无故障代码存储;读取发动机数据流,发现进气歧管绝对压力波动明显,有时能达到69 kPa,明显偏高,推断可能的原因有:进气系统漏气;进气歧管绝对压力传感器信号失真;发动机机械故障。首先从节气门处打烟雾,没有发现进气管周围有漏气的地方;接着拔下进气管上的两个真空
    虹科Pico汽车示波器 2025-01-08 16:51 92浏览
  • 「他明明跟我同梯进来,为什么就是升得比我快?」许多人都有这样的疑问:明明就战绩也不比隔壁同事差,升迁之路却比别人苦。其实,之间的差异就在于「领导力」。並非必须当管理者才需要「领导力」,而是散发领导力特质的人,才更容易被晓明。许多领导力和特质,都可以通过努力和学习获得,因此就算不是天生的领导者,也能成为一个具备领导魅力的人,进而被老板看见,向你伸出升迁的橘子枝。领导力是什么?领导力是一种能力或特质,甚至可以说是一种「影响力」。好的领导者通常具备影响和鼓励他人的能力,并导引他们朝着共同的目标和愿景前
    优思学院 2025-01-08 14:54 82浏览
  • 在智能网联汽车中,各种通信技术如2G/3G/4G/5G、GNSS(全球导航卫星系统)、V2X(车联网通信)等在行业内被广泛使用。这些技术让汽车能够实现紧急呼叫、在线娱乐、导航等多种功能。EMC测试就是为了确保在复杂电磁环境下,汽车的通信系统仍然可以正常工作,保护驾乘者的安全。参考《QCT-基于LTE-V2X直连通信的车载信息交互系统技术要求及试验方法-1》标准10.5电磁兼容试验方法,下面将会从整车功能层面为大家解读V2X整车电磁兼容试验的过程。测试过程揭秘1. 设备准备为了进行电磁兼容试验,技
    北汇信息 2025-01-09 11:24 17浏览
  • 本文介绍编译Android13 ROOT权限固件的方法,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。关闭selinux修改此文件("+"号为修改内容)device/rockchip/common/BoardConfig.mkBOARD_BOOT_HEADER_VERSION ?= 2BOARD_MKBOOTIMG_ARGS :=BOARD_PREBUILT_DTB
    Industio_触觉智能 2025-01-08 00:06 100浏览
  • By Toradex 秦海1). 简介嵌入式平台设备基于Yocto Linux 在开发后期量产前期,为了安全以及提高启动速度等考虑,希望将 ARM 处理器平台的 Debug Console 输出关闭,本文就基于 NXP i.MX8MP ARM 处理器平台来演示相关流程。 本文所示例的平台来自于 Toradex Verdin i.MX8MP 嵌入式平台。  2. 准备a). Verdin i.MX8MP ARM核心版配合Dahlia载板并
    hai.qin_651820742 2025-01-07 14:52 115浏览
  • 1月7日-10日,2025年国际消费电子产品展览会(CES 2025)盛大举行,广和通发布Fibocom AI Stack,赋智千行百业端侧应用。Fibocom AI Stack提供集高性能模组、AI工具链、高性能推理引擎、海量模型、支持与服务一体化的端侧AI解决方案,帮助智能设备快速实现AI能力商用。为适应不同端侧场景的应用,AI Stack具备海量端侧AI模型及行业端侧模型,基于不同等级算力的芯片平台或模组,Fibocom AI Stack可将TensorFlow、PyTorch、ONNX、
    物吾悟小通 2025-01-08 18:17 20浏览
  • 在过去十年中,自动驾驶和高级驾驶辅助系统(AD/ADAS)软件与硬件的快速发展对多传感器数据采集的设计需求提出了更高的要求。然而,目前仍缺乏能够高质量集成多传感器数据采集的解决方案。康谋ADTF正是应运而生,它提供了一个广受认可和广泛引用的软件框架,包含模块化的标准化应用程序和工具,旨在为ADAS功能的开发提供一站式体验。一、ADTF的关键之处!无论是奥迪、大众、宝马还是梅赛德斯-奔驰:他们都依赖我们不断发展的ADTF来开发智能驾驶辅助解决方案,直至实现自动驾驶的目标。从新功能的最初构思到批量生
    康谋 2025-01-09 10:04 21浏览
  • 根据环洋市场咨询(Global Info Research)项目团队最新调研,预计2030年全球中空长航时无人机产值达到9009百万美元,2024-2030年期间年复合增长率CAGR为8.0%。 环洋市场咨询机构出版了的【全球中空长航时无人机行业总体规模、主要厂商及IPO上市调研报告,2025-2031】研究全球中空长航时无人机总体规模,包括产量、产值、消费量、主要生产地区、主要生产商及市场份额,同时分析中空长航时无人机市场主要驱动因素、阻碍因素、市场机遇、挑战、新产品发布等。报告从中空长航时
    GIRtina 2025-01-09 10:35 19浏览
  •  在全球能源结构加速向清洁、可再生方向转型的今天,风力发电作为一种绿色能源,已成为各国新能源发展的重要组成部分。然而,风力发电系统在复杂的环境中长时间运行,对系统的安全性、稳定性和抗干扰能力提出了极高要求。光耦(光电耦合器)作为一种电气隔离与信号传输器件,凭借其优秀的隔离保护性能和信号传输能力,已成为风力发电系统中不可或缺的关键组件。 风力发电系统对隔离与控制的需求风力发电系统中,包括发电机、变流器、变压器和控制系统等多个部分,通常工作在高压、大功率的环境中。光耦在这里扮演了
    晶台光耦 2025-01-08 16:03 80浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦