设置
我正在使用 Yocto 3.4 “Honister”,并使用以下层:
- openembedded-core ( refspec: yocto-3.4 )
- 元开放嵌入式(参考规范:f632403d1800363ac63a1ad5543278b82c659832)
- 元树莓派(参考规范:1584bddcf31f4bf3acc2304aa8dae927e8bec970)
我创建了自己的distro.conf
,基本上看起来像这样:
DISTRO_FEATURES = "acl argp ext2 ipv4 ipv6 largefile opengl pam usbhost xattr zeroconf systemd vfat wayland"
DISTRO_EXTRA_RDEPENDS += "packagegroup-core-boot"
INIT_MANAGER = "systemd"
PACKAGE_CLASSES ?= "package_deb"
PREFERRED_PROVIDER_base-utils = "packagegroup-core-base-utils"
VIRTUAL-RUNTIME_base-utils = "packagegroup-core-base-utils"
VIRTUAL-RUNTIME_base-utils-hwclock = "util-linux-hwclock"
VIRTUAL-RUNTIME_base-utils-syslog = ""
IMAGE_LINGUAS ?= "de-de en-us"
GLIBC_GENERATE_LOCALES ?= "de_DE.UTF-8 en_US.UTF-8"
问题
我的目标是在发行版范围内安装 libGLESv2.so。mesa
配方提供这样的库:
...
PROVIDES = " \
${@bb.utils.contains('PACKAGECONFIG', 'opengl', 'virtual/libgl', '', d)} \
${@bb.utils.contains('PACKAGECONFIG', 'gles', 'virtual/libgles1 virtual/libgles2', '', d)} \
${@bb.utils.contains('PACKAGECONFIG', 'egl', 'virtual/egl', '', d)} \
${@bb.utils.contains('PACKAGECONFIG', 'gbm', 'virtual/libgbm', '', d)} \
virtual/mesa \
"
...
PACKAGECONFIG:class-target ??= "${@bb.utils.filter('DISTRO_FEATURES', 'wayland vulkan', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'opengl egl gles gbm dri gallium virgl', '', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'x11 opengl', 'x11 dri3', '', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'x11 vulkan', 'dri3', '', d)} \
elf-tls \
"
...
PACKAGES =+ "libegl-mesa libegl-mesa-dev \
libosmesa libosmesa-dev \
libgl-mesa libgl-mesa-dev \
libglapi libglapi-dev \
libgbm libgbm-dev \
libgles1-mesa libgles1-mesa-dev \
libgles2-mesa libgles2-mesa-dev \
libgles3-mesa libgles3-mesa-dev \
libxatracker libxatracker-dev \
mesa-megadriver mesa-vulkan-drivers \
mesa-vdpau-drivers \
"
...
对于 raspberry-pis,该文件rpi-default-providers.inc
设置了默认提供程序:
...
PREFERRED_PROVIDER_virtual/libgles2 ?= "${@bb.utils.contains("MACHINE_FEATURES", "vc4graphics", "mesa", "userland", d)}"
...
因此,应该正确设置从虚拟包到具体提供者的连接。但是(显然)这不会将库部署到最终的 rootfs 中。如何才能做到这一点?
到目前为止我尝试了什么
显而易见的方法是在中按名称安装软件包,distro.conf
如下所示:
...
DISTRO_EXTRA_RDEPENDS += "libgles2-mesa"
...
这行得通,但老实说,这种方法对我来说有点不对劲。在我看来,这绕过了虚拟包的整个概念。还是我错了?
此外,出于测试目的,我将 weston 安装到图像中。这会将 libGLESv2.so 添加到 rootfs,我试图解决为什么会发生这种情况(并针对我的问题使用相同的方法),但我无法弄清楚。从weston
配方来看,问题的相关部分似乎是:
...
DEPENDS += "wayland wayland-protocols libinput virtual/egl pango wayland-native"
...
# Weston on KMS
PACKAGECONFIG[kms] = "-Dbackend-drm=true,-Dbackend-drm=false,drm udev virtual/egl virtual/libgles2 virtual/libgbm mtdev"
# Weston on Wayland (nested Weston)
PACKAGECONFIG[wayland] = "-Dbackend-wayland=true,-Dbackend-wayland=false,virtual/egl virtual/libgles2"
...
这会将所有虚拟包添加到 DEPENDS 列表中,但是当我这样做时(例如在我的图像配方中),我看到 mesa 正在构建但库未部署到 rootfs。我看不到libgles2-mesa
这里是怎么拉的。