私は、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の例を実行すると、ウィンドウを描画してウィンドウ内で再レンダリングできます。
これがまさに私が期待したものです。