【问题标题】:Generate a file and deploy it to image, inside a yocto recipe在 yocto 配方中生成一个文件并将其部署到映像中
【发布时间】:2019-10-03 23:07:57
【问题描述】:

我需要根据配方的内容生成某种清单。该文件也需要部署到镜像中。

为了生成文件,我在很多bbclasses中看到python代码函数的使用方式类似,例如:

      python do_create_manifest () {
          [...]
          filename = d.expand("${D}${LOC}/${MANIFEST_NAME}")
          [...]
          with open (filename,'w') as manifest_file:
             json.dump(manifest_dict, manifest_file, indent=True)
          os.chmod(filename, 0o644)
      }
  • 还有其他首选方式吗?

该文件是在添加任务依赖后创建的,但是打包该文件时,文件中会出现host-user-contaminated警告。

尽管我在许多食谱中看到了以下用途:

        chown -R root:root ${D}${...}/${...}

这会失败,因为 chown 需要由 root 运行,而 bitbake 由当前用户运行:

Log data follows:
| DEBUG: Executing shell function do_uncontaminate
| chown: changing ownership of '/mnt/thud/build-r0w/[...]/manifest.json': Operation not permitted
| WARNING: exit code 1 from a shell command.
  • 在这种情况下,我该如何解决 host-user-contaminate 警告?

注意:我知道这会阻止警告出现,但不能解决问题。

    INSANE_SKIP_${PN} = "host-user-contaminated"

【问题讨论】:

  • 你能分享完整的食谱吗? (以及完整的错误日志)。
  • 你好@danlor,代码在一个类中,配方太长,无法添加到这个问题中。我添加了给定的错误

标签: yocto bitbake openembedded


【解决方案1】:

您没有指定此文件的创建位置,filename 包含的路径,但从错误中我怀疑您直接在某处的 ${D} 下创建它。

如果您改为创建清单文件,例如${B},然后在常规 do_install 期间使用例如安装它install -Dm0644 ${B}/my_manifest ${D}/dest/path/my_manifest 所有权问题将与配方安装的任何其他文件一样得到处理。

只要确保 do_create_manifest 任务在 do_install 之前运行即可。

【讨论】:

  • 没错,这解决了问题。我已经完成了一些问题来澄清你的第一个假设,我实际上是把文件放在 ${D} 中。把它放在 ${B} 中不是更正确吗?
  • @urnenfeld 是的 ${B} 可能更合适,但我认为它在这种情况下没有实际效果。我已经更新了回复。
猜你喜欢
  • 2021-10-19
  • 2018-12-31
  • 2019-04-10
  • 1970-01-01
  • 1970-01-01
  • 2017-08-02
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
相关资源
最近更新 更多