- 简介
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磁盘空间上进行。
注意:执行一键配置环境脚本以安装部分依赖包,否则在编译时会报错。
- 配置编译
为了运行以下命令,请确保已正确配置编译环境:
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”目录内。
- 扩展命令
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 <pkg> -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"
- 深入学习 Yocto
目前国内针对Yocto的教程较为稀缺,可以参考Yocto官方提供的英文教程进行学习,资料网址为https://www.yoctoproject.org/docs/。可以优先阅读学习如下图红框所示的两份在线资料。
有几本基于Yocto项目开发的书籍推荐阅读:
国内有一位作者将左图中的《Embedded Linux Projects using Yocto Project Cookbook》翻译成了中文版,国内可以在各大图书网站直接购买阅读。