1 工作流
下图表示OpenEmbedded构建系统生成的高级工作流:
|
通常,构建的工作流由几个功能区域组成:
- User Configuration:可用于控制生成过程的元数据。
- Metadata Layers:提供软件、板子和发行版元数据的各种层。
- Source Files:上游发布、本地项目和SCMs。
- Build System:在BitBake控制下的进程。这个模块扩展了BitBake如何获取源代码、应用补丁、完成编译、分析生成包的输出、创建和测试包、生成镜像以及生成交叉开发工具。
- Package Feeds:包含输出包(RPM、DEB或IPK)的目录,这些输出包随后用于构建由构建系统生成的镜像或软件开发工具包(SDK)。如果启用了运行时包管理,还可以使用web服务器或其他方式复制和共享这些提要,以便于在运行时扩展或更新设备上的现有镜像。
- Images:工作流生成的镜像。
- Application Development SDK:与镜像一起或与BitBake单独生成的交叉开发工具。
2 User Configuration
用户配置有助于定义构建过程。通过用户配置,可以告诉BitBake要为其构建镜像的目标体系结构、将下载的源代码存储在何处以及其他构建属性。
下图显示了常规工作流图“用户配置”框的展开表示:
|
BitBake需要一些基本配置文件才能完成构建。这些文件是*.conf文件。最小必要的文件作为示例文件驻留在源目录的build/conf目录中。为了简单起见,这里将源目录称为“Poky Directory”。
Poky内部的meta-poky层包含一个conf目录,其中包含配置文件示例。在源代码oe-init-build-env(构建环境脚本)时,这些示例文件用作创建实际配置文件的基础。
执行环境脚本将创建一个不存在的生成目录。BitBake在构建期间使用Build目录进行所有工作。Build目录有一个conf目录,其中包含本地.conf以及bblayers.conf配置文件。只有在Build目录中不存在时,才会创建这些默认配置文件。
根据脚本的来源,调用不同的子脚本来设置构建目录(Yocto或OpenEmbedded)。具体地说,poky目录中的scripts/oe-setup-builddir设置构建目录,并使用适合于Yocto Project开发环境的配置文件为目录来设定。注意:scripts/oe-setup-builddir脚本使用$TEMPLATECONF变量来确定要定位的配置文件示例。
这个local.conf文件提供了许多定义生成环境的基本变量。若需要查看由脚本创建的默认配置文件local.conf,请参考local.conf.sample在meta-poky层中:
- Target Machine Selection:由MACHINE变量控制。
- Download Directory:由DL_DIR变量控制。
- Shared State Directory:由SSTATE_DIR变量控制。
- Build Output:由TMPDIR变量控制。
- Distribution Policy:由DISTRO变量控制。
- Packaging Format:由PACKAGE_CLASSES变量控制。
- SDK Target Architecture:由SDKMACHINE变量控制。
- Extra Image Packages:由EXTRE_IMAGE_FEATURES变量控制。
注意:可以通过修改conf/site.conf和conf/auto.conf文件来修改conf/local.conf文件。
这个bblayers.conf文件告诉BitBake要在构建期间考虑哪些层。默认情况下,此文件中列出的层包括构建系统所需的最小层。但是,必须手动添加已创建的任何自定义图层。
site.conf以及auto.conf文件不是由环境初始化脚本创建的。如果需要site.conf文件,需要自己创建。而auto.conf文件通常由自动生成器创建:
- size.conf:可以使用conf/site.conf文件去设置多个构建目录。
- auto.conf:该文件通常由自动生成器创建和写入。文件中的设置通常可以在conf/local.conf与conf/site.conf文件找到相同的地方。
当使用bitbake target命令启动构建时,bitbake会对配置进行排序,以最终定义构建环境。重要的是要了解OpenEmbedded生成系统按特定顺序读取配置文件:site.conf,auto.conf,和local.conf。另外文件是按特定顺序解析的,所以同一变量的变量赋值可能会受到影响。例如,如果auto.conf和local.conf将variable1设置为不同的值,因为生成系统时解析local.conf在auto.conf之后,variable1的值将来自local.conf文件。