Yocto的Variables概念介绍
初学Yocto的开发者,会发现Yocto的Variables繁多,而且概念都特别不好理解,在这里就分别讲一些容易混淆的概念
1、PN, PV, PR, S, B, D, WORKDIR
从字面意思进行理解的话,PN:Package Name,PV:Package Version,PR:Package Revision,S:Source Dir,B: Build Dir,D:Destition Dir
下面就通过两个recipe例子进行解析:example1_0.1_r1.bb, example2.bb
对于认识recipe的构成,有几个万能公式,就是PN_PV_PR.bb, PV的default就是1.0,PR的default就是r0,因此呢
example1_0.1_r1.bb -> PN = example1, PV=0.1, PR=r1
example2.bb-> PN = example2, PV=1.0, PR=r0
对于S, B, D,大家可以使用bitbake提供的指令进行查看,bitbake -e example1 | grep ^S= , 感兴趣的开发者伙伴可以自行进行验证,这边直接给出总结
WORKDIR= workspace/${tmp}/work/${machine_arch}/PN/PV-PR
B=${WORKDIR}/PN-PV
S=B
D= ${WORKDIR}/image
2、Difference between DEPENDS & RDEPENDS
粗略来讲
DEPENDS -> Build time Dependency,只是在编译阶段,不涉及安装打包阶段
RDEPENDS -> Run time Dependency ,在运行阶段,换言之两个都会被安装到image中
DEPENDS: When a recipe 'A' is DEPENDS on recipe 'B'. 在这种情况下, Bitbake先构建 'B' 然后构建 'A'
E.g. dbus DEPENDS +=wpa_supplicant, 在编译wpa_supplicant之前会先编译'dbus'.
RDEPENDS: When a recipe 'A' is RDEPENDS on recipe 'B'. 在这种情况下, Bitbake安装B到image的时候会将A也安装到Image中.
E.g. 'perf' RDEPENDS+= 'bash', 当bash被安装到image的时候,perf也会被安装
3、Difference between PROVIDES & RPROVIDES
PROVIDES和RPROVIDES的作用都是提供PN的别名,但是有所区别
PROVIDES:提供的别名是供DEPENDS使用,只是能在编译过程中使用,不能将其加入package_install等装进image的操作,只能被放入WORKDIR的recipe-sysroot下
RPROVIDES:提供的别名是供RDEPENDS使用,是run time级别,提供的别名可以填入PACKAGE_INSTALL被安装到image中
4、RRECOMMENDS
RDEPENDS 的弱化版,RDEPENDS和RRECOMMENDS都用来指代run time dependency,但是RDEPENDS是hard dependency,RRECOMMENDS是soft dependency。
对于RRECOMMENDS来说,如果列出的dependency recipe不存在,build不会报错。但是RDEPENDS会出现报错。
5、PREFERRED_PROVIDER_virtual
当yocto一个变量有多个recipe进行提供时,可以conf中定义PREFERRED的,即是最推荐的。
比如
example1.bb中提供virtual/exg=A
example2.bb中提供virtual/exg=B
example3.bb中提供virtual/exg=C
这个时候会发现exg功能同时有多重实现,但是我们可以选择我们想要的,在conf文件中定义PREFERRED_PROVIDER_virtual/exg=A即可挑选出最终胜出者。

浙公网安备 33010602011771号