bitbake recipe执行流程
bitbake变量
PN: package name
DL_DIR: 下载目录
BB_CURRENTTASK: 当前task名称,do_fetch, do_unpack, do_configure, do_install, do_populate_sysroot等
BASE_WORKDIR: 一般为${TMPDIR}/work
WORKDIR:package工作目录,一般为${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}
RECIPE_SYSROOT: "${WORKDIR}/recipe-sysroot"
RECIPE_SYSROOT_NATIVE:"${WORKDIR}/recipe-sysroot-native"
S:package源码目录
B:package build目录
T:package temp目录
D:package install目录
SYSROOT_DESTDIR: populate_sysroot的目标目录
STAMPS_DIR:存放PN:taskname的操作记录,每次重新构建的时候判断是否需要执行
-
do_fetch
从指定位置下载package的文件到$ -
do_unpack
将下载的package文件释放到目录$ -
do_prepare_recipe_sysroot
准备package依赖的各种文件
'BB_TASKDEPDATA'中保存了PN:BB_CURRENTTASK依赖的其他PN:taskname
bitbake会检测依赖关系,遍历依赖的PN:taskname列表,到${SSTATE_MANIFESTS}目录找对应的manifest-{pkgarch}-{PN}.populate_sysroot
将manifest文件中记录的文件,复制到RECIPE_SYSROOT或RECIPE_SYSROOT_NATIVE中
staging_processfixme会将复制的文件中的FIXMExxx字符修改为符合当前package要求的路径
manifest中存放的文件路径一般在${COMPONENTS_DIR}中
native相关的放到recipe-sysroot-native目录下
target相关的放到recipe-sysroot目录下
复制方式为先尝试hard link,如果失败则copy
后续package执行的环境变量PATH会包含RECIPE_SYSROOT/RECIPE_SYSROOT_NATIVE
-
do_patch
打补丁 -
do_generate_toolchain_file/do_write_config, 可选
根据package的编译方式,生成编译文件
如果工程是meson的,执行do_write_config
如果工程是cmake的,执行do_generate_toolchain_file -
do_configure
执行各类工程中的'config'动作
automake的,执行configure
meson:执行meson ...
cmake的,执行cmake.. -
do_compile
编译文件 -
do_install
在${B}执行'make install',安装文件到$ -
do_populate_sysroot
将需要输出的文件放到¥{SYSROOT_DESTDIR}, 并在其下的sysroot-providers中创建${PROVIDES}文件,写入$ -
do_package
打包package文件 -
do_package_write_ipk/do_package_write_rpm
根据${PACKAGE_CLASSES}指定的打包格式,将package文件打包成.rpm或.ipk,将package信息写入$
sstate_installpkgdir作为一些task的postfuncs执行,将相关文件安装到${COMPONENTS_DIR}目录,将文件中与工程相关的绝对路径,替换为FIXME变量
以供后续其他package 执行populate_sysroot的时候修改