怎么使用 Yocto 构建文件系统?

发布时间 - 2025-07-17 00:00:00    点击率:
  1. 简介

yocto项目采用一种更加强大和定制的途径来构建适合嵌入式产品的linux系统。yocto不仅仅是一个制作文件系统的工具,同时提供了一整套基于linux的开发和维护工作流程,使得底层嵌入式开发者和上层应用开发者可以在统一的框架下进行开发,解决了传统开发方式下零散和无管理的开发问题。

Yocto是一个开源的“umbrella”项目,意味着它包含了许多子项目。Yocto将所有这些项目整合在一起,并提供了一个参考构建项目Poky,用于指导开发人员如何应用这些项目来构建嵌入式Linux系统。它包括Bitbake、OpenEmbedded-Core、板级支持包以及各种软件包的配置文件。可以构建出满足不同需求的系统,例如带有Qt5.14图形库的100ask-image-qt系统,全功能命令行系统100ask-image-core,以及基于ST官方weston系统及100ask-image-weston的系统。

100ASK_STM32MP157提供了符合Yocto的配置文件,帮助开发者构建可烧写到100ASK_STM32MP157_PRO板上的Linux系统镜像。Yocto还提供了丰富的开发文档资源,供开发者学习并定制自己的系统。由于篇幅有限,本文无法完整介绍Yocto的使用,请用户自行上网搜索。

本节适合需要对文件系统进行深度定制的开发者,希望从Yocto构建出符合100ASK_STM32MP157系列开发板的文件系统,同时满足其定制需求。初次体验使用或无特殊需要的开发者可以直接使用MYD-YA157C提供的文件系统。为了加速Yocto构建,100ASK_STM32MP157已经将相关软件打包好,开发者可以直接解压使用,减少重复下载的时间。注意:构建Yocto时不需要加载工具链环境变量,请创建新shell或打开新的终端窗口。

注意:以2.5Ghz主频的4核处理器、DDR4 8GB内存和200GB磁盘空间为例,编译100ask-image-core可能需要至少5个小时,而编译带有QT或weston界面的系统镜像可能需要10个小时以上。Yocto的最小支持配置建议在2GB内存、2核2.5Ghz处理器和100GB磁盘空间上进行。

注意:执行一键配置环境脚本以安装部分依赖包,否则在编译时会报错。

  1. 配置编译

为了运行以下命令,请确保已正确配置编译环境:

book@100ask:~/100ask_stm32mp157_pro-sdk/Yocto_Dunfell$ DISTRO=openstlinux-eglfs MACHINE=100ask source layers/meta-100ask-st/scripts/envsetup.sh

由于Yocto所需的软件包大部分保存在国外网站,国内下载速度较慢,因此需要单独拷贝资料光盘中的“07_Bsp_sdk (BSP包)/YoctoDunfell_Downloads.tar.gz”到“/home/book/100ask_stm32mp157_pro-sdk/Yocto_Dunfell/build-openstlinuxeglfs-100ask”目录下,然后执行“tar -xvf YoctoDunfell_Downloads.tar.gz”等待解压完成,会生成一个downloads文件夹,内含所有Yocto下载所需的软件包。

继续执行编译命令:

book@100ask:~/100ask_stm32mp157_pro-sdk/Yocto_Dunfell/build-openstlinuxeglfs-100ask$ bitbake 100ask-image-core

编译完成后,生成的目录镜像位于“book@100ask:~/100ask_stm32mp157_pro-sdk/Yocto_Dunfell/build-openstlinuxeglfs-100ask/tmp-glibc/deploy/images/100ask”目录内。

  1. 扩展命令

3.1 单独编译某个包

例如,单独编译内核,需要先清除之前的编译缓存再进行编译:

book@100ask:~/100ask_stm32mp157_pro-sdk/Yocto_Dunfell/build-openstlinuxeglfs-100ask$ bitbake virtual/kernel -c cleansstate
book@100ask:~/100ask_stm32mp157_pro-sdk/Yocto_Dunfell/build-openstlinuxeglfs-100ask$ bitbake virtual/kernel

编译某个包需要执行如下命令,其中pkg为包名,通常以.bb为后缀,加上-v参数可以输出编译详细信息:

book@100ask:~/100ask_stm32mp157_pro-sdk/Yocto_Dunfell/build-openstlinuxeglfs-100ask$ bitbake  -v

3.2 编译 SDK

编译完系统后,可以执行如下命令生成SDK包,用于后续针对系统的应用开发:

book@100ask:~/100ask_stm32mp157_pro-sdk/Yocto_Dunfell/build-openstlinuxeglfs-100ask$ bitbake meta-toolchain

编译完成后生成的压缩包通常位于“DISTRO/tmp-glibc/deploy/sdk”目录内。

3.3 其它命令

使用多线程编译,需要修改DISTRO里面的conf/local.conf配置文件,新增以下两个参数:

BB_NUMBER_THREADS ?= "8"
PARALLEL_MAKE ?= "-j 8"
  1. 深入学习 Yocto

目前国内针对Yocto的教程较为稀缺,可以参考Yocto官方提供的英文教程进行学习,资料网址为https://www.yoctoproject.org/docs/。可以优先阅读学习如下图红框所示的两份在线资料。

有几本基于Yocto项目开发的书籍推荐阅读:

国内有一位作者将左图中的《Embedded Linux Projects Using Yocto Project Cookbook》翻译成了中文版,国内可以在各大图书网站直接购买阅读。


# linux  # 处理器  # 工具  # ai  # qt  # using  # 线程  # 多线程  # https  # 应用开发  # 文件系统  # 软件包  # 镜像  # 是一个  # 配置文件  # 所需  # 可以直接  # 国内  # 自己的  # 链环 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何使用Blade模板引擎?(完整语法和示例)  nodejs redis 发布订阅机制封装实现方法及实例代码  如何快速生成ASP一键建站模板并优化安全性?  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  Laravel如何生成URL和重定向?(路由助手函数)  网站页面设计需要考虑到这些问题  如何用虚拟主机快速搭建网站?详细步骤解析  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  如何续费美橙建站之星域名及服务?  Mybatis 中的insertOrUpdate操作  Laravel如何配置和使用缓存?(Redis代码示例)  如何快速搭建高效WAP手机网站?  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  Java解压缩zip - 解压缩多个文件或文件夹实例  BootStrap整体框架之基础布局组件  免费网站制作appp,免费制作app哪个平台好?  Laravel如何使用Livewire构建动态组件?(入门代码)  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  怎么用AI帮你设计一套个性化的手机App图标?  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  香港服务器WordPress建站指南:SEO优化与高效部署策略  如何快速打造个性化非模板自助建站?  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  成都网站制作公司哪家好,四川省职工服务网是做什么用?  如何快速建站并高效导出源代码?  使用Dockerfile构建java web环境  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  JavaScript如何实现类型判断_typeof和instanceof有什么区别  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  如何在建站之星网店版论坛获取技术支持?  Python文件异常处理策略_健壮性说明【指导】  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  新三国志曹操传主线渭水交兵攻略  Laravel如何使用withoutEvents方法临时禁用模型事件  如何在阿里云完成域名注册与建站?  如何实现javascript表单验证_正则表达式有哪些实用技巧  如何快速查询网站的真实建站时间?  nginx修改上传文件大小限制的方法  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  Laravel中的withCount方法怎么高效统计关联模型数量  如何快速搭建个人网站并优化SEO?  Laravel如何创建自定义Artisan命令?(代码示例)  郑州企业网站制作公司,郑州招聘网站有哪些?  韩国服务器如何优化跨境访问实现高效连接?  网站制作价目表怎么做,珍爱网婚介费用多少?  JavaScript模板引擎Template.js使用详解