저는 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 예제를 실행하면 창을 그리고 창 내에서 다시 렌더링할 수 있습니다.
이것이 바로 제가 기대했던 것입니다.