作为车规级的嵌入式Linux,AGL Linux使用新的构建方式,不再使用GNU Make这一套,以前老的构建方式学习曲线比较陡峭,组件删减也不方便。
那么Bitbake、Poky、Yocto、OpenEmbedded分别是干啥的呢:
Bitbake:是一个通用任务执行引擎,允许shell和python任务在复杂的任务间依赖约束条件下高效并行运行,有点类似GNU Make。
OpenEmbedded:是一个采用MIT许可证的软件架构或标准,目标在于为嵌入式系统构建Linux发行版。
Poky:参考嵌入式操作系统实际上,是一个可行的构建示例,它使用包含的构建系统(BitBake构建引擎和OpenEmbedded-Core构建系统元数据)构建一个小型嵌入式操作系统。
Yocto:是一个开源协作项目,可帮助开发人员为嵌入式产品创建定制的基于Linux的系统,而不管硬件架构如何。 该项目提供了一套灵活的工具和一个空间,全世界的嵌入式开发人员可以共享可用于为嵌入式设备创建量身定制的Linux映像的技术,软件堆栈,配置和最佳实践。下图就是yocto开发流程:
从上面可以看出,其中最核心的就是bitbake,弄懂它其他就很容易明白了,下面以一个例子来看看bitbake使用。
Bitbake例子
Bitbake根据提供的构建任务的元数据执行任务。元数据存储在配方(.bb)和相关配方“append”(.bbappend)文件,配置(.conf)和底层包含(.inc)文件以及类(.bbclass)文件中。元数据为Bitbake提供了有关运行哪些任务以及这些任务之间的依赖说明。
Bitbake包含一个程序库用于从各种地方(如本地文件,源码管理系统或网站)获取源代码。
每个要构建的单元(例如一个软件)的指令被称为“配方”文件,并且包含关于该单元的所有信息(依赖性,源文件位置,校验和,描述等扥)。
Bitbake包含客户端/服务器抽象,可以通过命令行使用或者通过XML-RPC作为服务提供,并具有多个不同的用户界面。
CentOS7下安装和使用bitbake进行项目构建
先安装python3.x:
$ sudo yum install epel-release
$ sudo yum localinstall openssl-1.0.2k-12.el7.x86_64.rpm openssl-libs-1.0.2k-12.el7.x86_64.rpm
$ sudo yum install python36u
$ sudo ln -s /bin/python3.6 /bin/python3
$ sudo yum install python36u-pip
$ sudo ln -s /bin/pip3.6 /bin/pip3
安装bitbake:
$ cd /data/
$ git clone git://git.openembedded.org/bitbake
$ vi ~/.bash_profile
PATH=$PATH:$HOME/.local/bin:$HOME/bin:/data/bitbake/bin
$ source ~/.bash_profile
$ bitbake -h
建立bitbake项目,编译前目录结构如下(其中bitbake.conf、base.bbclass直接从bitbake安装目录拷贝过来):
[coadmin@vm5 bitbake_test]$ tree
.
├── build<