为什么大厂都在用Yocto?

原创 鱼鹰谈单片机 2024-10-22 08:21

来源:公众号【鱼鹰谈单片机】

作者:鱼鹰Osprey

ID   :emOsprey

Yocto 是什么?很多道友第一次听到时估计都是一脸懵逼。当初鱼鹰从领导处了解这个技术时,完全不知道是什么,只能摸着石头过河。

 buildroot辛酸史

在此之前,领导刚刚让鱼鹰学习了 buildroot 编译内核镜像,因为我们有个老项目的镜像就是用它编译的。

以前这些镜像都是老外维护(鱼鹰目前在世界500强外企,有时间聊聊在外企这些年学到了啥,欢迎关注鱼鹰谈单片机),我们只要从指定地址获取镜像,用工具烧录SD卡镜像就行。

后面领导想国内也能维护镜像,能自己编译镜像,于是让鱼鹰学习镜像编译(以前和领导聊过发展方向,知道鱼鹰想往 Linux 方向发展,因此给了机会)。

Buildroot 很多年前鱼鹰也了解过,也编译过,感觉不是特别难,觉得任务应该很快能完成。

但没想到,搞了半个多月才搞定,印象最深刻的就是 2.5 G左右的开源资源下载。以前编译镜像时,从来没遇到这些问题,都是半天到一天左右就搞定了。

现在想想,有这两点原因:

1、那些年,github 可以正常上网,很多国外资源都能轻松下载。

2、目前的镜像依赖的开源库太多,也太老了,以前只是为了学习Linux内核,只要基础的组件就行。

因此很顺利编译 uboot、内核、文件系统(镜像三大件)。

现在有些资源下载实在太慢,只能各种找资源,另外从 gitee 中转,总算是下载完成了(还好支持离线下载安装方式)。

但是 qt 这个功能最终还是没装上,不知道啥原因,因为不重要,就没管了。

另外很多资源有指定的 hash 值,你只能下载相同 hash 值的资源,否则即使你修改了 hash 值适配新资源,最终可能导致系统不兼容。

还有 buildroot 环境本身的安装也有点麻烦,也需要时间熟悉。

 Yocto苦难史

后来转 Yocto 开发后,发现学习难度比 buildroot 上升了十倍,资源(硬盘空间)消耗差不多也是十倍,但是熟悉后,简直 TMD 就是为嵌入式而生。

当时自己的 Ubuntu 是 18.04,因为有个老项目的编译需要这个版本才能正常编译。


而 Yocto 的推荐系统应该是 20.04 以上,最少剩 120 G硬盘空间:

IMX_YOCTO_PROJECT_USERS_GUIDE.pdf


鱼鹰不想重装Ubuntu系统(那个时候还不知道用 docker),于是走了一个岔路,遇到各种软件不兼容问题,比如 gcc (只能下载源码重新安装)、python,有些推荐安装的软件版本无法顺利安装。repo 工具本身由于国内网络环境原因,也得使用国内镜像才顺利。

最后生成 SDK 时,又卡在最后一步,没找到 dnf 这个python工具,还好通过别的命令生成了工具链,否则如果卡在编译镜像的最后一步,就麻烦大了后面 docker 解决以上痛点)

bitbake meta-toolchain

总之,问题很多。几天时间,虽然开发环境问题解决了(有了docker,半天不用就能搞定),但是和 buildroot 一样,下载问题又遇到了,这次更狠,直接 30 G 资源下载(因为国内基本不使用 Yocto,即使用,imx6ull 居多,所以很难找到合适的)。

搞得鱼鹰一点脾气也没有,只能向供应商求助,拿到了他手里提前下载好的资源。

这样资源齐全了,终于可以开始编译了。

编译过程还算正常,只是相比 buildroot,编译贼慢,资源消耗极大(非常简单的一个进程,可能需要几百 M 资源,这也能看出为啥整个镜像需要100多G空间了)。

这里有个贼好用的命令,可以在出现错误时,不会立即打断,继续运行其它任务。

bitbake xxx -k

另外推荐一个Yocto入门视频:B站:iMX6ULL采用Yocto构建嵌入式Linux系统 

总之开发环境搭建、资源提前下载好后,编译也算相当顺利了。

三大件一个不缺,同时还能生成 SD 卡镜像。

为什么 Yocto 这么难学,资源消耗这么大,还是这么多大厂都在用?

比如 NXP、BMW、Amazon 、Facebook (Meta)、 General Electric 等。

对于现代计算机而言,资源消耗已经不是大问题,可维护性、灵活性、定制性、兼容性、生态才是首先要考虑的问题。而这些 Yocto 都具备了。

灵活性和定制性:Yocto项目提供了灵活的工具集和开发环境,允许开发者自由选择资源的使用,或者完善特定的组件(包括这些组件的特定版本)。这种灵活性使得开发者可以根据自己的需求定制Linux发行版,从而满足特定硬件平台的需求。避免重复工作:Yocto项目鼓励跨各种应用程序和设备类型的创新,支持多种硬件架构,如x86、ARM、RISC-V、PPC和MIPS等。通过共享技术、软件堆栈、配置和最佳实践,Yocto项目帮助开发者避免从零开始,减少重复工作和不必要的维护。强大的构建系统:Yocto项目的核心是BitBake,这是一个高效的任务调度器和执行系统,能够处理复杂的依赖关系,并优化构建过程。BitBake能够确保构建任务按正确的顺序执行,从而提高构建效率和可预测性。丰富的生态系统:Yocto项目拥有一个活跃的社区和丰富的文档资源,这为开发者提供了强大的支持。社区成员包括硬件制造商、操作系统供应商和独立顾问,他们共同为项目贡献资源和信息,形成了一个强大的生态系统。标准化和兼容性:Yocto项目提供了标准化的构建流程和工具,这有助于不同开发者和团队之间的协作。通过使用Yocto项目,开发者可以确保他们的定制Linux系统在不同硬件平台上具有高度的兼容性和可移植性。优化的资源利用:Yocto项目允许开发者精确地创建嵌入式设备所需的内容,只需添加设备绝对需要的功能支持或包。这有助于优化系统性能,减少不必要的资源占用,从而为嵌入式和物联网设备提供更高效的解决方案。可维护性和可扩展性:Yocto项目的设计允许用户使用自主开发的操作系统或商业操作系统,在迁移时不会丢失优化或功能。此外,商业操作系统也可以使用Yocto项目作为上游资源,从而确保最大化代码重用。支持多种构建目标:Yocto项目不仅可以用于创建Linux发行版,还可以为裸机开发生成实时操作系统(RTOS)工具链,如Zephyr项目所做的那样。

以上是 AI 给出的答案。

下面再结合鱼鹰实际开发经验谈谈为啥 Yocto 大法好。

1、开发环境

docker 技术解决了环境搭建问题,因此环境搭建不再是问题。

年少不知docker好

2、可以编译各种代码

我们知道,一个项目,涉及到各种编程语言,比如 C/C++、Python、Java 等,涉及各种平台,比如 u-boot、Linux、MCU、qt,各种架构 ,arm、risc-v,x86 等,而 Yocto 可以把这些代码都编译好,放在一个压缩包里面,直接拿就行了。

而且同一套 meta,可以轻松编译 x86 和 arm,这样在没有arm板的情况下也能进行一些开发调试工作,自动化测试也更容易。

3、支持 qemu 调试

原生支持 qemu 调试,不过这一块鱼鹰没搞太懂,搞懂了,对开发效率又是一大提高了。

4、定制化

重点来了,估计这个才是各个大厂喜欢 Yocto 的原因。

很多时候,我们的工作是建立在别人的基础上,比如我想在 ubuntu 里面加一个 qt 界面。

这个时候,如果已经有现成的 Ubuntu,那搞个 qt 就简单许多了。

同理类似,Yocto 项目里面有很多Linux发行版,包含各种组件(可能有几百上千个),完全可以自主添加或删除某些组件,并且这些组件版本也有社区负责维护更新。

比如某个工具 vim 的某个版本,需要 Linux 内核某个版本以上才行,这些常用工具的兼容性,都会被处理好,你只要下载一个poky(Yocto的参考实现)发行版,指定某个版本,就能编译出整个镜像(就是下载的时候,可能又要花一些时间了,因为可能依赖的组件版本不同,需要重新下载)。芯片厂家也会在这些基础上,添加自己的特殊化定制。

另外除了整个镜像的特殊化定制,单个组件,单条代码都能修改。

最常用的,比如修改设备树、内核代码、驱动,这些都会以补丁的形式添加到基础 Linux 代码中(不会修改源码)。

而如果要升级 Linux 内核到最新版本,也非常容易,一般 poky 会同步最新内核,同时会把依赖的组件一并升级,这样在你的项目修改可能就只是一个 Poky 的一个commit 修改而已(如果修改了内核代码,可能需要同步修改一下),但是那些组件,比如 vim、nano、ssh 等工具会同步升级,不需要你关心。

Yocto生成的镜像也有多种选择,比如

core-image-minimal:这是一个非常基础的镜像,包含必要的系统工具和Linux内核,适合作为定制更复杂系统的基础core-image-sato:这是一个为桌面环境优化的标准镜像,包含了更多的软件包和工具,适合用于桌面或展示设备core-image-full-cmdline:这个镜像包含了完整的命令行工具集,但不包含图形界面,适合需要完整命令行环境的嵌入式设备core-image-multimedia:这个镜像包含了多媒体相关的软件包,适合需要音频和视频处理能力的设备

你可以选择在这些镜像基础上添加自定义的功能。

并且如果有些组件代码,你不喜欢,也可以随时修改,这种修改不会修改源码,而是以补丁的形式修改到另一个编译环境中,这样可以保证源码的纯粹。

5、项目实用性

你有一块 Linux 板子V1,根据当前硬件适配了代码,发现有些问题,需要改硬件,变成 V2,另外可能还有其它 MCU 的代码也需要同步修改,而老版本板子也有在用。

如何处理这些依赖问题。

古老的方法是,人工维护两个环境依赖差异,高级一点通过脚本或者 repo 工具维护。

而 yocto 借助 kas 工具,可以完美处理这种情况,meta 仓库里面同一个分支可以同时拥有两款板子的信息,只要在编译前,setup 自己需要的机器类型就可以把对应的依赖处理好,再也不会出现Linux 和 mcu 不兼容情况了。

而且使用 kas 可以在 V1 的基础上进行 V2 的差异修改,只要把差异加上就行,避免重复造轮子,或拷贝或切分支。

6、SDK 

可以轻松生成各种SDK,安装后适用于上层应用开发,而不需要占用太多空间,这样不会因为一个小小的功能而安装整个 Yocto 开发环境了。

标准SDK(Standard SDK):这种SDK包含了用于应用程序开发的工件,无论是引导加载程序、Linux内核开发,还是其他用户空间软件。它提供了一个交叉开发工具链和库,这些工具和库是针对特定图像优化的。你可以使用标准SDK独立开发和测试代码,这些代码旨在运行在某个目标机器上。可扩展SDK(Extensible SDK):除了包含标准SDK的所有功能外,可扩展SDK还提供了工具,允许你轻松地向图像中添加新的应用程序和库,修改现有组件的源代码,在目标硬件上测试更改,并轻松地将应用程序集成到OpenEmbedded构建系统中。可扩展SDK安装在任何机器上,并且可以用来开发应用程序、图像和内核。本地SDK(Native SDK):这种SDK的目标是在目标设备上运行,适用于那些功能足够强大的嵌入式设备,可以作为开发环境使用的情况。本地SDK包括头文件、库和工具链,允许在目标设备上直接进行应用程序的开发和测试。交叉开发SDK(Cross-development SDK):这种SDK用于在开发主机中生成目标机器的二进制文件。它包含了交叉编译工具链、库、头文件和二进制文件,以及可能的其他实用程序和应用程序。

这才是真正的大杂烩,包含了嵌入式软件所需的资源,开发、编译、调试,全给你考虑好了,你值得拥有。

7、生态

有很多meta开源,拿来就能用,很多芯片厂商也有适配 Yocto 环境,拥有众多开发者维护 Yocto,生态好。

最后在聊聊缺点

1、资源消耗大(每个任务都有单独的编译环境)。

2、开始编译时速度非常慢,因为它需要在主机上编译各种工具。

3、入门困难,学习曲线陡峭,但适合复杂项目的维护工作。

4、资源嵌套深,不容易找,也不容易理解编译过程。

鱼鹰谈单片机 面向软件开发进阶读者,分享包括但不限于 C 语言、KEIL、STM32、51 等知识!
评论 (0)
  • 六西格玛首先是作为一个量度质量水平的指标,它代表了近乎完美的质量的水平。如果你每天都吃一个苹果,有一间水果店的老板跟你说,他们所卖的苹果,质量达到六西格玛水平,换言之,他们每卖一百万个苹果,只会有3.4个是坏的。你算了一下,发现你如果要从这个店里买到一个坏苹果,需要805年。你会还会选择其他店吗?首先发明六西格玛这个词的人——比尔·史密斯(Bill Smith)他是摩托罗拉(Motorloa)的工程师,在追求这个近乎完美的质量水平的时候,发明了一套方法模型,开始时是MAIC,后来慢慢演变成DMA
    优思学院 2025-03-27 11:47 149浏览
  • 在嵌入式语音系统的开发过程中,广州唯创电子推出的WT588系列语音芯片凭借其优异的音质表现和灵活的编程特性,广泛应用于智能终端、工业控制、消费电子等领域。作为该系列芯片的关键状态指示信号,BUSY引脚的设计处理直接影响着系统交互的可靠性和功能拓展性。本文将从电路原理、应用场景、设计策略三个维度,深入解析BUSY引脚的技术特性及其工程实践要点。一、BUSY引脚工作原理与信号特性1.1 电气参数电平标准:输出3.3V TTL电平(与VDD同源)驱动能力:典型值±8mA(可直接驱动LED)响应延迟:语
    广州唯创电子 2025-03-26 09:26 204浏览
  • WT588F02B是广州唯创电子推出的一款高性能语音芯片,广泛应用于智能家电、安防设备、玩具等领域。然而,在实际开发中,用户可能会遇到烧录失败的问题,导致项目进度受阻。本文将从下载连线、文件容量、线路长度三大核心因素出发,深入分析烧录失败的原因并提供系统化的解决方案。一、检查下载器与芯片的物理连接问题表现烧录时提示"连接超时"或"设备未响应",或烧录进度条卡顿后报错。原因解析接口错位:WT588F02B采用SPI/UART双模通信,若下载器引脚定义与芯片引脚未严格对应(如TXD/RXD交叉错误)
    广州唯创电子 2025-03-26 09:05 146浏览
  • 长期以来,智能家居对于大众家庭而言就像空中楼阁一般,华而不实,更有甚者,还将智能家居认定为资本家的营销游戏。商家们举着“智慧家居、智慧办公”的口号,将原本价格亲民、能用几十年的家电器具包装成为了高档商品,而消费者们最终得到的却是家居设备之间缺乏互操作性、不同品牌生态之间互不兼容的碎片化体验。这种早期的生态割裂现象致使消费者们对智能家居兴趣缺失,也造就了“智能家居无用论”的刻板印象。然而,自Matter协议发布之后,“命运的齿轮”开始转动,智能家居中的生态割裂现象与品牌生态之间的隔阂正被基于IP架
    华普微HOPERF 2025-03-27 09:46 109浏览
  • 在当今竞争激烈的工业环境中,效率和响应速度已成为企业制胜的关键。为了满足这一需求,我们隆重推出宏集Panorama COOX,这是Panorama Suite中首款集成的制造执行系统(MES)产品。这一创新产品将Panorama平台升级为全面的工业4.0解决方案,融合了工业SCADA和MES技术的双重优势,帮助企业实现生产效率和运营能力的全面提升。深度融合SCADA与MES,开启工业新纪元宏集Panorama COOX的诞生,源于我们对创新和卓越运营的不懈追求。通过战略性收购法国知名MES领域专
    宏集科技 2025-03-27 13:22 182浏览
  • 汽车导航系统市场及应用环境参照调研机构GII的研究报告中的市场预测,全球汽车导航系统市场预计将于 2030年达到472亿美元的市场规模,而2024年至2030年的年复合成长率则为可观的6.7%。汽车导航系统无疑已成为智能汽车不可或缺的重要功能之一。随着人们在日常生活中对汽车导航功能的日渐依赖,一旦出现定位不准确或地图错误等问题,就可能导致车主开错路线,平白浪费更多行车时间,不仅造成行车不便,甚或可能引发交通事故的发生。有鉴于此,如果想要提供消费者完善的使用者体验,在车辆开发阶段便针对汽车导航功能
    百佳泰测试实验室 2025-03-27 14:51 187浏览
  • 案例概况在丹麦哥本哈根,西门子工程师们成功完成了一项高安全设施的数据集成项目。他们利用宏集Cogent DataHub软件,将高安全设施内的设备和仪器与远程监控位置连接起来,让技术人员能够在不违反安全规定、不引入未经授权人员的情况下,远程操作所需设备。突破OPC 服务器的远程连接难题该项目最初看似是一个常规的 OPC 应用:目标是将高安全性设施中的冷水机(chiller)设备及其 OPC DA 服务器,与远程监控站的两套 SCADA 系统(作为 OPC DA 客户端)连接起来。然而,在实际实施过
    宏集科技 2025-03-27 13:20 109浏览
  • 文/陈昊编辑/cc孙聪颖‍2025 年,作为中国实施制造强国战略第一个十年计划的关键里程碑,被赋予了极为重大的意义。两会政府工作报告清晰且坚定地指出,要全力加速新质生产力的发展进程,推动传统产业全方位向高端化、智能化与绿色化转型。基于此,有代表敏锐提议,中国制造应从前沿技术的应用切入,逐步拓展至产业生态的构建,最终延伸到提升用户体验的维度,打出独树一帜、具有鲜明特色的发展牌。正是在这样至关重要的时代背景之下,于 AWE 2025(中国家电及消费电子博览会)这一备受瞩目的舞台上,高端厨房的中国方案
    华尔街科技眼 2025-03-25 16:10 82浏览
  • 在电子设计中,电磁兼容性(EMC)是确保设备既能抵御外部电磁干扰(EMI),又不会对自身或周围环境产生过量电磁辐射的关键。电容器、电感和磁珠作为三大核心元件,通过不同的机制协同作用,有效抑制电磁干扰。以下是其原理和应用场景的详细解析:1. 电容器:高频噪声的“吸尘器”作用原理:电容器通过“通高频、阻低频”的特性,为高频噪声提供低阻抗路径到地,形成滤波效果。例如,在电源和地之间并联电容,可吸收电源中的高频纹波和瞬态干扰。关键应用场景:电源去耦:在IC电源引脚附近放置0.1μF陶瓷电容,滤除数字电路
    时源芯微 2025-03-27 11:19 152浏览
  • 在智能语音产品的开发过程中,麦克风阵列的选型直接决定了用户体验的优劣。广州唯创电子提供的单麦克风与双麦克风解决方案,为不同场景下的语音交互需求提供了灵活选择。本文将深入解析两种方案的性能差异、适用场景及工程实现要点,为开发者提供系统化的设计决策依据。一、基础参数对比分析维度单麦克风方案双麦克风方案BOM成本¥1.2-2.5元¥4.8-6.5元信噪比(1m)58-62dB65-68dB拾音角度全向360°波束成形±30°功耗8mW@3.3V15mW@3.3V典型响应延迟120ms80ms二、技术原
    广州唯创电子 2025-03-27 09:23 154浏览
  • ​2025年3月27日​,贞光科技授权代理品牌紫光同芯正式发布新一代汽车安全芯片T97-415E。作为T97-315E的迭代升级产品,该芯片以大容量存储、全球化合规认证、双SPI接口协同为核心突破,直击智能网联汽车"多场景安全并行"与"出口合规"两大行业痛点,助力车企抢占智能驾驶与全球化市场双赛道。行业趋势锚定:三大升级回应智能化浪潮1. 大容量存储:破解车联网多任务瓶颈随着​车机功能泛在化​(数字钥匙、OTA、T-BOX等安全服务集成),传统安全芯片面临存储资源挤占难题。T97-415E创新性
    贞光科技 2025-03-27 13:50 148浏览
我要评论
0
1
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦