0

设置

我正在使用 Yocto 3.4 “Honister”,并使用以下层:

我创建了自己的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这里是怎么拉的。

4

0 回答 0