从根本上说,BitBake
是一个通用的任务执行引擎,它允许shell
和Python
任务在复杂的任务间依赖性约束中工作时高效并行地运行。从概念上讲,Bitbake
是类似Make
的构建引擎,但是又有着显著的差异:
BitBake
根据提供的构建任务的元数据执行任务。BitBake
包括一个fetcher
库,用于从各种位置获取源代码,例如本地文件,源代码控制系统或网站。shell
和Python
任务在复杂的依赖性约束中工作时高效并行地运行。BitBake
最初是OpenEmbedded
项目的一部分。它的灵感来自Gentoo Linux
发行版使用的Portage
包管理系统。2004年12月7日,OpenEmbedded
项目团队成员Chris Larson
将项目分为两个截然不同的部分:
BitBake
:一个通用任务执行器OpenEmbedded
:BitBake使用的元数据集BitBake
是OpenEmbedded
项目的主要基础,该项目被用作诸如Yocto
项目之类的Linux
项目的构建工具 。在BitBake
之前,没有任何其他构建工具能够充分满足有抱负的嵌入式Linux
发行版的需求。传统桌面Linux
发行版使用的所有构建系统都缺乏重要的功能,并且在嵌入式领域中普遍存在的基于Buildroot
的临时系统都不具备可扩展性或可维护性。BitBake
的一些重要原始目标是:
Cygwin,BSD
等)。BitBake
在多个项目之间进行协作以进行构建。native,sdk
和multilib
)。BitBake
是一个用Python
语言编写的程序。在最高级别,BitBake
解释元数据,决定运行所需的任务,并执行这些任务。与GNU Make
类似,BitBake
控制着软件的构建方式。GNU Make
通过“makefile
”实现其控制,而BitBake
使用“Recipes
”。
BitBake Recipes
,由文件扩展名.bb表示,是最基本的元数据文件。这些菜谱文件为BitBake
提供以下内容:
配置文件由.conf
扩展表示 ,定义了管理项目构建过程的各种配置变量。这些文件分为几个区域,用于定义计算机配置选项,分发配置选项,编译器调整选项,常规通用配置选项和用户配置选项。主配置文件是示例bitbake.conf
文件,它位于BitBake
源树conf
目录中。
由.bbclass
扩展名表示的类文件 包含在元数据文件之间共享的有用信息。BitBake
源代码树目前附带一个名为的类元数据文件base.bbclass
。您可以在classes
目录中找到此文件 。该base.bbclass
类文件很特殊,因为它总是自动包含在所有配方和类中。此类包含标准基本任务的定义,例如提取,解包,配置(默认为空),编译(运行任何Makefile
),安装(默认为空)和打包(默认为空)。这些任务经常被项目开发过程中添加的其他类覆盖或扩展。
图层允许您将不同类型的自定义设置相互隔离。虽然您可能会发现在处理单个项目时将所有内容保留在一个层中很有吸引力,但是组织元数据越模块化,就越容易应对未来的更改。
附加文件,这些文件具有 .bbappend
文件扩展名,扩展或覆盖现有配方文件中的信息。
BitBake
希望每个附加文件都有一个相应的配方文件。此外,附加文件和相应的配方文件必须使用相同的根文件名。文件名只能在使用的文件类型后缀(例如formfactor_0.0.bb
和 formfactor_0.0.bbappend
)中有所不同。
命名附加文件时,可以使用“%”
通配符来匹配配方名称。例如,假设你有一个名为如下的追加文件:
busybox_1.21%。bbappend
该追加文件将匹配任何版本的配方。因此,append
文件将匹配以下配方名称: busybox_1.21.x.bb
busybox_1.21.1.bb
busybox_1.21.2.bb
busybox_1.21.3.bb
在最常见的情况下,您可以将追加文件命名为busybox_%.bbappend
完全独立于版本。
BitBake
命令该bitbake
命令是BitBake
工具的主要接口。可以查看命令帮助:
$ cd poky/
$ source oe-init-build-env
$ bitbake -h
下面是一些示例:
以下命令在foo_1.0.bb
菜谱文件上运行构建任务,这是默认任务:
$ bitbake -b foo_1.0.bb
以下命令在foo.bb
菜谱文件上运行clean
任务 :
$ bitbake -b foo.bb -c clean
bitbake
命令在不使用“--buildfile”
或“-b”
时仅接受“PROVIDES”
。你不能提供任何其他东西。默认情况下,配方文件通常“提供”其“包名”,如以下示例所示:
$ bitbake foo
下一个示例“提供”包名称,并使用“-c”
选项告诉BitBake
只执行do_clean
任务:
$ bitbake -c clean foo
指定多个目标时,BitBake
命令行支持为各个目标指定不同的任务。
$ bitbake myfirstrecipe:do_taskA mysecondrecipe:do_taskB
BitBake
能够使用dot
语法生成依赖图。您可以使用Graphviz
中的dot
工具 将这些图形转换为图像 。
以下是创建依赖关系图的两个示例。第二个示例省略了常见的依赖:
$ bitbake -g foo
$ bitbake -g -I virtual/kernel -I eglibc foo