Yocto Project™ 是一个开源的协作软件,提供模板、工具和方法帮你创建定制的 Linux 系统和嵌入+式产品,而无需关心硬件体系。适合嵌入式Linux开发人员使用。查看Yocto Project Quick Start
相关术语
Poky
Poky是Yocto Project的参考发布版本。它包括OpenEmbedded构建系统(BitBake and OpenEmbedded Core)和一系列metadata,帮助开发者构建自己的distro。你可以下载Poky和使用它去逐步搭建自己的发布版本。需要注意的是Poky不包括二进制文件,它是一个关于搭建编译你自己制定的Linux发布版本的一个源代码用例。
Bitbake
一种软件组建自动化工具程式,像所有的build工具一样(比如make,ant,jam)控制如何去构建系统并且解决构建依赖。但是又区别于功能单一的工程管理工具(比如make),bitbake不是基于把依赖写死了的makefile,而是收集和管理大量之间没有依赖关系的描述文件(这里我们称为包的配方),然后自动按照正确的顺序进行构建。oe代表OpenEmbedded,而openembedded是一些用来交叉编译,安装和打包的metadata(元数据)。会获取*.bb文件中包的依赖关系的命令格式。
OpenEmbedded-Core
是一些脚本(shell和Python脚本)和数据构成的自动构建系统。
Metadata
Recipes(配方):(.bb/.bbappend)组件的逻辑单元的构建规范,用来获取源代码、构建和打包组件;
Class:(.bbclass)包括各个recipes之间共享的相同的功能;
Configuration:(.conf)定义Poky如何的各种配置文件;
Layers:一系列相同的recipes,就像meta-fsl-arm。
i.MX 基于Yocto Project 环境搭建
下记内容主要基于 i.MX_Yocto_Project_User’s_Guide.pdf进行整理。
Ubuntu下载编译Yocto所需要的工具包设置repo工具下载recipe layers
下载之后,在fsl-release-bsp/sources目录下会有meta文件如下:
base meta-browser meta-fsl-arm meta-fsl-arm-extra meta-fsl-bsp-release meta-fsl-demos meta-openembedded meta-qt5 poky
每个文件夹里面存放着各个layers所需的文件来源信息。bitbake命令就是通过解析里面的文件来获取并下载编译所需的源代码。
1. DISTRO=fsl-imx-x11 MACHINE=imx6dlsabresd source fsl-setup-release.sh -b build-x11
DISTRO指定的内容标记要生成的distribution,固定为以下内容的一个:
fsl-setup-release.sh脚本会根据MACHINE指定的内容从sources/meta-fsl-arm/conf/machine里面的文件选择对应的.conf进行编译。
-b选项指定配置和编译的内容存放的路径放在build-x11。
当执行该脚本之后,会在build-x11/ 目录下生成配置文件。
在build-x11/conf/local.conf会指定DL_DIR的内容,该路径用于下载并保存编译所需要的包。在bitbake在编译的时候会先去该路径
查看有没有所需的包,如果没有,就从网上下载到该目录下。一般情况下这些包都是固定的,在团队开发中可由一人先下载,之
后共享出来,然后每个人将DL_DIR指定到该共享文件夹就可以省去网上下载的麻烦。
Build-x11/conf/bblayers.conf会指定所需要的layers。
bitbake在启动时会执行bitbake.conf,bitbake.conf会装载用户提供的local.conf。然后根据用户在local.conf
中定义的硬件平台MACHINE和发布目标DISTRO装载machine子目录和distro子目录的配置文件。machine子
目录里是硬件平台相关的配置文件。distro子目录里是与发布目标相关的配置文件。配置文件负责设置
bitbake内部使用的环境变量。这些变量会影响整个构建过程。
每次新打开一个窗口,都要进行一次source操作。
#source setup-environment <build-dir>
执行编译之前,先要在/home/VictorHuang/work/downloads执行脚本./mk-empty-dir创建git关联空的目录。正
常使用 DL_DIR 下载到的包都是包括 .git 的目录的,编译的时候会去检查 .git的内容。但是我们使用git管理并
共享downloads/的内容,这里将 .git 相关的内容给忽略掉。所以编译之前要创建 .git 相关的空目录。
执行#bitbake image-name
其中image-name的内容为以下的一个:
执行完毕之后会在build-x11/tmp/work-shared/imx6dlsabresd/kernel-source看到kernel的源代码和
tmp/work/imx6dlsabresd-poky-linux-gnueabi/linux-imx/4.1.15-r0/git
在build-x11/tmp/deploy/images目录下会有编译生成的所有images文件。
在build-x11/tmp目录下常见的目录为:
http://blog.csdn.net/rocky_zhm/article/details/48266657
通用路径为:
<builddirectory>/tmp/work/<machine>-poky-linuxgnueabi/u-boot-imx/<version>/git
比如为:
build-x11/tmp/work/imx6dlsabresd-poky-linux-gnueabi/u-boot-imx/2016.03-r0/git
#bitbake -c compile -f module-name
-f是为了强制编译
module-name 是模块的名称,这个名称可以在 tmp/work/imx6dlsabresd-poky-linux-gnueabi/目录下看。
例如:想单独编译一下kernel,可以用以下命令。
#bitbake -c compile -f linux-imx
编译后重新发布:
#bitbake -c deploy module-name
例如:
#bitbake -c deploy linux-imx
查看列表
#bitbake -c listtasks linux-imx
mk-empty-dir脚本