You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从核心镜像配方获取指定配方的PN-src RPM包?

核心镜像配方收集指定RPM源码包的实现指引

获取指定配方的TARGET与版本

  • 直接利用BitBake内置能力获取元数据:
    • 要获取配方的存放路径,使用${@bb.parse.BBHandler.get_file_location('你的配方名')},从路径中可提取TARGET相关信息;
    • 版本信息可通过配方的${PV}变量获取,若要在核心配方中提取指定配方的版本,执行bitbake -e 目标配方名 | grep '^PV='即可;
    • 完整的部署路径(即你提到的deploy/[TARGET]/)可通过bitbake -e 目标配方名输出中的DEPLOY_DIR_RPMS变量直接拿到。

复用现有工具复制RPM源码包

  • 无需自行编写find逻辑,直接结合BitBake变量与简单脚本实现:
    • 在核心配方的自定义任务中,遍历指定的配方列表,通过bitbake -e获取每个配方的部署路径,再复制对应的源码包;
    • 示例脚本逻辑(嵌入配方任务):
      # 先在配方中定义要收集的配方列表,比如:SRC_RPM_RECIPES = "recipeA recipeB"
      mkdir -p ${WORKDIR}/tmp_src_rpms
      for recipe in ${SRC_RPM_RECIPES}; do
          deploy_path=$(bitbake -e $recipe | grep '^DEPLOY_DIR_RPMS=' | cut -d '"' -f2)
          cp ${deploy_path}/*src.rpm ${WORKDIR}/tmp_src_rpms/
      done
      # 将收集到的包打包归档到部署目录
      tar -czf ${DEPLOY_DIR}/core-image-src-rpms.tar.gz -C ${WORKDIR}/tmp_src_rpms .
      
  • 也可使用recipetool辅助工具,通过recipetool get --deployed参数直接获取已构建的RPM源码包,省去路径查找步骤。

配方任务的正确实现方式

  • 给核心镜像配方添加自定义任务时,需依赖目标配方的deploy任务,确保源码包已构建完成:
    # 定义需收集的配方列表
    SRC_RPM_RECIPES = "recipe1 recipe2"
    
    # 配置自定义任务依赖,确保目标配方的RPM已部署完成
    do_collect_src_rpms[depends] = "${@' '.join([f'{r}:do_deploy_rpm' for r in d.getVar('SRC_RPM_RECIPES').split()])}"
    
    do_collect_src_rpms() {
        mkdir -p ${WORKDIR}/collected_src_rpms
        for recipe in ${SRC_RPM_RECIPES}; do
            deploy_dir=$(bitbake -e $recipe | grep '^DEPLOY_DIR_RPMS=' | cut -d '"' -f2)
            cp ${deploy_dir}/*src.rpm ${WORKDIR}/collected_src_rpms/ || true
        done
        tar -czf ${DEPLOY_DIR}/core-image-combined-src-rpms.tar.gz -C ${WORKDIR}/collected_src_rpms .
    }
    
    # 将任务插入到镜像构建流程的合适阶段,比如根文件系统生成后、镜像打包前
    addtask collect_src_rpms after do_rootfs before do_image
    

内容的提问来源于stack exchange,提问作者ozimki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 20:37:39