设置
我正在使用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"
...
这会将所有的虚拟包添加到“依赖”列表中,但是当我这样做时(例如,在我的映像食谱中),我会看到mesa正在构建,但是库并没有部署到rootfs中。我看不出libgles2-mesa
是怎么被拉到这里的。
发布于 2022-06-22 20:30:17
假设每个包的配方配置正确(您可以假设Yocto是这样的,检查您自己的),以便在您需要的整个编译过程中启用GLESv2:
DISTRO_FEATURES += " gles2"
无论是在图片食谱上还是在conf/local.conf
中
https://stackoverflow.com/questions/71077860
复制相似问题