yocto初学
tips:
-
yocto和buildroot一样用于设计编译自己的linux系统
-
buildroot中是很多模块写好了(在package中),只需要我们去用y开启模块(只能在他有限的已有里选);而yocto中是里面没有直接集成好,需要我们去编写bb文件(或者直接在网站OpenEmbedded Layer Index - layers下载别人写好的bb文件),然后install到系统中(所以我们想加入什么都可以,更自由)。并且yocto支持差量编译,即会识别出差异并编译进去
-
yocto中包含三个部分:自动构建的工具+poky+openembedded构建系统(里面包括bitbake)
-
数个bb(bitbake配置文件)集成一个recipe,数个recipe又组成meta layer
-
yocto中的layer概念:其实就是meta(recipe的集合)。
-
layer配置文件(在meta目录中的conf/xx.conf)书写方式:
-
poky/meta/conf/bitbake.conf中配置了bitbake很多重要的全局变量,bitbake运行的第一件事就是要找这个conf
-
.bbclass这种文件是类文件,提供bb共有的内容,所以base.bbclass是所有bb文件的公共基类(在poky/meta/classes中)
-
如果要让bitbake能找到某个菜谱,需要在poky/meta/conf/layers.conf中的BBFILES加入
-
bitbake -s可以列出工程中已有的软件包(有bb,和bbclass)
bb文件书写语法:
-
DEPENDS变量要构建时候的依赖,是其他recipe的名字
-
FILESPATH是当SRC_URII变量指定本地文件的时候会搜索的目录集合,FILESEXTRAPATHS是用来扩展该搜索目录的,不可以用:=来强制改变
-
THISDIR是 bb文件所在的目录,bbappend里的这个变量也是其对应的bb文件的目录
-
PN是配方名;PV为配方版本;PR为配方修订版本;BPN为更简洁的PN
-
${S}源码目录 ${B}编译目录 ${D}安装目录,默认为image目录
-
TOPDIR是工程根目录
-
FILES_${PN}表示了该bb中需要被打包进镜像的文件是xx,但是该软件包是否参与打包,是需要在其他地方配置的
-
bb中的任务书写:
-
do_configure[noexec] = "1"这种类似的意思是禁止xxx,如这里是禁止配置
-
do_configure任务会根据你的软件包编译时基于autotools还是cmake/make来使用不同变量来添加配置其他选项,之后就是do_compile编译——do_install安装
-
do_rootfs任务会创建根文件系统,其最后会打包到image中。do_image任务则是优化压缩生成image
-
bbclass文件种用addtask来添加任务,如addtask build,就是表示继承该类的bb必须执行do_build任务,该任务要写在bb文件中
-