Bitbake

目录

什么是 BitBake

Config、tasks 与 recipes

安装和配置BitBake

yocto init脚本

BitBake 工程

Layer 目录

Build 目录

meta-meson目录

BitBake 搜索路径

Recipe

添加一个recipe


什么是 BitBake

以下内容有助于理解 BitBake:

基本上,BitBake是一个Python程序,它由用户创建的配置驱动,可以为用户指定的目标执行用户创建的任务,即所谓的配方(recipes)

Config、tasks 与 recipes

通过一种 BitBake 领域特定语言写 Config、tasks 与 recipes,这种语言包含变量与可执行的 shell、python 代码。所以理论上,BitBake 可以执行代码,你也可以用 BitBake 做除构建软件之外的事情,但是并不推荐这么做。

BitBake 是一种构建软件的工具,因此有一些特殊的功能,比如可以定义依赖关系。BitBake 可以解决依赖关系,并将其任务以正确顺序运行。此外,构建软件包通常包含相同或相似的任务。比如常见的任务:

  • 下载源代码包,

  • 解压源代码,

  • 跑 configure,跑 make,或简单的输出 log。

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

安装和配置BitBake

Amlogic的Yocto SDK已经包含了bitbake。

安装bitbake

  • 添加 bitbake-$version/bin 目录到 PATH

  • 添加 bitbake-$version/lib 目录到 PYTHONPATH

也就是执行

export PATH=/path/to/bbtutor/bitbake/bin:$PATH export 

PYTHONPATH=/path/to/bbtutor/bitbake/lib:$PYTHONPATH

yocto init脚本

包含了安装bitbake的操作。

bitbake --version可以看到是否安装成功。

P1_Yocto_0903/build$ bitbake --version BitBake Build Tool Core version 1.46.0

执行完init脚本后,会生成build目录,并切换到build目录。

BitBake 工程

通过layers目录和build目录组织,layers目录包含配置文件,和metadata。

Layer 目录

Layer 目录包含配置、任务和目标描述。常用 meta-'something' 命名 Layer 目录。

Build 目录

Build 目录是 bitbake 命令被执行的地方。bitbake将其生成的所有文件放在这个目录。在这里有bitbake初始配置文件bblayers.conf。下面是执行init脚本后生成的build目录:

├── bitbake-cookerdaemon.log

├── cache

│   ├── bb_persist_data.sqlite3

│   ├── hashserv.db

│   ├── hashserv.db-shm

│   └── hashserv.db-wal

├── conf

│   ├── bblayers.conf

│   ├── local.conf

│   └── templateconf.cfg

└── tmp

    ├── hosttools

    └── log

build/conf/bblayers.conf

bitbake在其工作目录(build目录)期望找到的第一个文件,在amlogic的yocto项目中,由init脚本创建。

POKY_BBLAYERS_CONF_VERSION = "2" OEROOT := "${@os.path.abspath(os.path.dirname(d.getVar('FILE', True)) + '/../..')}" BBPATH = "${TOPDIR}" BBFILES ?= "" BBLAYERS ?= " \   /mnt/fileroot/fei.zhang/buildroot/P1_Chip_bringup/P1_Yocto_0903/poky/meta \   /mnt/fileroot/fei.zhang/buildroot/P1_Chip_bringup/P1_Yocto_0903/meta-meson \ "

  • 添加当前目录到 BBPATH,TOPDIR 被 BitBake 设置为当前工作目录。

  • 初始设置 BBFILES 变量为空,Recipes 在后面会添加。

  • 添加我们 meta-meson的路径到 BBLAYERS 变量。当 BitBake 开始执行时,它会搜索所有给定的 layer 目录,以便获得其他配置。

meta-meson目录

├── aml-setenv.sh

├── classes

├── conf

├── lib

├── license

├── oe-init-build-env-meson

├── recipes-bsp

├── recipes-cas

├── recipes-common

├── recipes-connectivity

├── recipes-core

├── recipes-devtools

├── recipes-drm

├── recipes-graphics

├── recipes-kernel

├── recipes-multimedia

├── recipes-rtos

├── recipes-shared

├── recipes-support

└── scripts

每个layer都有两个重要的文件,layer.conf, bblayer.class

meta-meson/conf/layer.conf poky/meta/classes/base.bbclass poky/meta/conf/bitbake.conf

meta-meson/conf/layer.conf

# We have a conf and classes directory, add to BBPATH BBPATH .= ":${LAYERDIR}" # We have a recipes-* directories, add to BBFILES BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ ${LAYERDIR}/recipes-*/*/*.bbappend" BBFILE_COLLECTIONS += "meson" BBFILE_PATTERN_meson = "^${LAYERDIR}/" BBFILE_PRIORITY_meson = "6" LICENSE_PATH += "${LAYERDIR}/license" #SPDXLICENSEMAP[AMLOGIC] = "LICENSE.AML"

  • LAYERDIR 是 BitBake 传给其所加载 Layer 的变量。我们添加该路径到 BBPATH 变量。

  • BBFILES 告诉 BitBake 需要编译哪些recipes,这里用到了通配符。

注意事项。“.=” 和“+=” 以不添加空格、添加空格的方式,将追加值附给一个变量。

poky/meta/classes/base.bbclass

一个 *.bbclass 文件包含共享功能。我们的 base.bbclass 是属于一个基础类的class,包含一些默认的任务。BitBake 有需求,如果子类没有任何具体task时,BitBake 默认的任务。子类可以覆盖task的实现。

poky/meta/conf/bitbake.conf

conf/bibake.conf 包含 一系列我们讨论的变量。

BitBake 搜索路径

对于 BitBake 来讲,有许多 BBPATH 非法和文件路径。这说明如果我们告诉 BitBake 探索一些路径时,它会搜索 BBPATH。  我们添加 TOPDIR 和 LAYERDIR 到 BBPATH,放在 classes/base.bbclass 或 conf/bitbake.conf 中的任意一个。  当然,我们会添加 meta-tutorial 目录。  编译目录不应含有通用文件。只有像 local.conf 对实际编译是有效的,后面我们会用到 local.conf。

Recipe

BitBake 需要 recipes 定义要做些什么,现在这里什么都没有。我们可以通过 

bitbake -s 列出编译目标的recipe 列表。

添加一个recipe

BitBake 需要知道一个 layer 提供哪些 recipes,可通过编辑 meta-tutorial/conf/layer.conf 文件,使用通配符告诉 BitBake 加载所有的 recipe。这个不用修改。

通常 recipes 有自己的目录,并以 groups 的形式收集在一起,把有关联的 recipes 放在同一个目录。

注意:通常使用 recipes-'group' 命令这些目录,这里 group 名表示一个 category 或一些程序。

meta-meson layer下面有很多group:

├── recipes-bsp

├── recipes-common

├── recipes-core

├── recipes-devtools

现在 BitBake 已经知道从哪找 recipe,我们可以开始添加第一个 recipe 了。

按通常的做法,我们创建目录 meta-tutorial/recipes-tutorial/first,并在此创建第一个 recipe。 Recipe 文件也有通用的命名方法:{recipe}_{version}.bb

### BitBake 指令使用指南 BitBake 是一个用于构建嵌入式 Linux 系统的强大工具,广泛应用于 Yocto 项目和 OpenEmbedded 构建系统中。以下是对 BitBake 指令的详细使用说明,涵盖基本命令、构建流程和配置方法。 #### 基本指令 要开始使用 BitBake,首先需要确保它已正确安装或集成到 Yocto 构建环境中。Yocto 源代码本身捆绑了 BitBake,因此在使用 Yocto 时,只需通过 `source` 脚本来激活 BitBake 环境即可。例如: ```bash source oe-init-build-env ``` 该命令会设置必要的环境变量,并进入构建目录。 构建单个目标(例如一个软件包或镜像)时,使用以下命令: ```bash bitbake <recipe-name> ``` 其中 `<recipe-name>` 是目标配方的名称,如 `core-image-minimal` 或 `busybox`。此命令会解析所有依赖项并开始构建过程[^1]。 #### 构建流程解析 BitBake 的构建流程基于配方(recipes)和类(classes)。配方文件定义了如何下载、配置、编译和打包软件,而类文件则提供通用的功能封装,供多个配方复用。例如,`meta-openamp` 层中包含的 `classes` 文件夹定义了与 OpenAMP 支持相关的构建逻辑[^2]。 每个配方通常包含多个任务(tasks),如 `do_fetch`、`do_configure`、`do_compile` 和 `do_install`。可以通过以下命令单独执行某个任务: ```bash bitbake -c <task-name> <recipe-name> ``` 例如,仅编译 `busybox` 而不执行安装: ```bash bitbake -c do_compile busybox ``` #### 配置与自定义 BitBake 的配置主要通过 `conf/local.conf` 和 `conf/bblayers.conf` 文件完成。在 `local.conf` 中,可以定义全局变量,如目标架构、镜像包含的组件等。例如,添加 Flutter SDK 支持时,可以在 `local.conf` 中添加以下内容: ```bash TOOLCHAIN_HOST_TASK:append = " nativesdk-flutter-sdk" ``` 该配置确保构建过程中包含 Flutter SDK 的工具链[^4]。 此外,可以通过 `bitbake-layers` 工具管理元层(meta-layers),包括添加、移除或查看当前使用的层: ```bash bitbake-layers add-layer <layer-path> bitbake-layers show-layers ``` 这些命令用于扩展构建系统的功能,例如添加对特定硬件平台的支持(如 Xilinx 的 `meta-openamp` 层)[^2]。 #### 常用选项与调试 BitBake 提供了多种选项用于调试和优化构建过程。例如,查看某个配方的依赖关系图: ```bash bitbake -g <recipe-name> ``` 该命令会生成 `pn-depends.dot` 和 `task-depends.dot` 文件,可以使用 `dot` 工具将其可视化。 若需清理某个配方的构建输出,可以使用: ```bash bitbake -c clean <recipe-name> ``` 此命令会删除该配方的临时构建目录和输出文件,确保下一次构建是干净的。 #### 示例:构建一个最小系统镜像 以构建一个最小的嵌入式 Linux 镜像为例,可以使用如下命令: ```bash bitbake core-image-minimal ``` 该命令将构建一个包含基本系统工具和内核的最小镜像,适用于大多数嵌入式设备。构建完成后,镜像文件通常位于 `tmp/deploy/images/<machine-name>/` 目录下。 #### 总结 BitBake 是一个高度可定制和灵活的构建工具,适用于复杂的嵌入式系统开发。通过掌握其基本指令、理解构建流程和配置方法,可以高效地管理和构建定制化的 Linux 系统。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值