我正在做一个嵌入式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
~ #
系统运行于ARMv7(四核),图形用户界面为QT UI,Linux内核为5.10.24。有64MB RAM, 256MB FLASH, 没有X.
但我可以在 Ubuntu-20.04 VM 的 Xterm 中正确运行它。 有 2 个帧缓冲设备,/dev/fb0 和 /dev/fb1。 一个 GUI 正在 LCD 显示器中运行,那么在这个系统中,我如何运行 SDL 应用程序?
在Keltar和David的评论下,我终于搞定了
我用 directfb 重建了目标根文件系统,用 directfb 重建了 SDL2。
之后,我在目标的外壳中设置
export SDL_VIDEODRIVER=directfb
。
然后我可以启动SDL2示例,它可以绘制窗口并在窗口中进行重新渲染。
这是我所期望的。