bitbake 用户手册

简单翻译。不是一字一句完全翻译。。也不知道有没有翻译错误。如果有请指出。我也是菜鸟

http://www.yoctoproject.org/docs/2.1/bitbake-user-manual/bitbake-user-manual.html

1.1 介绍

bitbake是一个任务执行引擎。并行高效地运行shell脚本和Python任务。处理一些复杂的依赖任务。和make有些相似。但是也有些不同


主要的不同体现在:


bitbake是根据构成这个任务的元数据(metadata)来执行任务的。元数据主要保存在recipe(.bb)文件,append(.append)文件 配置文件(.conf) 以及包含文件(.inc) 和类(.class)文件中。元数据提供了哪些任务需要运行,以及这些任务之间的依赖关系。


bitbake包含一个文件获取的工具用于从不同的地方获取源码。比如从源码控制系统SVN GIT,或者从网站上获取。


每一个需要被构建的结构单元由菜谱文件来描述。菜谱包含了这个单元的所有信息,比如依赖库,源码位置,校验和,描述等等


bitbake包含抽象的客户端和服务端。能够从命令行或者基于XML的远程服务执行。而且有很多不同的用户接口(这里不知道具体有什么用)


1.2 历史和目标

巴拉巴拉 bitbake很牛逼。很多人都在用。包括openembedded yocto


1.3概念

bitbake是python写的。最高一层。bitbake解释元数据。决定要运行哪些任务。然后执行这些任务。和GNU Make差不多。bitbake控制软件的构建。只是Make用makefile,而bitbake用recipe。bitbake继承了很多简单工具比如make的的特性。所以能够运行更加复杂的任务。


1.3.1 菜谱

recipes用.bb扩展结尾,是最常见的基本元数据。提供了下列信息


×关于这个包的描述。比如作者,主页,license和其他的。

×菜谱的版本

×存在的一些依赖。包括运行时依赖和构建时依赖

×包的源码在哪里。如何得到这个源码

×这个包是否需要打补丁。从哪里获取补丁。如何应用这些补丁

×如何配置(./configure)和编译这些源码

×这些包应该安装在目标机器的什么位置。

在bitbake的上下文或者任何使用bitbake作为构建工具的工程中。.bb扩展结尾的文件都是菜谱


1.3.2配置文件

配置文件以.conf扩展结尾。定义了管理build过程的许多变量。配置文件存在于很多地方。比如机器配置选项。发行版配置选项,编译选项,通用选项,用户配置选项

主要是的配置文件是bitbake.conf。在bitbake源码conf目录中


1.3.3 类

类文件主要是.bbclass扩展。元数据之间用于共享一些信息的时候是非常有用的。。当前bitbake源码树里面包含了一个base.bbclass元数据。可以在classes目录找到。这个base.bbclass是很特殊的。所所有的菜谱和classes总是会自动包含这个bbclass.这个类包含了一些标准的基本操作。比如获取源码,解压 ,配置(默认为空),编译(默认为空) 安装(默认为空)和打包(默认为空)。这些基本操作常常继承子类覆盖是实际地实现这些功能。


1.3.4层

层可以让不同类型的定制选项相互之间独立,

当你构建一个单独项目的时候,总是觉得把所有的东西都放在一个层里面的比较好。实际上元数据的组织如果模块化得比较好,将来改动的时候会就越简单。

为了展示如何用分层来模块化所有的事情。假设针对你的指定的目标机器来做定制。那么这些定制的东西通常处在一个特殊的层里面。而不是一个通用的层。

(比如,上层的一些app是通用的例如SSH FTP这些可以放在通用层里面。因为这些放在所有的板子上都能跑,但是底层的一些东西就要独立做一个层。比如我的板子A有wifi。板子B没有。这些独立的就放到特殊的层里面,根据不同的机器来做),通常这个特殊的层叫做BSP (主板支持包)。除此之外。这些机器相关的特性的东西也必须和支持GUI环境的元数据以及菜谱独立开来。比如现在有一些层,一个是机器的BSP层,另外一个是GUI环境,即使不去修改GUI层本身。BSP这一层也可以通过指定.bbappend来做制作一些主板相关的需要GUI的菜谱(也许意思是。GUI层是完全独立的一个层,和主板无关,但是如果主板BSP这一层,需要制作一些GUI相关的菜谱,可以通过.bbappend来实现。)。



1.3.5附加文件 append files

附加文件。是.bbappend结尾的继承或者覆盖菜谱的一些信息。

bitbake期望每个bbapend文件都有一个bb菜谱文件和他相对应。除此之外append文件应该和bb文件一样 有相同的根文件名,文件名只通过后缀来区分。

比如 formfactos_0.0.bb 和 formfactos_0.0.bbappend

bbappend文件里面的信息主要是继承或者覆盖原来的bb文件里面一些相似的信息。

你可以在bbappend里面用%来匹配菜单名。

比如busybox_1.21.%.bbappend

那么这个bbappend就会匹配任何busybox.1.21.x.bb文件。例如 busybox.1.21.1.bb busybox.1.21.2.bb busybox.1.21.3.bb.这些。但是不会匹配busybox.1.30.0.bb

,但是如果你命名为busybox_1.%.bbappend 那么就会匹配了。

通常情况下就指定 busybox_%.bbappend 来支持所有的版本



1.4

获取bitbake

git clone git://git.openembedded.org/bitbake
或者任何其他方式。这里就不讲了


1.5 bitbake命令

bitbake使用 以及表达式

使用bitbake -h 打印usage

bitbake -h


bitbake [options] [recipename/target recipe:do_task ...]
 
 
Options:
       --version             show program's version number and exit
       -h, --help            show this help message and exit
       -b BUILDFILE, --buildfile=BUILDFILE
                             Execute tasks from a specific .bb recipe directly.
                             WARNING: Does not handle any dependencies from other
                             recipes.
       -b 直接从指定的bb菜谱执行任务。并不处理来自于其他菜谱的依赖关系
       -k, --continue        Continue as much as possible after an error. While the
                             target that failed and anything depending on it cannot
                             be built, as much as possible will be built before
                             stopping.
       -k 出现错误以后,尽可能多地执行任务。直到停止。也就是出现错误并不马上停止。
          如果还可以继续执行。那么就继续执行
       -a, --tryaltconfigs   Continue with builds by trying to use alternative
                             providers where possible.
       -a尽可能的使用可选的提供者来完成构建的任务
       -f, --force           Force the specified targets/task to run (invalidating
                             any existing stamp file).
       -f 强制指定任务运行. 将任何已经存在的标记文件视为无效。
       -c CMD, --cmd=CMD     Specify the task to execute. The exact options
                             available depend on the metadata. Some examples might
                             be 'compile' or 'populate_sysroot' or 'listtasks' may
                             give a list of the tasks available.
       -c 指定需要对于这个菜谱执行的任务.比如compile 或者listtask或者clean
       -C INVALIDATE_STAMP, --clear-stamp=INVALIDATE_STAMP
                             Invalidate the stamp for the specified task such as
                             'compile' and then run the default task for the
                             specified target(s).
       -C 使得任务指定的标记文件徐晓。然后与运行默认的任务。(有些东西是有缓存的。比如已经编译过了。没有任何修改就不再重新编译,这个就是无论如何都重编译)
       -r PREFILE, --read=PREFILE
                             Read the specified file before bitbake.conf.
       -r 在读取bitbake.conf之前读取指定的文件
       -R POSTFILE, --postread=POSTFILE
        -R 在读取bitbake.conf之后读取指定的文件

                             Read the specified file after bitbake.conf.
       
       -v, --verbose         Output more log message data to the terminal.
        -v 输出日志信息 
       -D, --debug           Increase the debug level. You can specify this more
                             than once.
       -D 增加调试级别。可以指定N次。来增加N次调试级别
       -n, --dry-run         Don't execute, just go through the motions.
       -n 不执行。只是尝试走通一下流程
       -S SIGNATURE_HANDLER, --dump-signatures=SIGNATURE_HANDLER
                             Dump out the signature construction information, with
                             no task execution. The SIGNATURE_HANDLER parameter is
                             passed to the handler. Two common values are none and
                             printdiff but the handler may define more/less. none
                             means only dump the signature, printdiff means compare
                             the dumped signature with the cached one.
       -p, --parse-only      Quit after parsing the BB recipes.
       -p 只解析bb文件。 
       -s, --show-versions   Show current and preferred versions of all recipes.
       -e, --environment     Show the global or per-recipe environment complete
                             with information about where variables were
                             set/changed.
       -g, --graphviz        Save dependency tree information for the specified
                             targets in the dot syntax.
       -g 产生依赖的dot图
       -I EXTRA_ASSUME_PROVIDED, --ignore-deps=EXTRA_ASSUME_PROVIDED
                             Assume these dependencies don't exist and are already
                             provided (equivalent to ASSUME_PROVIDED). Useful to
                             make dependency graphs more appealing
       -I 指定某个依赖不存在。但是已经早就提供了。
       -l DEBUG_DOMAINS, --log-domains=DEBUG_DOMAINS
                             Show debug logging for the specified logging domains
       -P, --profile         Profile the command and save reports.
       -u UI, --ui=UI        The user interface to use (depexp, goggle, hob, knotty
                             or ncurses - default knotty).
       -t SERVERTYPE, --servertype=SERVERTYPE
                             Choose which server type to use (process or xmlrpc -
                             default process).
       --token=XMLRPCTOKEN   Specify the connection token to be used when
                             connecting to a remote server.
       --revisions-changed   Set the exit code depending on whether upstream
                             floating revisions have changed or not.
       --server-only         Run bitbake without a UI, only starting a server
                             (cooker) process.
       -B BIND, --bind=BIND  The name/address for the bitbake server to bind to.
       --no-setscene         Do not run any setscene tasks. sstate will be ignored
                             and everything needed, built.
       --remote-server=REMOTE_SERVER
                             Connect to the specified server.
       -m, --kill-server     Terminate the remote server.
       --observe-only        Connect to a server as an observing-only client.
       --status-only         Check the status of the remote bitbake server.
       -w WRITEEVENTLOG, --write-log=WRITEEVENTLOG
                             Writes the event log of the build to a bitbake event
                             json file. Use '' (empty string) to assign the name
                             automatically.

后续用到再回来解释吧。


1.5.2 例子

本章举例说明了如何使用bitbake

1.5.2.1

执行一个单一的任务很简单。在后面加任务名即可。如果不指定。bitbake执行默认的任务 也就是builld。

bitbake -b foo_1.0.bb  不处理任何依赖。执行foo_1.0.bb的构建任务

bitbake -b foo_1.0.bb -c clean 对于这个菜谱执行清理任务

-b明确指定了不要处理任何依赖。如果不是用于调试目的。建议使用1.5.2.2的表达式


1.5.2.2 执行一系列菜谱任务的集合

如果你想管理很多个bb菜谱。必须要告诉bitbake那些文件是可以是哟娜的。那些任务是你需要执行的。每个菜谱也描述表达他需要的依赖库,包括运行时和构建时。也必须描述相同或者类似功能能菜谱的优先级,或者菜谱有多个不同版本的时候也需要描述优先级。比如glibc和musl都是标准C函数库,那么也要指定优先级别。或者glibc1.0 glibc2.0也要指定优先级别。


bitbake命令如果不是用--buildfile或者-b。 只能接受PROVIDES。而不能提供任何东西。默认情况下一个菜谱文件通过bitbake foo来产生PROVIDES

bitbake -c clean foo提供了 foo包并且执行了do_clean任务。


1.5.2.3 产生依赖图

bitbake通过dot表达式产生依赖图。可以通过dot工具生成image

当你产生依赖图的时候。bitbake在当前的working目录产生四个文件。

 package-depends.dot 显示了bitbake所知道的这个目标运行时的依赖

pn-depends.dot 显示了构建目标时的依赖。

task-depends.dot 显示了任务之间的依赖

pn-buildlis 显示了这个构建这个任务的一系列清单


通过-I指定不去依赖某些通用的依赖。去掉这些信息可以让依赖度可读性更高。不太多。


比如bitbake -g foo 产生了foo的依赖图。所有的都包含了。

bitbake -g -I virtual/kernel -I eglibc foo 去掉了virtual/kernel eglibc 的foo的依赖图

产生的dot文件可以用graphviz的dot工具变成img文件。

使用命令如下。sudo apt-get install graphviz

dot -Tpng xxxx.dot >out.png

但是依赖关系图一般都非常大。这个out.png可能会非常非常大。所以使用-I命令去掉一些通用的基础依赖可以有更好地可读性







待续待续

你可能感兴趣的:(bitbake 用户手册)