linux yocto 语法基础

一. bitbake 语法基础

• ?=: 若未定义或赋值,则使用上面的默认值,对同一个变量多次设置默认值,只有第一次有效

• ??=: 与普通设置默认值不同,弱默认值优先级最低。当变量未赋值且设置了默认值,且赋值发生在脚本解析之前时起作用。多次设置弱默认值,只有最后一次生效。

• +=:如果 a = ”111”,则 a += “222”,则 a = “111 222”

• =+:如果 a = “111”,则 a =+ “222”,则 a = “222 111”

• .=:类似 +=,但没有空格

• =.:类似 =+,但没有空格

• _append :如:B = “bval”,B_append = “附加数据”,B 的值为“bval 附加数据”

• _prepend :如:C = “cval”,C_prepend = “附加数据”,C 的值为“附加数据 cval”

• 变量 [flag] = xxx:如:FOO[b] = “123”,FOO[a] += “456”,变量 FOO 有两个标志,[a] 和 [b],值分别为“abc”和“abc” 456”。

• PV:当前模块软件包版本的简写,例如u-boot,PV=“2021.07”

• PR:当前模块软件包修订版本的简写,例如u-boot,PR=“r0”

• PN:PN是软件包名称,例如uboot:PN=“u-boot”

• ${D}:当前模块的镜像目录,例如u-boot:D=“/home/xxx/work/proj/build/tmp/work/poky-linux-musl/u-boot/1_2021.07-r0/image”

• ${S}:当前模块的源代码路径,可以使用bitbake -e linux-imx |查看grep ^S= 命令,例如 u-boot: S=“/home/xxx/work/proj/build /tmp/work/poky-linux-musl/u-boot/1_2021.07-r0/git”

• ${B} :当前模块的构建目录,例如 u-boot: B=“/home/xxx/work/proj/build/tmp/work/poky-linux-musl/u-boot/1_2021 .07-r0/build”

• ${WORKDIR} :当前工作目录,可以在 local.conf 中指定

• DL_DIR :git clone 文件放在环境变量 DL_DIR 指示的目录中,例如 uboot, DL_DIR=“/home/xxx/work/proj/build/downloads”

• TOPDIR:构建目录,TOPDIR=“/home/xxx/work/proj/build”

• OVERRIDES:是满足条件的所有覆盖的冒号分隔列表

• 编译后的 uboot/dtb/rootfs 位置:tmp/deploy/images/MACHINE/

• Toolchanin 位置:tmp/deploy/sdk/MACHINE/

• 如何重新编译 Linux 内核和 dtb 并将它们放在部署目录中:bitbake linux-imx -C compile

• 确定(查找)包名称:bitbake -s | grep XXX

• SRC_URI:git 存储库的地址

• SRCREV:git 存储库的提交编号

二. bitbake常用命令

• bitbake-layers create-layer …/meta-mylayer

• bitbake-layers add-layer …/meta-mylayer

• bitbake-layers show-layers

• bitbake-layers show-recipes

• bitbake -vDDD xxx-image

• bitbale -b xxx.bb

• 列出target的所有tasks
bitbake -c listtasks xxx

• 在linux-yocto recipe中查找变量
bitbake -e linux-yocto | grep -i ^KERNEL_PACKAGE_NAME=

• 查找target的源代码路径
bitbake -e | grep ^S=

• 查找target的工作路径
bitbake -e | grep ^WORKDIR=

• 解压并修补源代码
bitbake -c devshell
此命令将解压并修补源代码,并在自动设置环境的新终端中打开它。

• 列出配方的任务
bitbake -c listtasks

• 重现错误
bitbake -f

• 强制仅运行该特定任务
bitbake -c compile -f

• 查找日志
当发生构建错误时,您可以转到 build/tmp/work 目录以找到相应目标中的临时目录
下面有两个文件 log.do_. 和 run.do_.,通常我们只需要查看日志文件即可解决问题。
对于复杂的问题,您可能需要查看运行文件。
这两个文件不适用于 Python 任务,但日志信息会打印在终端上。

• 打印调试信息
有两种方法:
a.一种是Python形式,可以在控制台打印:bb.plain, bb.note, bb.warn, bb.error, bb.fatal, bb.debug
b. 另一种是bash形式,会包含在temp目录下的日志中,需要继承日志记录(包含在base.bbclass中,通常不会特别添加):bbplain, bbnote, bbwarn, bberror, bbfatal, bbdebug, 类似这样:
do_show_xxx() {
bbplain “MCTESTVAR=${MCTESTVAR}”
}
addtask do_show_xxx

• 打印当前和提供的软件包版本
bitbake --show-versions

• 将目标依赖项保存为点文件
bitbake -g

• 使用依赖项资源管理器显示依赖项
bitbake -g -u depexp

• 删除构建目录中软件包的原始内容
bitbake -c cleanall

• 工作目录 development
在本例中,我们使用构建目录下的 tmp/work 工作目录。当 Yocto 构建软件包时,使用工作目录 extract、patch、configure、build、package 源代码。我们可以直接在此目录中进行修改。我们通常在偶尔需要调试第三方软件包时使用此方法。
工作流程如下:
a. 删除构建目录中软件包的原始内容:bitbake -c cleanall
b. 让 bitbake 去获取、解包和修补软件包:bitbake -c patch
c.进入解压目录,然后修改,可以用git帮忙管理:bitbake -c devshell
d. 重新构建:bitbake -C compile
注意:这里用的是-C,表示编译完任务后,再编译所有任务。等于
bitbake -c compile
bitbake
e. 使用目标系统的包管理系统安装修改后的包并测试。
f. 根据步骤c中的改动生成patch,并添加到recipes的bbappend文件中。

• 当yocto构建完所有包后,会执行do_rootfs任务,执行以下命令找到rootfs位置
bitbake -e core-image-sato | grep ^IMAGE_ROOTFS=
注意IMAGE_ROOTFS变量不能配置和更改。路径中的内容随后会根据IMAGE_FSTYPES变量的类型生成对应的镜像

• Layers相关操作
bitbake-layers show-layers --> 显示已配置的Layer
bitbake-layers show-recipes --> 显示所有可用的Recipes
bitbake-layers show-overlayed --> 显示所有覆盖的Recipes
bitbake-layers show-appends --> 显示所有可用的Append文件
bitbake-layers flatten <output_dir> --> 创建包含所有已配置Layer、未覆盖的Recipes、Append文件的目录

• 选择特定的Providerr
添加PREFERRED_PROVIDER_virtual/kernel = “linux-imx”

• 选择特定的版本
可以添加PREFERRED_VERSION_linux-imx_mx6 = “3.10.17”

• 指定不使用某个版本
DEFAULT_PREFERENCE = “-1”

三. 添加新配方时要考虑的地方

添加新配方时,请考虑:
源代码存放在哪里?
源代码是git方式还是压缩包方式?
源代码的License?
编译架构makefile、bitbake…?
是否需要configure?
是否可以交叉编译,是否需要打补丁?
放在rootfs的哪个位置?
依赖项?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值