Skip to main content
Graduate
March 10, 2025
Solved

KMSDRM with SDL2 kernel 6.6 scarthgap

  • March 10, 2025
  • 1 reply
  • 2492 views

Hello,

I was able to make the SDL2 library works with KMSDRM with kernel 5.15 Kirkston but with kernel 6.6 Scarthgap it doesn't work. I also configured the kmsdrm to work in the .bbappend file since I am using Yocto. I can see from the log.configure that the kmsdrm is on but the application which was working with 5.15 is still not able to run with 6.6. However, KMSCube is working means KMSDRM is working from the kernel point of view. The messages that I got when debug are below:

INFO: video driver in use is: (null)
INFO: video driver 0: wayland
INFO: video driver 1: KMSDRM
INFO: video driver 2: (null)
INFO: video driver 3: (null)
INFO: Failed to initialize SDL: No available video device

 

Even if I specify the driver to be kmdrm I see the following

INFO: video driver in use is: (null)
INFO: video driver 0: wayland
INFO: video driver 1: KMSDRM
INFO: video driver 2: (null)
INFO: video driver 3: (null)
INFO: Failed to initialize SDL: kmsdrm not available

 

I don't know why it is still unavailable?

from the "log.do_configure" of Yocto I can see this:

-- SDL_KMSDRM (Wanted: ON): ON
-- SDL_KMSDRM_SHARED (Wanted: ON): ON

in the build folder of "libsdl2" I can see also this in the "CMakeCache.txt" file:

//Use KMS DRM video driver
SDL_KMSDRM:BOOL=ON

//Dynamically load KMS DRM support
SDL_KMSDRM_SHARED:BOOL=ON

 

I edited the bbappend by adding those two lines to switch the offscreen off and to make sure that the KMSDRM is working

EXTRA_OECMAKE += " \
-DSDL_VIVANTE=OFF \
-DSDL_OPENGL=OFF \
-DSDL_KMSDRM=ON \
-DSDL_OFFSCREEN=OFF \
"

What else can I do? any suggestions?
Thanks in advance

    This topic has been closed for replies.
    Best answer by Erwan SZYMANSKI

    Hello @Khaled-ELGHA ,
    That was the kind of logs I was looking for:

     

    2049 openat(AT_FDCWD, "/vendor/lib/libGLESv2.so.2", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
    2049 openat(AT_FDCWD, "/usr/lib/libGLESv2.so.2", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3

     

    In this situation, we see that libGLESv2 is not found in the first path, but found in the second one (OK).

    Not sure this is the case for libgbm:

     

    2051 openat(AT_FDCWD, "/usr/lib/libgbm.so.1.0.0", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
    

     

    If libgbm.so is present on your filesystem, you can try to create a symbolic link in /usr/lib/libgbm.so.1.0.0 that points on the original .so dynamic library.

    This is just a on the fly test, but if it solves something, you can patch it in a better way in your Yocto image.

    This is just hypothesis to open investigations path, I am not sure what is the real root cause here, as I am not a full graphic expert.

    EDIT: by looking at my old LVGL yocto layer, it seems to match with what I faced:

    ln -s -r ${D}/vendor/lib/libgbm.so.1.0.0 ${D}/usr/lib/libgbm.so.1.0.0 
    ln -s -r ${D}/vendor/lib/libGAL.so ${D}/usr/lib/libGAL.so

    Kind regards,
    Erwan.

    1 reply

    Technical Moderator
    March 10, 2025

    Hello @Khaled-ELGHA ,
    As a quick test, could you please try the following thing in your libsdl2_%.bbappend:

    # Force gles2 and kmsdrm config for libsdl2
    PACKAGECONFIG ??= " \
     ${PACKAGECONFIG_GL} \
     ${@bb.utils.filter('DISTRO_FEATURES', 'alsa pipewire pulseaudio vulkan', d)} \
     ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland gles2', '', d)} \
     ${@bb.utils.contains("TUNE_FEATURES", "neon","arm-neon","",d)} \
     kmsdrm \
     gles2 \
    "
    

    Can you try to add manually here kmsdrm and gles2 ?

    Kind regards,
    Erwan.

    Graduate
    March 10, 2025

    Thank you for your quick reply

    I already edited the "libsdl2_2.30.1.bbappend" which located in "/home/drawengine/projects-scarthgap/layers/meta-st/meta-st-openstlinux/recipes-graphics/libsdl2" as a quick test:

    Do I need to also add gles2? I will do it anyway and comeback to you, I just wanted to show you the whole bbappend file

    Thanks a lot

     

    FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
    
    SRC_URI += "file://0001-Correction-of-bad-dlopen-for-libEGL.patch"
    
    PACKAGECONFIG_GL = ""
    
    PACKAGECONFIG ??= " \
     ${PACKAGECONFIG_GL} \
     ${@bb.utils.filter('DISTRO_FEATURES', 'alsa pipewire pulseaudio vulkan', d)} \
     ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland gles2', '', d)} \
     ${@bb.utils.contains("TUNE_FEATURES", "neon","arm-neon","",d)} \
     kmsdrm \
    "
    
    EXTRA_OECMAKE += " \
     -DSDL_VIVANTE=OFF \
     -DSDL_OPENGL=OFF \
     -DSDL_KMSDRM=ON \
     -DSDL_OFFSCREEN=OFF \
    "
    
    PACKAGECONFIG:class-nativesdk = " \
     ${PACKAGECONFIG_GL} \
     ${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)} \
     kmsdrm \
    "
    
    EXTRA_OECMAKE:class-nativesdk: += " \
     -DSDL_VIVANTE=OFF \
     -DSDL_OPENGL=OFF \
     -DSDL_KMSDRM=ON \
     -DSDL_OFFSCREEN=OFF \
    "

     


     

    Technical Moderator
    March 10, 2025

    Hello @Khaled-ELGHA ,
    In the past, I needed to make LVGL graphic framework run thanks to libSDL2 linked to our GPU, and for a reason I needed to put this gles2 to fully activate the different features.

    Moreover, if you still face some trouble, do not hesitate to launch the graphic application with strace to check the different libraries access that could potentially fail.

    Let me know the results of your different tests.

    Kind regards,
    Erwan.