如何使用Yocto变量将Kirkstone版本构建镜像复制至指定目录?
基于Yocto Kirkstone版本复制构建镜像的方法
方法一:自定义BitBake自动复制任务
通过添加自定义BitBake类,让镜像构建完成后自动执行复制操作:
- 在自定义层中创建
classes/image-copy.bbclass文件,写入以下内容:
# 给镜像后处理命令添加自定义复制步骤 IMAGE_POSTPROCESS_COMMAND += "copy_custom_images;" copy_custom_images() { # 定义目标目录,TOPDIR是Yocto内置的构建根目录变量 DEST_DIR="${TOPDIR}/../build/new_directory" # 确保目标目录存在 mkdir -p "${DEST_DIR}" # 复制当前机器的所有镜像文件,可根据需求过滤类型 cp "${DEPLOY_DIR_IMAGE}/"*"${MACHINE}"* "${DEST_DIR}/" # 示例:仅复制rootfs压缩包和wic镜像 # cp "${DEPLOY_DIR_IMAGE}/"*"${MACHINE}"*.rootfs.tar.xz "${DEPLOY_DIR_IMAGE}/"*"${MACHINE}"*.wic "${DEST_DIR}/" }
- 在你的镜像配方(如
core-image-minimal.bb)中添加继承,或者在build/temp/conf/local.conf里追加:
INHERIT += "image-copy"
后续构建镜像时,完成后会自动把文件复制到目标目录。
方法二:结合Yocto环境变量的手动脚本
先加载Yocto构建环境,再通过脚本批量复制:
- 创建
copy-images.sh脚本:
#!/bin/bash # 加载Yocto构建环境(temp为你的build子目录) source oe-init-build-env temp > /dev/null 2>&1 # 设置目标目录 DEST_DIR="${TOPDIR}/../build/new_directory" mkdir -p "${DEST_DIR}" # 利用Yocto内置变量复制镜像 cp "${DEPLOY_DIR_IMAGE}/"*"${MACHINE}"* "${DEST_DIR}/" echo "镜像已成功复制到 ${DEST_DIR}"
- 赋予脚本执行权限并运行:
chmod +x copy-images.sh ./copy-images.sh
方法三:直接在终端执行复制命令
加载Yocto环境后,直接执行以下命令:
# 创建目标目录 mkdir -p ../build/new_directory # 复制镜像,DEPLOY_DIR_IMAGE和MACHINE为Yocto内置变量 cp ${DEPLOY_DIR_IMAGE}/*${MACHINE}* ../build/new_directory/
注意事项
${DEPLOY_DIR_IMAGE}是Yocto内置变量,对应路径就是../build/temp/deploy/images/<$MACHINE>/,无需手动硬编码路径${MACHINE}会自动替换为当前构建的机器名称,确保复制的是对应机器的镜像- 可根据需求调整复制的文件后缀,避免复制日志、符号链接等非必要文件
内容的提问来源于stack exchange,提问作者rpr
相关产品推荐
相关产品推荐

