By: fulinux
E-mail: fulinux@sina.com
Blog: https://blog.csdn.net/fulinus
喜欢的盆友欢迎点赞和订阅!
你的喜欢就是我写作的动力!
返回总目录 : Yocto开发讲解系列 - 总目录
BBCLASSEXTEND变量
可以用来扩展recipe,构建该recipe的变体recipe。
呃… 这句话怎么理解呢?
native变量
在解答上面的问题之前,我们先来了解下这个native变量,做过yocto开发一段时间后,在一些bb文件中,读者朋友可能会看到类似这样语句:
xxx/libxxx-native_git.bb #这是一个库的recipe, xxx是一个一般代指
inherit native ...
...
- 1
- 2
- 3
而且细心一点,在同级目录下可能还会看到这个文件
xxx/libxxx_git.bb
inherit ...
- 1
- 2
而且两个文件大体内容还及其相似,是什么关系和联系呢?
举个实际一点的栗子:
libcutils
libcutils-native
libselinux
libselinux-native
- 1
- 2
- 3
- 4
python示例
如果出现上述情形,大体上的原因就是这个libxxx库,既需要被我们的开发板使用到,而且在PC编译机器上也需要使用到。
比如python这个项目,我们PC编译机器(比如Ubuntu系统)上在编译yocto的时候就需要用到:
build]$ ls tmp/work/x86_64-linux/python3-native/3.8.5-r0/image/home/peeta/poky/build/tmp/work/x86_64-linux/python3-native/3.8.5-r0/recipe-sysroot-native/usr/bin/
nativepython3 python3-native
- 1
- 2
而且我们开发板或者目标机器也可能需要安装python工具:
build]$ ls tmp/work/armv7ahf-neon-poky-linux-gnueabi/python3/3.8.5-r0/image/usr/bin/
2to3 2to3-3.8 idle3 idle3.8 pydoc3 pydoc3.8 python3 python3.8 python3.8-config python3-config
- 1
- 2
从上面的目录路径,我们结合之前的学习就知道一个是在x86_64-linux(PC)上运行的,一个是在armv7ahf-neon-poky-linux-gnueabi目标机器(比如这里的arm开发板)运行的,体系架构不一样指令集也不一样。
BBCLASSEXTEND变量的意义
上面我们看到的情况是:如果一个recipe需要被PC和目标机器同时用到,我们写两个bb文件即可,其中一个文件名带上
-native
,同时在bb文件中使用这个语句:
xxx/libxxx-native_git.bb #这是一个库的recipe, xxx是一个一般代指
inherit native
...
- 1
- 2
- 3
bb文件中其他内容,比如
DEPENDS
添加依赖的recipe项也做一些稍加改动,比如原来是:
xxx/libxxx_git.bb
inherit ...
DEPENDS = "libabc"
- 1
- 2
- 3
那么,现在就改成这样:
xxx/libxxx-native_git.bb #这是一个库的recipe, xxx是一个一般代指
inherit native
DEPENDS = "libabc-native" #要有这个recipe哦
...
- 1
- 2
- 3
- 4
但是,因为大部分内容都雷同,创建两个文件的做法就显得很呆了。
还好yocto考虑到了这一点,给我们提供了
BBCLASSEXTEND
变量,有了这个变量就很方便了。我们只需在bb文件中添加这个语句就可以了:
BBCLASSEXTEND = "native"
- 1
Yocto就会自动为我们创建一个recipe的变体recipe-native,就不用再去单独写个bb文件了。例如:
xxx/libxxx_git.bb
inherit ...
DEPENDS = "libabc"
BBCLASSEXTEND = "native"
- 1
- 2
- 3
- 4
希望帮我点个赞加关注,你的喜欢就是我持续更新的动力!
更新时间202112