1、bitbake简介BitBake 是一种软件组建自动化工具程式。功能类似于make,是针对于嵌入式Linux交叉编译器环境所设计研发。它源自于Gentoo Linux的软件包管理系统,是用 Python 写的一个程序。它是 OpenEmbedded 构建系统时使用的生产工具,比如Yocto 、WindRiver Linux 等嵌入式系统都是在使用它进行编译。它是一个多任务引擎,可以并行执行 shell 和 Python 任务,每个任务单元根据预定义的元数据来管理源码、配置、编译、打包,并最终将每个任务生成的文件集合成为系统镜像。例如要从源码构建一个 Linux 系统,需要搭建一个生产环境,然后依次生成 Grub、Kernel、各种库文件、各种可执行文件,然后集合到一个文件系统里。如果你玩过 LFS ,就会了解这个过程的复杂性。BitBake 存在的意义就是提供了一个高效的工具,并将这个过程标准化、流程化。BitBake 与 GNU Make 的关系就像 GNU Make 之于 GCC ,运作方式也类似 GNU Make ,但又有很多不同:
像其它的编译工具一样(比如 make,ant,jam),bitbake在编译时控制如何去构建系统并解决构建的依赖关系,但是又区别于功能单一的工程管理工具(比如make),bitbake不依赖死板的makefile文件,而是收集和管理大量没有依赖关系的描述文件(刚才那个中称为包的配方(recipe)),然后自动按照正确的顺序进行构建。同时可以配置交叉编译,比如oe代表OpenEmbedded,而openembedded就是用来进行一些交叉编译,安装和打包的metadata(元数据)的。 2、bitbake配置文件简介
3、bitbake命令bitbake命令使用可以通过bitbake -h 查看命令参数。一般在实际编译使用的是bitbake obmc-phosphor-image,或者time bitebake obmc-phosphor-image命令,添加time可以显示编译运行时间。 bitbake obmc-phosphor-imagetime bitebake obmc-phosphor-image #显示编译消耗时间。 4、bitbake编译流程OpenEmbedded 项目中有很多的脚本(shell 和 python 脚本)和数据来自动构建系统。脚本实现构建过程,包括下载(fetch)、解包(unpack)、打补丁(patch)、配置(configure)、编译(compile)、安装(install)、打包(package)、staging、做安装包(package_write_ipk)、构建文件系统、打包镜像文件等等。 一般OE 编译顺序:
在openbmc工程中bitbake实际是指向poky目录下的bitbake,meta是指向poky目录下的meta。在poky中元数据是在meta下。 5、编译目录介绍在执行 . oe-init-build-env 命令(默认是qemuarm机型参数)后会进入build目录下,此时会有一个conf文件夹。执行bitbake 命令后会生成cache、sstate-cache、tmp文件夹。(workspace是通过devtool生成文件夹)
bitbake命令生成的镜像在build/tmp/deploy/imags目录下。 6 、环境配置1、使用 oe-init-build-env配置编译环境,如果不设置builddir,则默认是qemuarm。 source <path>/oe-init-build-env <builddir> 2、使用 openbmc-env配置变异环境,一般进入openbmc文件夹后执行。 export TEMPLAMENTCONF=meta-*/meta-*/conf . openbmc-env 7、常用命令编译u-boot: bitbake uboot 编译系统镜像: bitbake core-image-minimalbitbake core-image-basebitbake fsl-image-guibitbake fsl-image-qt5bitbake fsl-image-multimedia 只下载不编译: bitbake -c fetchall core-image-minimal 跳过错误,继续编译: bitbake -k core-image-minimal 查看编译执行task: bitbake xx-image -c listtasks 查找 包: bitbake -s | grep packagename 查找包下载地址: bitbake -e xxx-image | grep ^SRC_URI= 查看软件依赖关系: bitbake -g packagename 清除编译结果: bitbake -c clean -v u-bootbitbake -c cleanall xx-image #清除所有编译中间bitbake -c cleansstate xx-image #清除编译 生成编译 中的配置文件和类文件: bitbake -e > mybuild.log |
|