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的时候修改

posted on 2022-06-05 11:29  zlyang  阅读(910)  评论(0编辑  收藏  举报

导航