yocto 用法(随手笔记,记录以备不时之需)

一、yocto常用变量:

变量查看指令:

usage: bitbake-getvar -h -r RECIPE -u -f FLAG --value -q variable

demo:

查看变量PN的值: bitbake-getvar -r meta-toolchain PN

获取 hello 配方生成的子包名称 :bitbake-getvar -r hello PACKAGES

常用variable:

BSPDIR: 代码根目录(source 父目录)

BBPATH: 将 layer 的根目录添加到 BitBake 的搜索路径

BBFILES: 定义 layer 中所有 recipes 的位置。

BBFILE_COLLECTIONS:定义了当前层中所有配方的位置。

BBFILE_PATTERN: 在解析过程中立即展开,提供层的目录。

BBFILE_PRIORITY: 建立了一个优先级,当 OpenEmbedded 构建发现不同层中的同名配方时,该层中的配方将被使用。

LAYERVERSION:为图层建立一个版本号,你可以在使用 LAYERDEPENDS 变量时使用这个版本号来指定这个图层的确切版本作为依赖关系。

LAYERDEPENDS: 列出这个图层所依赖的所有图层(如果有的话)。

LAYERSERIES_COMPAT: 列出当前版本兼容的 Yocto 项目版本。

THISDIR : ​ bb或bbappend文件所在目录,位于配方(recipe)文件中

PACKAGE_INSTALL:​ 传递给包管理器以安装到映像中的包的最终列表。

DEPLOY_DIR:​ 最终image和SDK输出的目录,默认值为build/tmp/deploy/

IMAGE_INSTALL:​ 该变量指明Package Feeds 区域安装的基本软件包集中,哪些包(模块)最终要打包到image,

该变量一般位于编译目标层的conf/local.conf.sample文件中(如有需要可在此文件中修改),这个文件将被解析到build/conf/layer.conf文件中。

注意与FILES差异,FILES是指明软件包内部哪些文件需要参与打包,而IMAGE_INSTALL是指明哪个软件包需要参与打包。

​ 一个简单示例:

IMAGE_INSTALL_append += "rsa"

PACKAGE_EXCLUDE:​ 指定不应安装到image中的包。

IMAGE_FEATURES:​ 指定要包含在图像中的特征,大多数这些功能映射到其他安装包(未能弄明白具体作用)。

IMAGE_LINGUAS:​ 确定安装附加语言支持包的语言,该变量一般位于编译目标层的conf/local.conf.sample文件中(如有需要可在此文件中修改),这个文件将被解析到build/conf/layer.conf文件中。默认情况下为:

~/xxx$ bitbake -e rsa | grep ^IMAGE_LINGUAS

IMAGE_LINGUAS="en-us en-gb"

其他:BBLAYERS 、 IMAGE_INSTALL 、 IMAGE_FEATURES 、PACKAGE_EXCLUDE 可以用 _append 和 _remove 语法修改 IMAGE_INSTALL/IMAGE_FEATURES 变量的内容

LAYERDIR PN /PV /PR(package name/version/revision )/BP ({BPN}-{PV}) MACHINE DISTRO IMAGE_ROOTFS IMAGE_ROOTFS_SIZE IMAGE_OVERHEAD_FACTOR IMAGE_ROOTFS_EXTRA_SPACE DEPENDS

THISDIR FILESPATH WORKDIR FILESEXTRAPATHS_prepend)

demo: bitbake -e linux-imx | grep -E "^PN=|^PV=|^PR=|^BP"

BP="linux-imx-6.1.y+gitAUTOINC+770c5fe2c1"

BPN="linux-imx"

PN="linux-imx"

PR="r0"

PV="6.1.y+gitAUTOINC+770c5fe2c1"

demo:

bitbake-getvar -r linux-imx --value THISDIR : /xxx/sources/meta-imx/meta-bsp/recipes-kernel/linux

bitbake-getvar -r linux-imx --value WORKDIR : /xxx/build_imx6ull/tmp/work/imx6ullevk-poky-linux-gnueabi/linux-imx/6.1.y+gitAUTOINC+770c5fe2c1-r0

bitbake-getvar -r led-apis --value WORKDIR : /xxx/guardian_nxp/build_imx6ull/tmp/work/cortexa7t2hf-neon-poky-linux-gnueabi/ led-apis/0.1-r0

bitbake-getvar -r led-apis --value systemd_system_unitdir : /lib/systemd/system

bitbake-getvar -r led-apis --value systemd_unitdir : /lib/systemd

bitbake-getvar -r led-button-api --value includedir : /usr/include

二、bitbake命令查找功能:(以linux-imx recipe为例)

查找SRC_URI: bitbake -e linux-imx | grep ^SRC_URI=

定位 recipe 文件的位置: bitbake -e linux-imx | grep ^FILE=

定位 recipe 依赖的 conf、bbclass 、bbappend 文件:

bitbake -e linux-imx | grep ^BBINCLOUD=

定位构建这个包时的工作目录: bitbake -e linux-imx | grep ^WORKDIR=

定位源码解压后的位置: bitbake -e linux-imx | grep ^S=

定位源码的编译目录: bitbake -e linux-imx | grep ^B=

查看当前yocto编译的所有包: bitbake -s

三、yocto 变量优先级

Yocto 变量优先级顺序:

bb (recipe)

→ bbappend

→ distro

→ machine

→ local.conf

→ image

👉 后面永远覆盖前面

查看是否有factory*.bb的recipes

bitbake-layers show-recipes | grep factory

factory-audio-tools:

factory-bluetooth-tools:

factory-buzzer-tools:

factory-charger-tools:

factory-key_headset-tools:

factory-led-tools:

factory-mount-devinfo-tools:

factory-ntc-tools:

factory-rtc-tools:

factory-sensor-tools:

factory-test-bins:

factory-wifi-tools:

四、常见错误

常见QA 错误和警告消息: https://docs.yoctoproject.org/ref-manual/qa-checks.html https://blog.csdn.net/buffoonnnn/article/details/134464160

编译错误:

do_package: QA Issue: led-apis: Files/directories were installed but not shipped in any package:

/lib

/lib/systemd

/lib/systemd/system

/lib/systemd/system/led-apis.service

解决:

The override syntax changed in more recent versions so it would be FILES:{PN} instead of FILES_{PN} and SYSTEMD_SERVICE:${PN}

systemd_system_unitdir = "/lib/systemd/system"

systemd_unitdir -> /lib/systemd

Skip QA errors for installed but not shipped files

#INSANE_SKIP_${PN} += "installed-vs-shipped"

#INSANE_SKIP_${PN} += "arch"

Alternative method to skip all QA checks (use with caution)

QA_SKIP_ALL = "True"

INSANE_SKIP:${PN} += "file-rdeps" : 跳过QA检查,可以把在bin文件中直接使用*.so

//ERROR: uvoice-ecnr-demo-1.0-r0 do_package_qa: QA Issue: /usr/bin/uvoice-ecnr-demo contained in package uvoice-ecnr-demo requires libuv_alsa.so, but no providers found in RDEPENDS:uvoice-ecnr-demo? file-rdeps

INSANE_SKIP:${PN}-dev += "dev-elf"

INSANE_SKIP:${PN} += "dev-so" :跳过QA检查,可以把*.so打包进运行的rootfs中 必须同时设置 FILES_SOLIBSDEV = ""合作

//ERROR: uvoice-sdk-api-1.0-r0 do_package_qa: QA Issue: -dev package uvoice-sdk-api-dev contains non-symlink .so '/usr/lib/libuv_alsa.so' -dev package uvoice-sdk-api-dev contains non-symlink .so '/usr/lib/libuvoice_ecnr_sdk.so' dev-elf

本地编译优化:设置为在本地计算机中的任何位置。通过添加以下语句来创建 local.conf 文件

DL_DIR="/opt/freescale/yocto/imx/download"

SSTATE_DIR="/opt/freescale/yocto/imx/sstate-cache"

要安装其他软件包,可在<build dir>/ local.conf 中添加以下行。

CORE_IMAGE_EXTRA_INSTALL += "<package_name1 package_name2>"

bitbake 日志:

BitBake 将构建和打包过程记录在 tmp/work/<architecture>/<component>/temp 临时目录中。

如果组件无法获取包,则错误信息将显示在 log.do_fetch 文件中。 如果组件未能编译,则错误信息将显示在 log.do_compile 文件中。

组件有时候不能按预期部署。请检查构建组件目录下的目录(tmp/work/<architecture>/<component>)。检查每个配方的包、packages-split 和 sysroot*目录,查看文件是否放在了那里

相关推荐
胡图图不糊涂^_^3 小时前
测试用例篇——设计测试用例的方法
笔记·学习·测试用例·判定表法·正交法生成用例测试·等价类·边界值
IT19954 小时前
Dify笔记-知识库创建后设置和召回测试
笔记·dify
飞翔中文网4 小时前
Java学习笔记之抽象类
java·笔记·学习
中屹指纹浏览器5 小时前
2026指纹浏览器行为指纹对抗技术详解:从算法识别到真人模拟全方案
经验分享·笔记
2301_809051146 小时前
Linux 数据库开发 学习笔记
笔记·学习·数据库开发
很楠爱上6 小时前
Node.js 模块化学习笔记
笔记·学习·node.js
mnasd6 小时前
RockyLinux 9.5 部署 Kubernetes1.35 集群
笔记
東隅已逝,桑榆非晚7 小时前
编译和链接
c语言·笔记
05候补工程师7 小时前
【考研高数核心突破】极限的本质、高频解题套路与海涅定理深度解析(附经典例题思维导图式拆解)
经验分享·笔记·考研·算法