层模型是 Yocto 项目的一种独特的开发模型,也是其最大特点之一。层是包含相关指令集的存储库,指示 OpenEmbedded 构建系统应该执行哪些操作。层可以随时包含对之前指令或设置的更改,这种强大的覆盖功能使您能够根据产品需求定制之前提供的协作或社区层。
不同的层逻辑上分离信息,支持协作和定制。例如,BSP 层、GUI 层、发行版配置层、中间件层或应用层。层模型同时支持协作和定制,使全球的开发人员都能参与并贡献其中,同时满足自身的定制需求。Yocto 项目的工程师们为开源的Linux系统创建了一个可以长久发展的开源开发工具,确实值得称赞。
主流芯片厂商、其他组织和开源社区也会提供额外的元数据层和支持包。开发人员可以使用这些开源元数据层或自建元数据层,基于 Poky 发行版构建一个完整的 Yocto 项目。通常通过Yocto项目的语法规则,,定制新的层可以实现定制需求,而无需修改Poky或开源层。因此,开发Yocto项目时,不提倡直接修改 Poky 或开源层。
Poky 参考发行版是最基础的Yocto项目,通常的开发都是基于它。它包含OpenEmbedded构建系统、OpenEmbedded构建环境、meta-poky 层、meta-yocto-bsp层和文档等组件。然而,通常一个实际的嵌入式项目仅有 Poky 发行版是不够的。开发人员可以通过使用开源元数据层或自建元数据层,基于Poky构建一个能够定制嵌入式 Linux系统或软件包的完整Yocto项目。
许多芯片厂商已经根据Yocto项目(Poky发行版)的主流分支创建了适用于相关芯片或开发板的Yocto项目仓库,这使得开发人员更容易定制嵌入式 Linux系统。
完整Yocto项目的主要的架构组成,如下图所示:
构建主机
OpenEmbedded构建系统和OpenEmbedded构建环境(构建目录下的内容)是Yocto项目的核心组件,但是要运行它们,通常离不开一个构建主机。当有了这些之后,它们就可以从头到尾管理嵌入式系统开发的整个生命周期,定制出一个完整嵌入式Linux系统了。在同一台构建主机上,可以同时搭建多个Yocto项目,每个项目之间可以独立运行且互不干扰。每个Yocto项目只能有一个构建系统,但能同时拥有多个构建环境,这些环境之间也是相互独立的。你可以将每个Yocto项目视为一个虚拟机,而同一台PC上可以安装多个相互独立的虚拟机。理清这一层关系将有助于你更深入地理解Yocto项目,并有利于后续知识的学习。
下面这张图形象的描述了构建系统,构建环境在构建主机下的关系: