BitBake 是一种类似 make 的程式编译工具,主要用于 OpenEmbedded 和 Yocto 专案建构 Linux 发行版本。


BitBake

基本上,BitBake 是一个 Python 程序,由使用者建立的配置设定启动,可以为使用者指定的目标专案执行建构的任务,即所谓的配方(recipes)。

Config、tasks 与 recipes

通过 BitBake 执行特定目的的设定档 Config、tasks 与 recipes,这些设定档包含变量与可执行的 shell、python 代码。

所以理论上,BitBake 可以执行代码,你也可以使用 BitBake 执行建构专案程式之外的事情,但是并不推荐这么做。

BitBake 是一种建构专案程式的工具,因此有一些特殊的功能,比如可以定义依赖关系。

BitBake 可以解决依赖关系,并将其任务以正确顺序运行。

此外,建构专案程式包通常包含相同或相似的任务。

比如常见的任务:
下载原始代码,解压原始代码,执行 configure,执行 make,或简单的输出 log。

Bitbake 提供一种机制,可通过一种可配置的方式,抽象、封装和重用这个功能。

下载
$git clone git://git.openembedded.org/bitbake

安装
$export PATH=/home/<your directory>/bitbake/bin:$PATH
$export PYTHONPATH=/home/<your directory>/bitbake/lib:$PYTHONPATH

当我们启动 bitbake 时,它会试著去找 medtata files。
而 BBPATH 就是指示那些档案放那的变数。
如果没有设定它,bitbake 会不知道去那找 .conf 和 .bb。


build/
     ├── mytarget
     │   ├── bitbake.lock
     │   └── conf
     │       └── bblayers.conf
     └── mylayer
         ├── classes
         │   └── base.bbclass
         └── conf
             ├── bitbake.conf
             └── layer.conf


(=> bblayer path)
(=> mylayer 的档名不限定为 mylayer)
build/mylayer/conf/layer.conf
build/mylayer/conf/bitbake.conf
(=> bbclass)
build/mylayer/class/base.bbclass

layer.conf
--------------------
BBPATH .= ":${LAYERDIR}"                      (=> BBPATH  是用来搜寻 conf 和 class 的设定文件)
BBFILES += "${LAYERDIR}/*.bb"                 (=> BBFILES 是用来搜寻 bb 和 bbappend 设定文件)
--------------------

base.bbclass 和 bitbake.conf 可以从 bitbake 安装目录中取得或是参考改写。

bitbake.conf
--------------------
TMPDIR  = "${TOPDIR}/tmp"                     (=> 在 build 资料夹下)(TOPDIR => build directory)
CACHE   = "${TMPDIR}/cache"                   (=> 在 TMPDIR 下,储存 Meatadata 的 cache,让 Bitbake 不用每次重新 parse)
STAMP   = "${TMPDIR}/stamps"                  (=> 用来建立 recipe stamp files)
T       = "${TMPDIR}/work"                    (=> 用来放暂存档的地方,大多是 task logs and scripts。)
B       = "${TMPDIR}"                         (=> 建置 recipes 时,执行 functions 的地方)
--------------------


(=> target path)
(=> local.conf 的档名不限定为 local)
build/mytarget/conf/bblayers.conf

bblayers.conf
--------------------
(=> BBPATH  是用来搜寻 conf 和 class 的设定文件)
BBPATH := "${TOPDIR}"

(=> BBFILES 是用来搜寻 bb 和 bbappend 设定文件)
BBFILES ?= ""

(=> BBLAYERS 是一个layer目录的list,会引用list指向的layer层的conf设定)
(list 里面的每个变量值指向一个layer目录。这个目录下面又有conf/layer.conf。layer.conf里面又有BBPATH以及当前层的一些配置。)
BBLAYERS ?= "/home/<your directory>/mylayer"

(=> 程式编译的目标,目标可以多个)
BBFILE_COLLECTIONS += "mytarget mytarget1 mytarget2"
(=> 程式编译的目录位置)
BBFILE_PATTERN_mytarget := "^${LAYERDIR}/"

MACHINE = " "
DISTRO  = " "
--------------------


显示 recipes 和 tasks 列表。
$bitbake -s

显示特定 recipes 提供的 task。
bitbake -c listtasks recipe_name

构建一个 recipe,执行该 recipe 的所有 tasks。
bitbade recipe-name

只运行 recipe 中的某个 task。
bitbake -c your-task recipe-name

运行所有 recipes 的所有 tasks。
bitbake world

相关文章