我正在开发一个嵌入式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示例,它可以绘制窗口并在窗口中进行重新渲染。
这正是我所期望的。