41 使用 bblock 锁定和解锁配方

按照设计,OpenEmbedded 构建系统从头构建所有内容,除非 BitBake 判断某些 任务无需重新构建。启动时,它根据任务输入计算所有任务的签名,再与共享状态 缓存中的签名(如果存在)比较。任何变化都会导致任务重新执行。

开发期间,即使知道某些配方暂时无需重新构建,修改仍可能触发 BitBake 重建它们。例如,修改配方可能导致重建其本机版本,而这未必必要。编辑 python3 配方时,BitBake 可能重新构建 python3-native 及所有依赖它 的配方。

为避免这种情况,可以用 bblock 将特定任务或配方锁定到指定签名, 强制 BitBake 对它们使用共享状态缓存。

警告

仅在开发阶段使用 bblock。

不论输入是否变化都强制 BitBake 使用共享状态缓存,意味着配方元数据 不再直接反映输出。请谨慎使用此功能。如果不理解签名变化的原因,请参阅 了解发生了哪些变化 一节。

41 锁定任务和配方

锁定一个配方:

$ bblock recipe

也可以用空格分隔配方名称,一次锁定多个配方:

$ bblock recipe1 recipe2

锁定配方意味着锁定其全部任务。如果只需锁定特定任务,使用 -t 选项, 并以逗号分隔任务列表:

$ bblock -t task1,task2 recipe

41 解锁任务和配方

使用 -r 选项解锁配方:

$ bblock -r recipe

也可以用空格分隔配方名称,一次解锁多个配方:

$ bblock -r recipe1 recipe2

解锁配方意味着解锁其全部任务。如果只需解锁特定任务,使用 -t 选项, 并以逗号分隔任务列表:

$ bblock -r -t task1,task2 recipe

不指定配方即可解锁所有配方:

$ bblock -r

41 配置文件

bblock 将签名写入 build/conf/bblock.conf 文件。 meta/conf/bitbake.conf 默认包含该文件。

使用 -d 选项显示文件内容:

$ bblock -d

41 锁定机制

bblock 计算任务的签名,并设置以下三个变量:SIGGEN_LOCKEDSIGS、 SIGGEN_LOCKEDSIGS_TYPES 和 SIGGEN_LOCKEDSIGS_TASKSIG_CHECK。

具体而言,bblock 设置:

SIGGEN_LOCKEDSIGS_TASKSIG_CHECK = "info"
SIGGEN_LOCKEDSIGS_TYPES += "${PACKAGE_ARCHS}"

SIGGEN_LOCKEDSIGS_<package_arch> += "<recipe>:<task>:<signature>"

这会生成针对架构的锁定设置,并提醒用户某些任务的签名已锁定。

41 示例

修改 python3 配方时,可以如下锁定 python3-native:

$ bblock python3-native
$ bblock -d
# Generated by bblock
SIGGEN_LOCKEDSIGS_TASKSIG_CHECK = "info"
SIGGEN_LOCKEDSIGS_TYPES += "${PACKAGE_ARCHS}"

SIGGEN_LOCKEDSIGS_x86_64 += "python3-native:do_patch:865859c27e603ba42025b7bb766c3cd4c0f477e4962cfd39128c0619d695fce7"
SIGGEN_LOCKEDSIGS_x86_64 += "python3-native:do_populate_sysroot:f8fa5d3194cef638416000252b959e86d0a19f6b7898e1f56b643c588cdd8605"
SIGGEN_LOCKEDSIGS_x86_64 += "python3-native:do_prepare_recipe_sysroot:fe295ac505d9d1143313424b201c6f3f2a0a90da40a13a905b86b874705f226a"
SIGGEN_LOCKEDSIGS_x86_64 += "python3-native:do_fetch:1b6e4728fee631bc7a8a7006855c5b8182a8224579e32e3d0a2db77c26459f25"
SIGGEN_LOCKEDSIGS_x86_64 += "python3-native:do_unpack:2ad74d6f865ef75c35c0e6bbe3f9a90923a6b2c62c18a3ddef514ea31fbc588f"
SIGGEN_LOCKEDSIGS_x86_64 += "python3-native:do_deploy_source_date_epoch:15f89b8483c1ad7507480f337619bb98c26e231227785eb3543db163593e7b42"
SIGGEN_LOCKEDSIGS_x86_64 += "python3-native:do_configure:7960c13d23270fdb12b3a7c426ce1da0d2f5c7cf5e5d3f5bdce5fa330eb7d482"
SIGGEN_LOCKEDSIGS_x86_64 += "python3-native:do_compile:012e1d4a63f1a78fc2143bd90d704dbcf5865c5257d6272aa7540ec1cd3063d9"
SIGGEN_LOCKEDSIGS_x86_64 += "python3-native:do_install:d3401cc2afa4c996beb154beaad3e45fa0272b9c56fb86e9db14ec3544c68f9d"
SIGGEN_LOCKEDSIGS_x86_64 += "python3-native:do_build:fa88bb7afb9046c0417c24a3fa98a058653805a8b00eda2c2d7fea68fc42f882"
SIGGEN_LOCKEDSIGS_x86_64 += "python3-native:do_collect_spdx_deps:cc9c53ba7c495567e9a38ec4801830c425c0d1f895aa2fc66930a2edd510d9b4"
SIGGEN_LOCKEDSIGS_x86_64 += "python3-native:do_create_spdx:766a1d09368438b7b5a1a8e2a8f823b2b731db44b57e67d8b3196de91966f9c5"
SIGGEN_LOCKEDSIGS_x86_64 += "python3-native:do_create_package_spdx:46f80faeab25575e9977ba3bf14c819489c3d489432ae5145255635108c21020"
SIGGEN_LOCKEDSIGS_x86_64 += "python3-native:do_recipe_qa:cb960cdb074e7944e894958db58f3dc2a0436ecf87c247feb3e095e214fec0e4"
SIGGEN_LOCKEDSIGS_x86_64 += "python3-native:do_populate_lic:15657441621ee83f15c2e650e7edbb036870b56f55e72e046c6142da3c5783fd"
SIGGEN_LOCKEDSIGS_x86_64 += "python3-native:do_create_manifest:24f0abbec221d27bbb2909b6e846288b12cab419f1faf9f5006ed80423d37e28"
SIGGEN_LOCKEDSIGS_x86_64 += "python3-native:do_addto_recipe_sysroot:bcb6a1905f113128de3f88d702b706befd6a786267c045ee82532759a7c214d7"