关于Yocto你需要知道的注意事项

346 阅读7分钟

使用 Yocto Project相当简单,直到出现问题。如果不了解构建过程的工作原理,您将发现自己正在尝试排除“黑匣子”故障。以下是新用户希望在开始使用 Yocto Project 进行首次构建之前了解的一些事项。

  1. 使用 Git,而不是 tarball 下载:如果您使用 git,软件将根据 git 的工作方式自动更新错误更新。如果您下载 tarball,则需要自行负责更新。
  2. 必须了解layer所在的序列:所有层都可以在层索引中找到。已申请 Yocto Project Compatible 状态(结构连续性保证和测试)的层可以在 Yocto Project Compatible Layers 页面中找到。通常先检查兼容层索引,如果找不到所需的层,请检查常规层索引。层索引是来自 Open Embedded Project 的原创作品。因此,该索引没有 Yocto Project 在 Yocto Project Compatible 层列表上提供的管理和测试,但后者的条目较少。当您开始在层索引中搜索时,请注意并非所有层都具有相同的成熟度、验证或可用性级别。搜索也不会优先显示结果。没有简单的方法可以帮助您完成选择最适合您需求的层的过程。因此,通常需要反复试验、检查邮件列表或通过协作室与其他开发人员合作才能帮助您做出正确的选择
  3. 尽可能使用现有芯片产商的bsp layer:intel、TI、NXP 和其他公司都提供了有关其芯片应使用哪些 BSP 层的信息。这些层的名称包括“meta-intel”或“meta-ti”。尽量不要从头开始构建层。如果您有定制芯片,请使用其中一个层作为指南或模板,并熟悉 Yocto 项目板级支持包开发人员指南
  4. 不要把所有的东西放到一个layer:使用不同的层在逻辑上分离构建中的信息。例如,您可以拥有 BSP 层、GUI 层、发行版配置、中间件或应用程序(例如“meta-filesystems”、“meta-python”、“meta-intel”等)。将整个构建放在一个层中会限制并使未来的自定义和重用变得复杂。另一方面,将信息隔离到层中有助于简化未来的自定义和重用
  5. 永远不要改写pocky的layer,不然你更新到下一版,你会失去你所有的工作
  6. 不要被文档搜索结果所欺骗:Yocto Project 文档始终在更新。遗憾的是,当您使用 Google 搜索 Yocto Project 概念或术语时,Google 会不断搜索并检索 Yocto Project 手册的旧版本。例如,使用 Google 搜索特定主题可能会“找到”几个版本之前的 Yocto Project 手册。要确保您使用的是最新版 Yocto Project 文档,请使用其任何页面顶部的下拉菜单。许多开发人员通过搜索整个页面来浏览一体化“大型”手册以查找概念或术语。该手册是 Yocto 项目手册核心集的串联。因此,使用 Ctrl-F 在该手册中进行简单的字符串搜索即可找到所需术语或概念的所有“匹配项”。找到您感兴趣的区域后,您可以根据需要显示实际手册。也可以使用菜单或左侧导航窗格中的搜索栏。
  7. 理解最基本的编译相关的概念和工作流程:了解 Yocto Project 工作流程非常重要,因为它可以帮助您查明问题发生的位置以及构建中断的原因。工作流程分为以下步骤: 获取 – 获取源代码 提取 – 解压源代码 修补 – 应用修补程序以修复错误并添加新功能 配置 – 设置环境规范 构建 – 编译和链接 安装 – 将文件复制到目标目录 打包 – 捆绑文件以进行安装 在“获取”过程中,可能无法找到代码。在“提取”过程中,可能存在无效的 zip 或类似内容。换句话说,工作流程特定部分的功能可以让您了解可能出现的问题。

image.png 8. 知道你可以生成依赖关系图并学习如何做到这一点:依赖关系图显示配方、任务和目标之间的依赖关系。您可以使用 BitBake 的“-g”选项来生成此图。当您开始构建并且构建中断时,您可能会看到一些您完全不了解的包,或者不知道构建系统为什么会包含它们。依赖关系图可以澄清这种困惑。您可以在 BitBake 用户手册的生成依赖关系图部分中了解有关依赖关系图以及如何生成它们的更多信息 9. 以下是如何解码 tmp/work 中的“魔法”文件夹名称:构建系统会提取、解包、预处理和构建。如果出现问题,构建系统会直接向您报告构建产生的临时 (build/tmp) 文件和包所在的文件夹的路径。有关此过程的详细示例,请参阅示例。遗憾的是,此示例是在 Yocto Project 的早​​期版本中。 执行构建时,您可以使用“-u”BitBake 命令行选项在依赖关系图中指定用户界面查看器(例如 knotty、ncurses 或 taskexp),以帮助您更好地理解构建依赖关系。 10. 您不止可以构建image:您可以为特定程序包(包括 devshell)甚至单个配方构建和运行特定任务。当开发人员首次开始使用 Yocto Project 时,Yocto Project Quick Build 中的说明会显示如何创建映像,然后运行或刷写该映像。但是,您实际上只能构建单个配方。因此,如果某些依赖项或配方不起作用,您可以只说“bitbake foo”,其中“foo”是特定配方的名称。随着您使用 Yocto Project 的水平越来越高,如果构建失败,确保提取本身按预期工作会很有用。以下是一些有价值的链接:使用开发 Shell 了解如何使用 devshell 构建和运行特定任务。此外,SDK 手册还介绍了如何构建特定配方。 11. 模糊的定义:Package vs Recipe:配方包含构建系统用于创建包的说明。配方和包是前端和构建过程结果之间的区别。 如前所述,构建系统采用配方并根据配方的说明创建包。生成的包与配方正在构建的某样东西相关,但属于构建的不同部分(包)(即主包、文档包、调试符号包、单独的实用程序包等)。构建系统会将包拆分出来,这样您就无需安装不想要或不需要的包,这非常有利,因为您在为嵌入式和物联网开发时是为小型设备构建的。 12. 您将需要了解并知道根文件系统中打包了什么 13. 创建你自己的image recipe:有多种方法可以创建您自己的图像配方。我们建议您创建您自己的图像配方,而不是附加现有配方。编写图像配方很简单。同样,不要尝试附加到现有图像配方。创建您自己的图像配方并从一开始就正确执行。 14. 最后,你必须能够掌握以下作为系统开发人员所需的基本技能列表: 处理公司代理 向图像添加包 了解配方和包之间的区别 自己构建包以及它为什么有用 找出配方创建的包 找出包中的文件 找出图像中的文件 向图像添加 ssh 服务器(启用将文件传输到目标) 了解配方的结构 了解如何创建和使用层 查找配方(使用 OpenEmbedded 层索引) 了解机器和发行版设置之间的区别 找到并使用适合您硬件的正确 BSP(机器) 查找发行版功能的示例并知道在哪里设置它们 了解任务管道并执行单个任务 了解 devtool 以及它如何简化您的工作流程 通过共享下载和共享状态缓存提高构建速度 生成并理解依赖关系图 生成并理解 BitBake 环境 为应用程序开发构建可扩展 SDK