yocto系列讲解 (技巧篇) 72 - BBCLASSEXTEND变量的作用

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