BitBake 简介
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