Yocto

Yocto Project

Yocto Project 是一个开源协作项目,它提供了一些模板、工具和方法来支持面向嵌入式产品的自定义 Linux 系统,不管硬件架构是什么。
Yocto Project 的两大主要组件由 Yocto Project 和 OpenEmbedded 项目一起维护,这两个组件是 BitBake 和 OpenEmbedded-Core,前者是构建引擎,后者是运行构建过程所使用的一套核心配方 (recipe)。
yocto project 的官方网站是:https://www.yoctoproject.org/ .
yocto官网downloads目录下提供了各个版本的yocto 下载,document目录下还提供了yocto project的相关文档。

BitBake

BitBake 是一个构建引擎。它读取配方(recipe)并通过获取程序包来密切关注它们、构建它们并将结果纳入可引导映像。BitBake 由 Yocto Project 和 OpenEmbedded 项目共同维护。
Yocto 官网提供了 bitbake 的 user manual:
http://www.yoctoproject.org/docs/2.2/bitbake-user-manual/bitbake-user-manual.html

recipe

文件扩展名为.bb的BitBake配方(recpie)文件是最基本的元数据文件.
一个Recipe包括了一组元数据,而这些元数据则定义了与一个项目相关的构建信息:源代码的地址,项目相关的特定配置参数以及如何编译、安装和打包。
Yocto project reference menu 中列出了 配方(recipe文件)中常用的元数据:
http://www.yoctoproject.org/docs/1.8/ref-manual/ref-manual.html#bitbake-dev-environment

Yocto 源代码结构

Yocto 项目源代码目录由很多子目录组成。其中包括:
1. bitbake/
2. build/
3. documentation/
4. meta/
5. meta-yocto/
6. meta-yocto-bsp/
7. meta-selftest/
8. meta-skeleton/
9. scripts/
10. oe-init-build-env
11. oe-init-build-env-memres
12. LICENSE, README, and README.hardware
下面主要介绍一下build/和meta/目录,关于yocto项目源代码目录的详细介绍见:http://www.yoctoproject.org/docs/1.8/ref-manual/ref-manual.html#ref-structure

1.build/ 目录

此目包含录OpenEmbedded构建系统生成的用户配置文件和输出。构建目录最初在运行OpenEmbedded构建环境设置脚本(即oe-init-build-env或oe-init-build-env-memres)时创建。
可以通过在OpenEmbedded构建环境设置脚本指定目录,将此目录放置在与源目录(poky/)分离的目录中。

1.1.build/buildhistory

当您启用构建历史记录功能时,OpenEmbedded构建系统将创建此目录。 该目录将追踪构建信息到系统镜像,软件包和SDK子目录中。

1.2.build/conf/local.conf

此配置文件包含构建环境所需的所有本地用户配置。 该配置文件还包含了有关各种配置选项的文档。在此处设置的变量都会覆盖环境中任意位置的该变量,除非该变量在文件中硬编码(例如,使用’=’而不是’?=’)。由于各种原因,一些变量是硬编码的,但这些变量相对较少。
您可以通过编辑此文件设置要构建的MACHINE,要使用的软件包类型(PACKAGE_CLASSES)以及要访问的下载文件(DL_DIR)的位置。
如果在启动构建时不存在local.conf文件,则当您运行OpenEmbedded构建环境设置脚本(即oe-init-build-env或oe-init-env-memres)创建源代码时,OpenEmbedded构建系统将从local.conf.sample创建它)。
使用的local.conf.sample源文件位置取决于TEMPLATECONF变量,当您从Yocto项目开发环境构建时,默认为meta-yocto/conf,当您从OpenEmbedded Core环境构建时,默认为meta/conf 。因为脚本变量指向local.conf.sample文件的位置,所以这意味着您可以通过在顶层构建环境设置脚本中如下设置变量来从任何层来配置构建环境:
  TEMPLATECONF = your_layer/conf
一旦构建进程获取了示例文件,它使用sed替换所有$ {OEROOT}的值。
注意:
您可以通过查看源目录(poky/)中的scripts/oe-setup-builddir脚本来了解如何使用TEMPLATECONF变量。您也可以在meta-yocto/conf目录中找到的Yocto版本的local.conf.sample文件。

1.3.build/conf/bblayers.conf

此配置文件定义层,这些层是由BitBake遍历(或走过)目录树。 bblayers.conf文件使用BBLAYERS变量来列出BitBake尝试查找的层。
如果在开始构建时不存在bblayers.conf,则当您使用顶级构建环境设置脚本(即oe-init-build-env或oe-init-build-env-memres)时,OpenEmbedded构建系统会从bblayers.conf.sample创建它。
使用的bblayers.conf.sample文件位置取决于TEMPLATECONF变量,当您从Yocto项目开发环境构建时,默认为meta-yocto/conf,当您从OpenEmbedded Core环境构建时,默认为meta/conf 。因为该变量指向bblayers.conf.sample文件的位置,这意味着您可以通过在顶层构建环境设置脚本中如下设置变量来从任何层开始构建您的构建:
  TEMPLATECONF = your_layer/conf
一旦构建进程获取到示例文件,它使用sed替换所有的$ {OEROOT}值。
注意:
您可以在源目录(poky/)中查看TEMPLATECONF变量相关的/oe-setup-builddir脚本。您可以在meta-yocto/conf目录中找到Yocto版本的bblayers.conf.sample文件。

1.4.build/conf/sanity_info

此文件在构建期间创建,用于指示sanity检查的状态。

1.5.build/downloads/

此目录包含已下载的源文件tarball。 您可以在多个构建中重复使用该目录,或将目录移动到另一个位置。 您可以通过DL_DIR变量控制此目录的位置。

1.6.build/sstate-cache/

此目录包含共享状态缓存。 您可以在多个构建中重复使用目录,或将目录移动到另一个位置。 您可以通过SSTATE_DIR变量控制此目录的位置。

1.7.build/tmp/

OpenEmbedded构建系统为所有构建系统的输出,创建和使用此目录。 TMPDIR变量指向此目录。
此目录由BitBake创建。此外,如果要清理一个构建并从头开始(除了下载源文件),您需要删除tmp目录中的所有内容或完全删除目录。同时也需要完全删除build / sstate-cache目录。

1.8.build/tmp/buildstats/

此目录存储构建统计信息。

1.9.build/tmp/cache/

当BitBake解析元数据(recipe)时,它会创建一个可以在以后运行命令时使用的的缓存文件并将解析结果存入其中。BitBake依据不同的目标机器存储这些结果。

1.10.build/tmp/deploy/

此目录包含来自OpenEmbedded构建过程中任何“最终结果”的输出。 DEPLOY_DIR变量指向此目录。

1.11.build/tmp/deploy/deb/

此目录接收由构建过程生成的任何.deb软件包。 将这些包将依据不同的目标系统体系结构分类储存。

1.12.build/tmp/deploy/rpm/

此目录接收由构建过程生成的任何.rpm软件包。 将这些包将依据不同的目标系统体系结构分类储存。

1.13.build/tmp/deploy/ipk/

此目录接收由构建过程生成的任何.ipk软件包。 将这些包将依据不同的目标系统体系结构分类储存。

1.14.build/tmp/deploy/licenses/

此目录接收构建过程生成的包的LICENSE信息。 例如,此目录包含bash,busybox和glibc(以及其他)的子目录,这些子目录又包含具有许可信息的LICENSE文件。

1.15.build/tmp/deploy/images/

此目录接收构建生成的完整的文件系统镜像。 如果要将生成的镜像烧写到设备上,请在此查找系统镜像。
在删除此目录中的文件时要小心。您可以安全地从此目录中删除旧的系统镜像(例如core-image- ,hob-image- 等)。但是,在生成系统镜像之前,可能会先在此部署内核(* zImage uImage *等)文件,引导加载程序和其他补充文件。 因为这些文件不是直接从映像生成的,所以如果您删除它们,则在再次构建映像时将不会自动重新创建这些文件。
如果您在此处意外删除了文件,则需要强制重新创建它们。 为了做到这一点,你需要知道如何重新创建他们。 例如,这些命令可以重新构建和创建内核文件:

 $ bitbake -c clean virtual/kernel
 $ bitbake virtual/kernel

1.16.build/tmp/deploy/sdk/

OpenEmbedded构建系统创建此目录以保存工具链安装脚本,在执行该脚本时,安装与目标硬件匹配的sysroot。 您可以在Yocto Project Application Developer’s Guide的“Optionally Building a Toolchain Installer”部分找到有关这些安装脚本的更多信息。

1.17.build/tmp/sstate-control/

OpenEmbedded构建系统将此目录用于保存共享状态清单文件。共享状态代码使用这些文件记录每个sstate任务安装的文件,以便在清除配方或更新版本即将安装时可以删除这些文件。 当来自一个任务的文件覆盖来自另一个任务的文件时,构建系统可以通过清单来检测并产生警告信息。

1.18.build/tmp/sysroots/

此目录包含共享头文件和库以及其他共享数据。 需要与其他包共享输出的包在此目录中执行此操作。该目录按系统架构细分为多个子目录,因此多个构建可以在一个构建目录中运行。

1.19.build/tmp/stamps/

此目录保存BitBake用于统计跟踪已运行的任务和运行时间的信息。该目录按架构,程序包名称和版本划分子目录。以下是一个示例:
stamps / all-poky-linux / distcc-config / 1.0-r0.do_build-2fdd …. 2do
虽然目录中的文件没有数据,但BitBake使用文件名和时间戳来跟踪任务。

1.20.build/tmp/log/

此目录包含无法放置在WORKDIR中的常规日志。运行构建不一定意味着创建此目录。

1.21.build/tmp/work/

此目录包含由BitBake构建的特定于系统架构的软件包工作子目录。所有任务都从相应的工作目录执行的。例如,特定包的源文件在其自己的工作目录中被解包,打patch,配置,编译和打包。
例如,在Yocto项目中构建的机器qemux86上的linux-yocto-kernel-3.0包。对于这个包,创建一个简称为WORKDIR的工作目录:
  tmp/work/qemux86-poky-linux/linux-yocto/3.0 + git1 + <…..>
在此目录中,源文件解压缩到linux-qemux86-standard-build,然后由Quilt打补丁。(有关详细信息,请参阅Yocto Project Development Manual中的“Using Quilt in Your Workflow”部分。)在linux-qemux86-standard-build目录中,包含标准Quilt目录linux-3.0/patches和linux-3.0/.pc ,并且可以使用标准的Quilt命令。
在WORKDIR中还生成了其他目录。最重要的目录是WORKDIR/temp/,它包含每个任务的日志文件,并包含每个任务运行的BitBake脚本。“make install”将即将被打包到WORKDIR/packages-split/的子包中的输出放置到WORKDIR/image/中。

1.22. build/tmp/work-shared/

为了提高效率,OpenEmbedded构建系统创建并使用此目录来保存与其他配方共享工作目录的配方。实际上,这只适用于gcc及其变体(例如gcc-cross,libgcc,gcc-runtime等等)。

2.meta/ 目录

meta目录是Yocto项目的核心,有几个重要的子目录:

2.1.meta/classes/

此目录包含* .bbclass文件。 类文件是抽象的通用代码,因此它可以被多个包重用。每个包都继承base.bbclass文件。以autotools.bbclass为例,它在理论上允许任何支持Autotool的包以最小的代价与Yocto项目一起工作。另一个例子是kernel.bbclass,它包含与Linux内核一起工作的公共代码和函数。镜像生成或打包等功能也有其特定的类文件,如image.bbclass,rootfs _ * .bbclass和package * .bbclass。
有关类的参考信息,请参见“Classes”一章。

2.2.meta/conf/

此目录包含从bitbake.conf开始并包括所有其他配置文件的核心配置文件集。通过bitbake.conf文件末尾的include语句,你会注意到,即使是local.conf也是从那里加载的。虽然bitbake.conf设置了默认值,但通常可以使用(local.conf)文件,机器文件(machine file)或分发配置文件(distribution configuration file)来重设这些值。

2.3.meta/conf/machine/

此目录包含所有机器配置文件。如果设置MACHINE =“qemux86”,则OpenEmbedded构建系统会在此目录中查找qemux86.conf文件。include目录包含多机器通用的各种数据。如果您要为Yocto项目添加新机器的支持,请查看此目录。

2.4.meta/conf/distro/

此目录包含用于控制特定发行版的配置文件。对于Yocto项目,defaultsetup.conf是这里的主文件。此目录包含在此处配置的应用程序的版本和SRCDATE的定义。可以替代defaultsetup.conf的配置文件是poky-bleeding.conf。虽然这个文件主要继承Poky。

2.5.meta/conf/machine-sdk/

OpenEmbedded构建系统在此目录中搜索与SDKMACHINE的值相对应的配置文件。 默认情况下,32位和64位x86文件随Yocto项目一起提供以支持一些SDK主机。 但是也可以通过在其他层的此子目录中添加配置文件来扩展支持其他SDK主机。

2.6.meta/files/

此目录包含构建系统使用的公用许可证文件和多个文本文件。文本文件包含最小设备信息以及已知权限的文件和目录列表。

2.7.meta/lib/

此目录包含在构建过程中使用的OpenEmbedded Python库代码。

2.8.meta/recipes-bsp/

此目录包含与特定硬件或硬件配置信息(例如“u-boot”和“grub”)相关的任何内容。

2.9.meta/recipes-connectivity/

此目录包含与其他设备通信相关的库和应用程序。

2.10.meta/recipes-core/

此目录包含构建基本工作Linux映像(包括常用依赖关系)所需的内容。

2.11.meta/recipes-devtools/

此目录包含构建系统主要使用的工具。这些工具也可以用在目标上(目标系统?)。

2.12.meta/recipes-extended/

此目录包含可以替换内核中相应应用的非必需应用程序。您可能需要此目录以获得完整的工具功能或符合Linux标准的库(LSB)。

2.13.meta/recipes-gnome/

此目录包含与GTK +应用程序框架相关的所有内容。

2.14.meta/recipes-graphics/

此目录包含X和其他图形相关的系统库。

2.15.meta/recipes-kernel/

此目录包含内核和依赖内核通用应用程序和库。

2.16.meta/recipes-lsb4/

此目录包含专门添加支持Linux标准库(LSB)版本4.x的配方。

2.17.meta/recipes-multimedia/

此目录包含音频,图像和视频的编解码器和一些实用程序。

2.18.meta/recipes-qt/

此目录包含与Qt应用程序框架相关的所有内容。

2.19. meta/recipes-rt/

此目录包含用于使用和测试PREEMPT_RT内核的软件包和镜像配方。

2.20.meta/recipes-sato/

此目录包含Sato demo,UI / UX的参考以及其关联的应用程序和配置数据。

2.21.meta/recipes-support/

此目录包含被其他配方使用的配方,但不直接包含在镜像中(而是其他配方的依赖此配方)。

2.22.meta/site/

此目录包含各种不同体系结构的缓存结果的列表。由于某些“autoconf”测试不能在实时系统上运行,而导致测试结果无法在交叉编译时确定,所以此目录中的信息将传递到各种体系结构的“autoconf”上。

2.23.meta/recipes.txt

这个文件是对recipes- *的内容的描述。

你可能感兴趣的:(Yocto)