LCD 디스플레이가 있는 임베디드 Linux 시스템에서 SDL2 데모를 실행하는 방법은 무엇입니까?

LCD 디스플레이가 있는 임베디드 Linux 시스템에서 SDL2 데모를 실행하는 방법은 무엇입니까?

저는 LCD 디스플레이가 내장된 임베디드 Linux 시스템(5.10.24)을 개발 중입니다.
이제 (직렬 콘솔에서) 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를 사용하여 대상 루트 파일 시스템을 다시 구축했습니다. 그런 다음 대상 셸에서 내보내기 SDL_VIDEODRIVER=directfb를 설정했습니다.

그런 다음 SDL2 예제를 실행하면 창을 그리고 창 내에서 다시 렌더링할 수 있습니다.

이것이 바로 제가 기대했던 것입니다.

관련 정보