一、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*目录,查看文件是否放在了那里