1

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

我已经通过:

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

毕竟这似乎是 Yocto/OE 的圣杯。

似乎功能最强大的 x86_64 环境来自:

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

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

是否有与此git clone环境一样功能的 SDK?这意味着它有一个工作位烘焙,我可以为不同的目标交叉构建可启动映像?

问题:

  • 为什么 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 进行构建)

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

4

2 回答 2

2

SDK 是一个通用词,在 yocto 的上下文中,它可能会被错过解释,所以你的问题是合法的。

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

标准 SDK 提供了针对特定图像内容定制的交叉开发工具链和库。

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

有了简短的解释:

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

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

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

不,我不这么认为

为什么 SDK 不能构建 SDK?

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

为什么 SDK 甚至不包含 bitbake?

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

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

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

于 2019-03-17T12:17:03.987 回答
0

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

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

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

这句话特别出戏:

您还可以在 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-一代

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

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

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

于 2019-03-20T16:48:42.793 回答