如何在带 LCD 显示屏的嵌入式 Linux 系统中运行 SDL2 演示?

如何在带 LCD 显示屏的嵌入式 Linux 系统中运行 SDL2 演示?

我正在开发一个嵌入式Linux系统(5.10.24),里面有一个LCD显示屏。
现在我尝试在其中运行 SDL2 示例(从串行控制台),但我失败了。
示例代码如下,

#include "SDL2/SDL.h"

int main(int argc, char* argv[])
{
        SDL_Window* window;
        SDL_Renderer* renderer;

        if (SDL_Init(SDL_INIT_VIDEO) < 0) {
                printf("error initializing SDL: %s\n", SDL_GetError());
                return 1;
        }

        window = SDL_CreateWindow("SDL_RenderClear",
                        SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
                                    512, 512, 0);

        renderer = SDL_CreateRenderer(window, -1, 0);
        SDL_SetRenderDrawColor(renderer, 64, 255, 128, 255);

        SDL_RenderClear(renderer);
        SDL_RenderPresent(renderer);

        SDL_Delay(5000);
        SDL_Quit();
        return 0;
}

它被编译为mips-linux-gnu-gcc -g2 sdl_ex1.c -I/sysroot/usr/include/ -Lsysroot/usr/lib/ -lSDL2 -lts -o sdl_ex1.

当我从串行控制台运行它时,它失败并出现以下错误。

~ # ./sdl_ex1
error initializing SDL: No available video device
~ # echo $DISPLAY

~ #

但我可以在 Ubuntu-20.04 VM 中的 Xterm 中正确运行它。弹出一个新窗口并显示其中的内容。在 Ubuntu-20.04 中 $DISPLAY 是 ':1'。

在嵌入式系统中,有2个帧缓冲设备,/dev/fb0和/dev/fb1。但没有 libX11 或其他 X 的东西。

GUI正在LCD显示屏上运行,那么在这个系统中,我如何运行SDL应用程序?

答案1

根据 StackOverflow 上 Keltar 和 David 的评论,我终于解决了这个问题。我使用 directfb 重建了目标根文件系统,并使用 directfb 重建了 SDL2。之后,我在目标的 shell 中设置了 export SDL_VIDEODRIVER=directfb 。

然后我可以启动SDL2示例,它可以绘制窗口并在窗口中进行重新渲染。

这正是我所期望的。

相关内容