【问题标题】:How to add do_populate_sdk task to avro-c BitBake recipe?如何将 do_populate_sdk 任务添加到 avro-c BitBake 配方?
【发布时间】:2019-04-05 19:01:11
【问题描述】:

这个问题是 avro-c 特有的,但解决方案可能会推广到 OpenEmbedded BitBake 系统中的其他包。

如何为 avro-c 创建 do_populate_sdk 任务?

我想生成一个包含 avro-c 的 Yocto SDK。 meta-openembedded中的avro-c层很小:

avro
├── avro-c
│   └── 0001-avro-c-Fix-build-with-clang-compiler.patch
└── avro-c_1.8.1.bb

avro-c_1.8.1.bb 配方只有 20 行:

SUMMARY = "Apache Avro data serialization system."
HOMEPAGE = "http://apr.apache.org/"
SECTION = "libs"

LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=73bdf70f268f0b3b9c5a83dd7a6f3324"

DEPENDS = "jansson zlib xz"
PV .= "+git${SRCPV}"

SRCREV = "4b3677c32b879e0e7f717eb95f9135ac654da760"
SRC_URI = "git://github.com/apache/avro \
       file://0001-avro-c-Fix-build-with-clang-compiler.patch;patchdir=../../ \
"

S = "${WORKDIR}/git/lang/c"

LDFLAGS_append_libc-uclibc = " -lm"

inherit cmake

包含 avro-c 的目标镜像构建成功,ls /usr/bin/avro* 列出了 Avro 函数。

但是,主机 SDK 构建中不包含 avro-c。解决此问题的一种方法是尝试以下两个命令:

$ bitbake avro-c
$ bitbake avro-c -c populate_sdk

第一个命令成功完成。第二个命令失败并显示以下错误消息:

ERROR: Task do_populate_sdk does not exist for target avro-c (/home/rdepew/workspace/clean1/build/../layers/meta-sporian/recipes-support/avro/avro-c_1.8.1.bb:do_populate_sdk). Close matches:
do_populate_lic
do_populate_sysroot
ERROR: Command execution failed: 1

我在构建系统的其他层中寻找线索。似乎创建文件 avro-c_%.bbappend,包含单行

inherit nativesdk

或许可以解决问题,但这会产生另外两条 BitBake 错误消息:

ERROR: Nothing PROVIDES 'virtual/x86_64-pokysdk-linux-compilerlibs' (but /home/rdepew/workspace/clean1/build/../layers/meta-sporian/recipes-support/avro/avro-c_1.8.1.bb DEPENDS on or otherwise requires it). Close matches:
virtual/nativesdk-x86_64-pokysdk-linux-compilerlibs
virtual/x86_64-pokysdk-linux-go-crosssdk
virtual/x86_64-pokysdk-linux-gcc-crosssdk
ERROR: Required build target 'avro-c' has no buildable providers.
Missing or unbuildable dependency chain was: ['avro-c', 'virtual/x86_64-pokysdk-linux-compilerlibs']

...这就是我卡住的地方。我不知道从这里去哪里。

我研究过的网上地方:

我不知道列出我寻找答案的地方的 URL 是否合适。它们包括 Avro 的 GitHub 存储库、Yocto Project ADT 手册以及 StackOverflow 上的四个相关问题。如果合适,我将编辑此问题以包含 URL。

【问题讨论】:

    标签: sdk avro yocto bitbake openembedded


    【解决方案1】:

    您的食谱中需要以下行

    BBCLASSEXTEND = "nativesdk"
    

    这也扩展了为 sdk 构建的相同配方。详情请见here。

    编辑:

    do_populate_sdk:此任务仅适用于图像配方。这处理两个操作。

    1. 目标部分:为目标平台编译和安装头文件和库。
    2. 主机部分:根据SDKMACHINE安装库和头的主机部分

    在这些操作过程中,它通过检查BBCLASSEXTEND 变量找到SDK 所需的包列表,并构建nativesdk-<recipe_name> 以便在SDK 中将它们组合在一起。

    所以你有 do_populate_sdk 用于将包捆绑在一起的图像配方。

    查看yocto手册here了解更多详情。

    【讨论】:

    • 将 BBCLASS 语句添加到配方文件的末尾后,我仍然收到 Task do_populate_sdk does not exist 错误。我尝试将 BBCLASSEXTEND 语句放在 .bbappend 文件中。我验证了 .bbappend 文件已被处理,但我仍然收到错误消息。还有什么我需要添加到食谱中的吗?
    • 我忘记在我的评论中标记你了。
    • 你必须使用bitbake nativesdk-avro-c构建
    【解决方案2】:

    向 SDK(或 eSDK - 扩展 SDK)添加内容的正确方法是通过您选择的图像。所以,步骤是:

    • 给图片添加一个包:

      IMAGE_INSTALL_append = " avro-c"

    • 为您选择的图像创建 Yocto SDK:

      bitbake core-image-full-cmdline -c populate_sdk

    • 为您选择的图像创建 Yocto eSDK:

      bitbake core-image-full-cmdline -c populate_sdk_ext

    玩得开心! :-)

    【讨论】:

      猜你喜欢
      • 2016-04-13
      • 2019-05-19
      • 2021-07-14
      • 2018-11-13
      • 2016-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多