bitbake工具

本文详细介绍了BitBake工具,包括其作为任务执行引擎的角色,核心概念如Recipes、Configuration Files、Layers等。重点讲解了bitbake的命令、语法及其在Yocto项目中的应用。此外,还提供了关键概念的定义和实例,如Recipe文件、配置文件、类文件以及层的使用,以及如何使用BitBake命令进行操作。

bitbake工具

关键词: yocto bitbake

了解bitbake,bitbake对整个工程的管理

主要内容:

  • bitbake概念
  • bitbake相关命令

文档参考:

最新文档 https://taotaodiy-yocto.readthedocs.io/en/latest/yocto/yocto-bitbake.html

yocto-taotaodiy

bitbake简介

BitBake是一个通用的任务执行引擎,它允许shell和Python任务在复杂的任务间依赖性约束下高效地并行运行。
BitBake的一个主要用户OpenEmbedded利用这个核心,使用面向任务的方法构建嵌入式Linux软件栈

BitBake是用Python语言编写的程序。在最高级别,BitBake解释元数据,确定要运行的任务并执行这些任务。与GNU
Make相似,BitBake控制软件的构建方式。GNU Make通过"
makefiles"实现控制,而BitBake使用" recipes"。
通过允许定义更复杂的任务(例如组装整个嵌入式Linux发行版),BitBake扩展了GNU
Make这样的简单工具的功能。

BitBake类似于GNU Make,但有很大的区别:

  • BitBake根据提供的构成任务的元数据执行任务。元数据存储在配方(.bb文件)和相关的可追加配方(.bbappend文件),配置(.conf文件)和基础包含(.inc)文件以及类(.bbclass)文件中。元数据向BitBake提供有关要运行哪些任务以及这些任务之间的依赖关系的说明。
  • BitBake包含一个提取程序库,用于从各个地方(例如本地文件,源代码控制系统或网站)获取源代码。
  • 每个要构建的单元的指令(例如,一个软件)被称为"配方"文件,其中包含有关该单元的所有信息(依赖项,源文件位置,校验和,描述等)。
  • BitBake包括客户端/服务器抽象,可以从命令行使用,也可以通过XML-RPC用作服务,并且具有多个不同的用户界面。

源码下载 http://git.openembedded.org/bitbake/

bitbake官方文档 https://docs.yoctoproject.org/bitbake/bitbake-user-manual/bitbake-user-manual-intro.html

当前使用 BitBake 版本 1.49.0

bitbake概念

Recipes(.bb)

  • 有关软件包的描述性信息(作者,主页,许可证等)
  • 配方版本
  • 现有依赖关系(构建和运行时依赖关系)
  • 源代码所在的位置以及如何获取它
  • 源代码是否需要任何补丁,在哪里可以找到它们以及如何应用它们
  • 如何配置和编译源代码
  • 如何将生成的工件组装到一个或多个可安装的程序包中
  • 在目标计算机上的哪个位置安装软件包或创建的软件包

术语"包"也常用于描述食谱。
然而,由于同一个词用于描述项目的打包输出,所以最好保持一个单独的描述性术语------“配方”。
换句话说,一个单独的"配方"文件就可以生成许多相关但可单独安装的"包"。
事实上,这种能力相当普遍。

Configuration Files

用.conf扩展名表示的配置文件定义了用于控制项目构建过程的各种配置变量。
这些文件分为几个区域,这些区域定义了机器配置,分发配置,可能的编译器调整,常规通用配置和用户配置。
例如主要配置文件
config/bitbake.conf,是由bblayers.conf.sample复制而来(oe-setup-builddir脚本中)。

{#bitbake.conf .conf caption="opky/bulid/config/bitbake.conf" emphasize-lines="2" linenos=""}
# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
#版本
POKY_BBLAYERS_CONF_VERSION = "2"

BBPATH = "${TOPDIR}"
BBFILES ?= ""

#项目使用到如下层
BBLAYERS ?= " \
/home/bingbing/yocto/poky/meta \
/home/bingbing/yocto/poky/meta-poky \
/home/bingbing/yocto/poky/meta-yocto-bsp \
"

Classes

由.bbclass扩展名表示的类文件包含对在元数据文件之间共享有用的信息。
BitBake源树当前带有一个名为的类元数据文件
base.bbclass。您可以在classes目录中找到此文件。
在base.bbclass类文件是特殊的,因为它总是对所有的食谱和类自动包含。
此类包含用于标准基本任务的定义,例如获取,解压缩,配置(默认情况下为空),编译(运行存在的任何Makefile),安装(默认情况下为空)和打包(默认情况下为空)。
这些任务通常被在项目开发过程中添加的其他类覆盖或扩展。

我们不妨来看看base.bbclass这个文件

Layers

层使您可以将不同类型的自定义相互隔离。尽管您可能会在尝试处理单个项目时将所有内容都保留在一层中,但是您的元数据模块化程度越高,则应对将来的更改就越容易。

为了说明如何使用层使事物保持模块化,请考虑为支持特定目标计算机而可能进行的自定义。
这些类型的自定义通常位于特殊的层中,而不是称为"董事会支持包(BSP)"层的常规层中。
此外,应将计算机自定义与支持新GUI环境的配方和元数据隔离开来。这种情况为您提供了两层:一层用于计算机配置,一层用于GUI环境。
但是,重要的是要理解,BSP层仍然可以在GUI环境层内对配方添加特定于机器的内容,而不会因这些特定于机器的更改而污染GUI层本身。
您可以通过一个食谱(BitBake append(.bbappend)文件)来完成此任务。

例如在config/bitbake.conf提到的层:poky/meta、poky/meta-poky
、meta-yocto-bsp

meta里面实际上由很多层组成:

  • recipes-bsp - 任何具有特定硬件或硬件配置信息链接的内容
  • recipes-connectivity - 与其他设备通信相关的库和应用程序
  • recipes-core - 构建一个基本的Linux映像需要什么,包括常用的依赖项
  • recipes-devtools - 主要由生成系统使用的工具(但也可以用于目标)
  • recipes-extended -
    与核心的替代品相比,虽然不是必需的应用程序增加了功能。可能需要完整的工具功能。
  • recipes-gnome - 所有与GTK+应用程序框架相关的东西
  • recipes-graphics - X和其他与图形相关的系统库
  • recipes-kernel - 具有强大内核依赖性的内核和通用应用程序/库
  • recipes-multimedia - 音频、图像和视频的编解码器和支持实用程序
  • recipes-rt - 提供用于使用和测试抢占内核的包和映像方法
  • recipes-sato - Sato演示/参考UI/UX及其相关应用程序和配置
  • recipes-support - 其他配方使用但未直接包含在i中的配方

Append Files

附加文件是具有.bbappend文件扩展名的文件,用于扩展或覆盖现有配方文件(.bb文件)中的信息。

附加文件可以使用" %"通配符来匹配配方名称。
例如busybox_1.21.%.bbappend会扩展或覆盖busybox_1.21.1.bb、busybox_1.21.2.bb、busybox_1.21.3.bb文件)中的信息。

BitBake命令

BitBake命令格式:bitbake [options] [recipename/target recipe:do_task
…]

常用options:

  • -h 查看所有用法
  • -c fetch 如果下载状态未标记为完成,则获取。
  • -c cleanall
    清除整个组件生成目录。生成目录中的所有更改都将丢失。组件的rootfs和状态也将被清除。组件也会从下载目录中删除。
  • -c deploy 将映像或组件部署到rootfs
  • -c compile -f
    不建议直接更改tmp目录下的源代码,但是如果更改了,则Yocto项目可能不会重新生成它,除非使用此选项。使用此选项可在部署映像后强制重新编译
  • -g 列出图像或组件的依赖关系树。
  • -k 即使发生而中断,也继续执行后面的任务。
  • -b xxx.bb 单独对xxx.bb执行构建任务
  • -DDD 启用深度为3级的调试。每个D都添加了另一个级别的调试。

运行图层管理工具时,使用形式:bitbake-layers command[arguments]

常用command:

  • help 显示常规帮助或有关指定命令的帮助。
  • show-layers 显示当前配置的图层。
  • show-recipes 列出可用的配方及其提供的层。
  • show-overlayed
    列出叠加的配方。当具有相同名称的配方存在于具有更高层优先级的另一层中时,将覆盖该配方。
  • show-appends 列出.bbappend文件和它们适用的配方文件。
  • show-cross-depends 列出跨越层边界的配方之间的依赖关系。
  • add-layer 为添加一个图层bblayers.conf。
  • remove-layer 从中移除一层 bblayers.conf
  • flatten
    将层配置展平到单独的输出目录中。展平您的图层配置将构建一个"展平"的目录,其中包含所有图层的内容,其中删除了所有覆盖的配方,并将任何
    .bbappend文件附加到相应的配方中。您可能需要对扁平化层执行一些手动清理,如下所示:

bitbake语法

参考 https://docs.yoctoproject.org/bitbake/bitbake-user-manual/bitbake-user-manual-metadata.html

当我们新增一个程序包的时候,就需要写bb文件,就得使用到bitbake基本语法。

我们就以hello yocto中的bb文件为例来讲解其中的部分基本语法

{#hello-git.bb .bb caption="poky/meta-hello/recipes-hello/hello-git/hello-git.bb" emphasize-lines="2" linenos=""}
DESCRIPTION = "hello git"
SECTION = "examples"

LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
PV = "1"
PR = "r0"

#DEPENDS = "xxx"

UBRANCH = "master"

SRC_URI = "git://gitee.com/taotaodiy/hello-git.git;protocol=https;branch=${UBRANCH}"
SRCREV = "c77fa3087e5a2f23fdac118ea00350d0eb40be95"

S = "${WORKDIR}"

do_compile () {
    make
}

do_install() {
    install -d ${D}${bindir}/
    install -m 0755 ${S}/hello-git ${D}${bindir}/
}

FILES_${PN} = "${bindir}/hello-git"

yocto tips

您需要做些什么 https://docs.yoctoproject.org/transitioning-to-a-custom-environment.html

列出将成为项目一部分的处理器,目标板,技术和功能的列表。您将找到包含支持这些功能的配方和其他元数据的图层,并将其添加到您的配置中。(请参阅#3)

设置您的董事会支持。即使您正在使用自定义硬件,从使用与您的自定义硬件相同的处理器或至少相同的体系结构的现有目标板开始可能会更容易。知道董事会在项目中已经具有运行正常的董事会支持包(BSP),可以使您更轻松地熟悉项目概念。

找到并获取适合您目标的最佳BSP。使用Yocto
Project策划层索引甚至OpenEmbedded层索引来找到并获取适合您目标板的最佳BSP。Yocto项目层索引BSP会定期进行验证。获得首个BSP的最佳位置是从芯片制造商或电路板供应商那里获得-他们可以为您提供最优质的服务。通常,对于Intel芯片,请使用meta-intel;对于Texas
Instruments,请使用meta-ti,依此类推。选择一个已经与您下载的Yocto
Project版本进行了测试的BSP。请注意,最新发行版可能不会立即支持某些BSP,但最终会支持。

您可能想从Poky提供的构建规范开始(这是参考嵌入式发行版),然后在其中添加新选择的层。这是有关添加图层的信息。

根据您选择的图层,在配置中进行所需的更改。例如,您选择了一种机器类型,并添加了相应的BSP层。然后,您需要MACHINE在配置文件(build
/
local.conf)中更改变量的值,以指向同一机器类型。您可能还需要更改其他特定于图层的设置。每层都有一个README文档,您可以查看此类型的用法信息。

为您创建的所有自定义配方和元数据添加一个新层。请将该工具用于Yocto
Project 2.4+版本。如果您使用的是2.4之前的Yocto Project版本,请使用该
工具。该工具还提供了许多其他有用的与图层相关的命令。请参阅
使用bitbake-layers脚本创建常规层部分。bitbake-layers
create-layeryocto-layer createbitbake-layers

为将要使用的BSP创建自己的层。除非您拥有非常特殊的设备,否则从头开始创建整个BSP并不常见。即使您正在使用现有的BSP,也要为BSP创建自己的层。例如,给定一台基于x86的64位计算机,请复制conf
/
intel-corei7-64定义,并为该计算机指定一个相关名称(以板名称而不是产品名称为准)。确保层配置取决于meta-intel层(或至少meta-intel保留在bblayers.conf中)。现在,您可以将自定义BSP设置放入图层中,并且可以将其重新用于其他应用程序。

编写自己的食谱以建立额外的软件支持,这些支持尚不能以食谱的形式获得。创建自己的配方对于要在设备上运行的自定义应用程序软件尤为重要。编写新食谱是一个完善的过程。首先让构建过程的每个步骤开始工作,然后从打包中获取所有内容开始。接下来,在目标上运行该软件,然后根据需要进一步优化。有关更多信息,请参见《
Yocto项目开发任务手册》中的"编写新食谱"。

现在您可以创建图像配方了。有很多方法可以做到这一点。但是,强烈建议您拥有自己的图像配方-不要尝试附加到现有的图像配方中。创建图像的食谱很简单,您通常要完全自定义其内容。

建立您的形象并完善它。使用您对工作流程的了解,添加缺失的内容并修复所有损坏的内容,
以识别可能发生问题的位置。

考虑创建自己的发行版。当您达到一定程度的自定义时,请考虑创建自己的分发而不是使用默认的参考分发。

分发设置定义了包装后端(例如rpm或其他),包装提要以及可能的更新解决方案。您将在继承自Poky的新层中创建自己的发行版,但覆盖了发行版需要更改的内容。如果您发现除了路径和其他典型的本地设置之外,还在local.conf文件中添加了许多配置,那么该考虑创建自己的发行版了。

您可以添加可以在其他层中根据需要自定义分布的产品规格。您还可以添加特定于产品的其他功能。但是要更新发行版而不是单个产品,您可以通过该层来更新发行功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贪贪贪丶慎独

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值