构建输出的内容全部存放在tmp目录下。而tmp目录是由TMPRDIR变量指定的默认目录,存放这所有的构建输出和中间文件。
以下是tmp目录的结构:
tmp
├── abi_version
├── buildstats
├── cache
├──
deploy
├── images
├── licenses
├── sdk
├── rpm
├── deb
└── ipk
├── log
├── sstate-control
├── stamps
├── sysroots-components
├── sysroots-uninative
├── sysroots
├── work
├── all-poky-linux
├── core2-64-poky-linux
├── qemux86_64-poky-linux
└── x86_64-linux
└── work-shared
以下是对上面结构中比较重要目录和其子目录的解释:
buildstats:存储构建统计信息,用于分析和优化构建过程。
cache:包含各种缓存文件,以加速构建过程。
deploy:用于存放构建生成的最终输出,包括镜像、许可证、SDK和软件包等。
- images:存放构建生成的镜像文件。
- licenses:存放软件包的许可证文件。
- sdk:存放软件开发工具包。
- rpm、deb、ipk:分别存放以RPM、Debian和IPK格式打包的文件。
hosttools:包含构建过程中需要的主机工具。
log:存放构建日志文件。
sstate-control:存放用于共享状态缓存的masnifest文件。
stamps:包含各种时间戳文件,用于跟踪构建步骤。
sysroots-components、sysroots-uninative:包含系统根目录组件和非本地系统根目录。
work:构建过程中生成的工作目录和中间文件。
- all-poky-linux、core2-64-poky-linux、qemux86_64-poky-linux、x86_64-linux:分别对应不同架构和目标平台的工作目录。
work-shared:存放共享的工作目录文件。
对于构建过程中的构建输出主要存放发在work和deploy目录下,一个存放构建过程的临时文件,一个存放最终的输出文件。两个目录都是在平时实践中会经常访问的目录,下面给出有关两个目录的详细讲解。
work目录结构
work目录是poky/meta/conf/bitbake.conf文件BASE_WORKDIR变量定义的默认目录:
BASE_WORKDIR ?= "${TMPDIR}/work"
work目录的主要目的是为了存放构建菜谱时产生的所有输出文件。构建指定菜谱时的输出文件存放位置是由WORKDIR变量定义的,WORKDIR变量是由一系列变量组合而成的,其定义规则如下:
${TMPDIR}/work/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}
实际存放的目录路径和名字取决于以下几个变量:
- TMPDIR: 顶级构建输出目录。
- MULTIMACH_TARGET_SYS: 目标系统标识符。
- PN: 菜谱名称。
- EXTENDPE: 时代号。如果PE未指定(大多数菜谱情况下如此),则EXTENDPE为空。
- PV: 菜谱版本。
- PR: 菜谱修订版。
以在Poky的默认构建环境的build目录中构建foo_1.3.0-r0.bb菜谱为例,构建目录为poky/build,目标系统为qemux86-poky-linux,那么BitBake构建引擎用来构建该菜谱的工作目录如下所示:
poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0
deploy目录结构
deploy目录是用于存放BitBake构建引擎构建生成的最终输出的目录,其中主要包括镜像文件,软件包和应用开发SDK工具。
在构建系统poky/meta/conf/bitbake.conf文件下可以找到相关目录设置变量的初始值如下:
DEPLOY_DIR ?= "${TMPDIR}/deploy"
DEPLOY_DIR_IPK = "${DEPLOY_DIR}/ipk"
DEPLOY_DIR_RPM = "${DEPLOY_DIR}/rpm"
DEPLOY_DIR_DEB = "${DEPLOY_DIR}/deb"
DEPLOY_DIR_IMAGE ?= "${DEPLOY_DIR}/images/${MACHINE}"
deploy/sdk目录被SDK_DEPLOY变量设置,可以在poky/meta/classes-recipe/populate_sdk_base.bbclass文件下找到。
SDK_DEPLOY = "${DEPLOY_DIR}/sdk"
这里最重要的就是构建输出镜像文件会放在images目录下根据MACHINE变量设置的子目录下。