【问题标题】:Why can't a Yocto SDK build a Yocto SDK?为什么 Yocto SDK 不能构建 Yocto SDK?
【发布时间】:2019-08-05 13:15:36
【问题描述】:

这里有一组相关的问题,因为我怀疑我问错了问题。相关问题可能有助于某人辨别我的基本误解是什么。

我已经解决了:

我正在寻找一个可以使用 bitbake 的单一构建环境,并为不同的目标架构构建产品。

这似乎就是 Yocto/OE 的圣杯。

似乎最实用的 x86_64 环境来自:

git clone git://git.yoctoproject.org/poky

它比 SDK 更强大,但我如何为另一个平台交叉构建这个环境?

是否有与git clone'd 环境一样功能的 SDK?这意味着它有一个有效的 bitbake,我可以为不同的目标交叉构建可启动映像?

问题:

  • 为什么 SDK 不能构建 SDK? (例如http://downloads.yoctoproject.org/releases/yocto/yocto-2.6/buildtools/

    • 为什么 SDK 甚至不包括 bitbake? (ext SDK 可以,但不喜欢将其添加到路径中)。
    • 为什么具有正确来源的 env(并将 bitbake 添加到路径)的可扩展 SDK 似乎更喜欢发行版安装的构建工具而不是 SDK 中的构建工具? (当直接使用 bitmake 而不是 devtool 时)
  • 为什么 SDK 显然与为特定机器或架构构建相关联,而显然无法为不同架构交叉构建?构建 SDK 的过程甚至希望提前指定最终架构

我习惯的是一个 build-sysroot,它的跨工具链在某种 pseudo/proot/chroot 下运行,我的源代码安装在其中。

我意识到 Yocto/bitbake 在后台执行此操作,所有的配方缓存看起来都很棒,git clone checkout 看起来很强大,devtool 工作流程看起来很棒,但是当我尝试标准化这个环境的生成时,一切都失败了,或使其交叉编译。

(我希望从包含一些本地 conf 文件的目标目录中获取环境文件以专门构建,然后使用 bitbake 进行构建)

我错过了什么? - 感谢您阅读本文 ;-)

【问题讨论】:

  • 我从未尝试过 ext-sdk,但我通常做的是直接使用 Yocto 层和食谱,使用 pokymeta-openembedded 以及制造商层,即 meta-intel。然后我添加一个用于发行版细节的个人层和另一个用于 BSP 修改的层。如果我想支持多台机器,我添加相应的vendor层+个人BSP层。我(詹金斯工作)只为开发人员生成标准 SDK,他们通常只在一台特定的机器上工作。不知道这是否有帮助。

标签: sdk yocto extensible


【解决方案1】:

SDK 是一个通用词,在 yocto 的上下文中,它可能会被误读,因此您的问题是合法的。

Yocto 是构建完全自定义映像的绝佳工具,并且可以根据在线获取的源在所有级别(引导加载程序、内核、应用程序)进行调整。 您可以使用 yocto 生成的 SDK 引用自文档:

标准 SDK 提供交叉开发工具链和库 根据特定图片的内容量身定制。

根据我对 Yocto 的小经验,您可以使用元层来创建和自定义您的环境。当您的环境设置好后,您可以生成一个 SDK,以便为您的目标机器轻松交叉编译您的应用程序。 对于只专注于项目应用部分的开发人员来说,Yocto 工具过于强大、沉重和复杂。另一端的 SDK 非常适合该用途,但您无法使用它更改工具链中的任何内容,您只能使用它。例如,如果需要在运行时库中应用错误或补丁,则需要重新生成 SDK 并将此新版本提供给开发人员。

简短的解释:

它比 SDK 更强大,但我如何交叉构建它 其他平台的环境?

您需要自定义 Yocto 元层以从一个平台更改为另一个平台。

是否有与这个 git clone'd 环境一样功能的 SDK? 这意味着它有一个有效的 bitbake,我可以交叉构建可启动映像 针对不同的目标?

不,我不这么认为

为什么 SDK 不能构建 SDK?

因为这不是 SDK 的理念,所以 sdk 是为特定图像生成的工具链,用于交叉编译您的程序,仅此而已。

为什么 SDK 甚至不包含 bitbake?

Bitbake 是一个解析 yocto recipe(元层)的工具,所以 SDK 中不需要这个工具

为什么 SDK 显然与为特定机器构建或 架构,显然无法为不同的 架构?构建 SDK 的过程甚至希望最终 架构需提前指定

我想我已经回答了这个问题,但是,关于你问题的第二部分。可以稍微灵活一点,同时启动 BSP 和应用程序。每周,您都会发布一个带有 BSP 新更改的新 SDK,并且工具链对于开发人员来说始终是最新的(我承认这是一个非常理想化的愿景)

【讨论】:

  • 感谢您提供详尽的回答...作为后续行动,是什么构建了 poky 克隆检查的内容?是否有一组元层可供 SDK 用于生成功能最强大的 poky 克隆?我的意思是,如果我想要 ARM 的最实用的 poky 克隆怎么办?谢谢
【解决方案2】:

读自https://www.yoctoproject.org/docs/2.6.1/ref-manual/ref-manual.html#cross-development-toolchain

似乎 SDK 和 eSDK 是可重定位工具链的示例;

开发人员在 BitBake 之外使用的可重定位工具链 开发将在目标设备上运行的应用程序。

这句话特别出戏:

您还可以找到有关使用可重定位工具链的更多信息 在 Yocto 项目应用程序开发和可扩展 软件开发工具包 (eSDK) 手册。

所以我猜构建 SDK 和 eSDK 的 git-clone-poky checkout 是:

在为目标架构构建映像时,仅由 BitBake 使用并在其中使用的工具链

毫无疑问我对:

应用于 Yocto 项目的工具链概念

并且应该:

请参阅 Yocto 中的“交叉开发工具链生成”部分 项目概述和概念手册https://www.yoctoproject.org/docs/2.6.1/overview-manual/overview-manual.html#cross-development-toolchain-generation

当然,第一张图片清楚地表明 SDK 用于构建应用程序,而不是图片。我想构建图像(当然可能包含应用程序)。

因此,我可能希望为其他应用程序构建者制作一个 SDK,并将他们的应用程序合并到我的源代码中并为他们进行最终构建。

也可能是用于构建镜像的工具链可以在SDK中运行,从而使用SDK的工具链而不是宿主linux发行版工具链 不,你不能

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 2016-12-14
    • 2020-03-12
    • 2020-06-17
    • 1970-01-01
    相关资源
    最近更新 更多