Yocto Project Quick Build

根据知识共享协议2.0 UK: England & Wales发布的“Creative Commons Attribution-
share Alike 2.0 UK: England & Wales”条款,授权复制、分发和修改本文档。

前言

这个简短的文档指导您使用Yocto项目完成一个典型的映像构建过程。该文档还介绍了如何为特定的硬件配置构建。您将使用Yocto项目来构建一个名为Poky的参考嵌入式操作系统。

兼容的Linux版本

主机资源需求:

  • 50gb的空闲磁盘空间;

  • 运行一个受支持的Linux发行版(即Fedora、openSUSE、CentOS、Debian或Ubuntu的最新版本)。有关支持Yocto项目的Linux发行版列表,请参阅Yocto项目参考手册中的“受支持的Linux发行版”一节。有关准备构建主机的详细信息,请参阅Yocto项目开发任务手册中的“准备构建主机”一节;

  • Git 1.8.3.1或更高版本;

  • Tar 1.27或更高;

  • Python 3.4.0或更高版本。

构建主机的支持包

使用Git获取Poky源码

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

获取最新的tags。

git fetch –tags

列出所有的Tag。

git tag

切换到Yocto 3.0版本,并创建一个本地分支。

$ git checkout tags/Yocto-3.0 –b my-yocto-3.0

此时切换到了一个本地分支“my-yocto-3.0”。

该分支中可用的文件与Yocto项目Yocto
-3.0发布时“zeus”开发分支中的存储库文件完全匹配。

构建你的映像文件

初始化构建环境

在poky目录中,运行oe-init-build-env环境设置脚本,来定义Yocto项目的主机构建环境。

$cd ~/poky

$ source oe-init-build-env

该脚本创建了一个构建目录,默认为build。脚本运行完成后,当前工作目录切换到build目录。在随后的构建完成后,build目录中将包括所有构建中创建的文件。

检测本地配置文件

本地配置文件为local.conf,在conf子目录中。默认构建qemux86的目标机。包管理器为RPM包管理器。

Tip:通过使用镜像可以显著地加快构建。在local.conf中添加如下的内容来使用镜像。

SSTATE_MIRRORS = "\

file://.* http://sstate.yoctoproject.org/dev/PATH;downloadfilename=PATH \n \

file://.* http://sstate.yoctoproject.org/2.7/PATH;downloadfilename=PATH \n \

file://.* http://sstate.yoctoproject.org/3.0/PATH;downloadfilename=PATH \n \

"

开始构建

继续使用如下的命令为目标构建OS映像,映像类型core-image-sato。

$ bitbake core-image-sato

使用QEMU来仿真你的映像

$ runqemu qemux86

为特定的硬件定制你的构建

到目前为止,您所做的只是快速构建了一个仅适合于模拟的映像。本节将向您展示如何通过向Yocto项目开发环境中添加硬件层来定制特定硬件的构建。

通常,层是包含相关指令和配置集的存储库,这些指令和配置告诉Yocto项目要做什么。将相关元数据隔离到功能特定的层有助于模块化开发,并使重用层的元数据更容易。

Note:按照管理,层的名称使用“meta-”开头。

使用如下的步骤:

  1. 查找合适的层:在Yocto项目的源码仓库中(http://git.yoctoproject.org/)有许多硬件层。在本例中添加了meta-altera硬件层。$

  2. Clone层:使用Git来创建机器的本地副本。将该副本放在之前的Poky
    repository的顶层。
    $ cd ~/poky
    $ git clone https://github.com/kraj/meta-altera.git
    硬件层meta-altera现在存在于构建主机的Poky存储库中,与其它的层一样,并包含所有支持来自Altera(属于Intel)的硬件所需的元数据。

  3. 为构建特定的机器更改配置:local.conf文件中的MACHINE变量指定了构建的机器。例如,设置MACHINE变量为cyclone5。

  4. 添加你的层到层配置文件:在使用添加的层进行构建前,需要将其添加到你的bblayers.conf文件中。该文件在conf目录中。
    使用bitbake-layers add-layer命令来添加层。
    $ cd ~/poky/build
    $ bitbake-layers add-layer …/meta-altera
    参考Altera的README文件。

创建你自己的通用层

也许您需要隔离一个应用程序或一组特定的行为。您可以使用bitbake-layers
create-layer命令创建自己的通用层。该工具通过使用layer.conf配置文件设置子目录来自动创建层,一个recipes-example子目录包含example.bb
recipe,授权文件和README。

下面的命令运行工具创建一个名为meta-mylayer的层。

$ cd ~/poky

$ bitbake-layers create-layer meta-mylayer

参考Yocto Project Development Tasks Manual。

下一步

  • 开发人员Screencast:Yocto项目的入门教程——新开发人员Screencast
    Tutorial教程为不熟悉Yocto项目但熟悉Linux构建主机的用户提供了一个30分钟的视频。虽然这段视频有些过时,但是介绍性和基本概念对初学者来说是有用的。

  • Yocto项目概述和概念手册:Yocto项目概述和概念手册是开始了解Yocto项目的好地方。本手册向您介绍Yocto项目及其开发环境。该手册还为Yocto项目的各个方面提供了概念信息。

  • Yocto项目Wiki:Yocto项目Wiki提供了关于在使用Yocto项目、发布信息、项目规划和QA信息时的去哪寻址指导的信息。

  • Yocto项目邮件列表:相关的邮件列表为讨论、补丁提交和公告提供了一个论坛。存在几个邮件列表,并根据关注的领域进行分组。有关Yocto项目邮件列表的完整列表,请参阅Yocto项目参考手册中的“邮件列表”部分。

  • 链接和其他文档的综合列表:Yocto项目参考手册中的“链接和相关文档”部分提供了所有相关链接和其他用户文档的综合列表。

下一步学习需要了解的信息

在进一步阅读之前,请确保您已经查看了软件概览页面,其中给出了这里引用的许多术语的定义。另外,要知道这里的一些信息现在还没有意义,但是当您开始开发时,您希望将这些信息放在手边。这些是与Yocto项目®一起工作的最著名的方法,它们定期更新。

使用Yocto项目相当容易,直到出现问题为止。如果不了解构建过程是如何工作的,您将发现自己在尝试排除“黑箱”故障。下面是一些新用户希望在开始使用Yocto项目进行第一次构建之前就已经知道的事项。如有其他建议,请随时与我们联系。

使用Git,而不是下载tarball。如果您使用git,软件将根据git的工作方式自动更新bug。如果你下载了tarball,你需要对自己的更新负责。

了解层索引,所有层都可以在层索引中找到。申请了Yocto项目兼容状态(结构连续性保证和测试)的层可以在Yocto项目兼容索引中找到。一般先检查兼容层的索引,如果你没有找到必要的层,检查一般层的索引。一般层索引是来自Open
Embedded项目的原始工件。该项目中索引的层没有Yocto项目在Yocto项目兼容层列表中提供的管理和测试功能,但是条目较多。要知道,当您开始在层索引中搜索时,并不是所有层都具有相同的成熟度、有效性或可用性。搜索也不会优先显示结果。没有简单的方法可以帮助您选择最适合您需要的层。因此,经常需要反复试验,检查邮件列表,或者通过与其他开发人员合作,以帮助您做出正确的选择。

尽可能使用来自硬件供应商的现有BSP层,如Intel、TI、NXP和其他公司有关于它们自己的硬件使用何种BSP层的信息。这些层有诸如meta-intel或meta-ti之类的名称。尽量不要从头开始构建层。如果您有自定义的硬件,可以使用这些层中的一个作为指南或模板,并熟悉Yocto项目板支持包(BSP)开发人员指南。

不要把所有的东西都放在一层里。使用不同的层在逻辑上分离构建中的信息。例如,可以有BSP层、GUI层、发行版配置、中间件或应用程序(例如“meta-filesystems”、“meta-python”、“meta-intel”等等)。将整个构建放在一个层中会限制和复杂化将来的定制和重用。另一方面,将信息隔离到各个层有助于简化将来的定制和重用。

  1. 永远不要修改POKY层。当您更新到下一个版本时,您将丢失所有的工作。

不要被文档搜索结果所欺骗。Yocto项目文档总是在更新。搜索引擎始终搜索和检索Yocto项目手册的旧版本。为了确保您使用的是最新的Yocto项目文档,请使用Yocto项目文档页面来定位软件版本的正确文档。

许多开发人员通过搜索“Yocto项目完整文档集”来查找概念或术语的完整Yocto项目手册集。本手册是Yocto项目手册核心集的串联。因此,在本手册中使用Ctrl-F进行简单的字符串搜索,将产生所需术语或概念的所有“结果”。找到感兴趣的区域后,如果需要,可以显示实际的手册。

理解构建系统如何工作的基本概念:理解Yocto项目工作流程非常重要,因为它可以帮助您确定问题发生的位置以及构建是如何中断的。工作流程分为以下几个步骤:

  1. Fetch-获取源码;

  2. Extract-解压缩;

  3. Patch-应用补丁;

  4. Configure-建立你自己特定的环境;

  5. Build-编译和链接;

  6. Install-复制文件到目标目录;

  7. Package-打包安装的文件。

在“获取”期间,可能无法找到代码。在“提取”期间,可能有无效的zip文件或类似的东西。换句话说,工作流中特定部分的功能让您了解可能出错的地方。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OKSJaxs5-1580825798932)(media/2565967d0a65a0c7ec4dac2885e9d65d.png)]

要知道可以生成依赖关系图并学习如何生成依赖关系图。依赖关系图显示了Recipes、任务和目标之间的依赖关系。你可以使用BitBake的“-g”选项来生成这个图形。当您开始构建而构建中断时,您可能会看到一些包,您对这些包毫无头绪,也不知道为什么构建系统要包含它们。依赖关系图可以澄清这种混淆。您可以在BitBake用户手册的生成依赖关系图部分了解更多关于依赖关系图以及如何生成它们。

这里是你如何在tmp/work目录中解码“magic”文件夹名。构建系统获取源码、解压缩、预处理和构建。如果出现错误,构建系统将直接向您报告一个文件夹的路径,该文件夹(build/tmp)中存放由构建产生的临时文件和包。参考:https://wiki.yoctoproject.org/wiki/Cookbook:Example:Adding_packages_to_your_OS_image

在执行构建时,可以使用“-u”BitBake命令行选项在依赖关系图中指定一个用户界面查看器(例如knotty、ncurses或taskexp),这有助于更好地理解构建依赖关系。

您可以构建的不仅仅是映像文件。您可以为特定的包(包括devshell)甚至单个菜谱构建和运行特定的任务。当开发人员第一次开始使用Yocto项目时,在Yocto项目Quick
start中找到的说明说明了如何创建一个映像,然后运行或刷新该映像。但是,实际上您可以只构建一个Recipe。因此,如果一些依赖或Recipe不工作,你可以只运行“bitbake
foo”,其中“foo”是一个特定配方的名称。随着您使用Yocto项目经验的提高,如果构建失败,确保fetch本身按预期工作是很有用的。以下是一些有价值的链接:“Using
a Development
Shell”,其提供了使用devshell构建和运行特定任务的信息。使用开发外壳获取关于如何使用devshell构建和运行特定任务的信息https://www.yoctoproject.org/docs/current/dev-manual/dev-manual.html#platdev-appdev-devshell。SDK手册还展示了如何构建特定的recipe
http://www.yoctoproject.org/docs/2.5/mega-manual/mega-manual.html#sdk-devtool-use-devtool-modify-to-modify-the-source-of-an-existing-component

一个模棱两可的定义:Package和Recipe。Recipe包含构建系统用于创建包的指令。Recipe和包是构建过程的前端和结果之间的区别。如前所述,构建系统接受Recipe并根据Recipe指令创建包。生成的包与Recipe正在构建的东西相关,但它们是构建的不同部分(包)(例如,主包、doc包、调试符号包、单独的实用程序包,等等)。构建系统将包分开,这样您就不需要安装您不想要或不需要的包,这是很有利的,因为在开发嵌入式和物联网时,您是为小型设备构建的。

  1. 您将希望学习和了解在rootfs中打包了什么。

创建自己的映像Recipe。有许多方法可以创建您自己的映像Recipe。我们建议您创建自己的映像Recipe,而不是修改现有的配方。编写一个映像Recipe非常简单。同样,不要尝试修改现有的映像Recipe。创造你自己的,一定要从一开始就这么做。

  1. 最后,这里列出了作为系统开发人员所需的基本技能。你必须具备如下的技能:
  • 处理公司的代理

  • 添加包到映像中

  • 理解recipe和package之间的不同

  • 自己构建一个包

  • 找到recipe创建的包

  • 找到包的文件

  • 找到映像的文件

  • 添加一个ssh服务到映像(可是传递文件到目标)

  • 了解recipe的解析

  • 了解如何创建和使用层

  • 查找recipes(layers.openembedded.org)

  • 理解machine和distro设置的区别

  • 为你的硬件查找和使用正确的BSP(machine)

  • 查找发行版特点的示例,并知道在哪里设置它们

  • 理解任务pipline并执行独立的任务

  • 理解devtool并理解如何使用它简化你的工作

  • 使用共享下载和共享shared state cache提高构建速度

  • 生成和理解依赖图

  • 生成和理解bitbake环境

  • 构建一个应用开发的扩展SDK(ESDK)

15.根据您对Yocto项目的主要兴趣,您可以考虑以下任何一种进一步的阅读材料:

  • 查看Yocto项目开发任务手册:该手册包含一些过程性信息,可以帮助您设置、使用层、自定义映像、编写新Recipe、使用库(library)和使用QEMU。这些信息是基于任务的,涵盖了Yocto项目的范围。

查看Yocto项目应用程序开发和可扩展软件开发工具包(eSDK)手册:该手册描述了如何使用标准SDK和可扩展SDK,它们主要用于应用程序开发。本手册还提供了使用流行的Eclipse开发环境和使用devtool的示例工作流。有关更多信息,请参考在SDK工作流程部分中使用Eclipse和使用devtool的工作流。

了解内核开发:如果您想了解如何使用内核并理解Yocto
Linux内核,请参阅Yocto项目Linux内核开发手册。本手册提供了关于如何patch内核、修改内核recipe和配置内核的信息。

了解板支持包(BSP):如果您想了解板支持包(BSP),请参阅Yocto项目板支持包(BSP)开发人员指南。本手册还提供了一个示例BSP创建工作流程。参见“开发板级支持包(BSP)”一节。

了解Toaster:Toaster是Yocto项目OpenEmbedded构建系统的web接口。如果您对使用这种类型的界面来创建映像感兴趣,请参阅Toaster用户手册。

内核recipe和配置内核的信息。

了解板支持包(BSP):如果您想了解板支持包(BSP),请参阅Yocto项目板支持包(BSP)开发人员指南。本手册还提供了一个示例BSP创建工作流程。参见“开发板级支持包(BSP)”一节。

了解Toaster:Toaster是Yocto项目OpenEmbedded构建系统的web接口。如果您对使用这种类型的界面来创建映像感兴趣,请参阅Toaster用户手册。

准备Yocto项目参考手册:与Yocto项目手册集的其他部分不同,本手册由适合参考的材料组成,而不是教程。您可以获得构建细节、Yocto项目开发环境的各个部分如何协同工作的详细信息、各种技术细节的信息、迁移到较新的Yocto项目版本的指导、关于目录结构、类和任务的参考资料。Yocto项目参考手册还包含Yocto项目中使用的变量的相当全面的词汇表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值