【问题标题】:Is there a way to config xorg to use a framebuffer device as the primary monitor?有没有办法将 xorg 配置为使用帧缓冲设备作为主监视器?
【发布时间】:2014-09-29 23:44:55
【问题描述】:

我有一个带有 GPIO 显示屏的 Raspberry Pi。我目前将它设置为 /dev/fb1 的帧缓冲设备。有没有办法让它成为 X windows 的默认或主要显示?我最终试图为它绘制图形,我最初计划使用 DirectFB 和 SDL,但 DirectFB 是 pi 的 alpha 版本。我也尝试过使用 SDL1.2,因为它支持 Framebuffer,但我不知道如何让 SDL 在不使用 DirectFB 的情况下选择要绘制的帧缓冲设备。

我考虑使用 SDL 将我的简单 GUI 的每一帧准备为原始图像并使用 mmap 将其 blit 到 /dev/fb1 而不是使用 SDL 的内置绘图函数,但我觉得这是一种糟糕的实现方式我的目标。

我认为,如果我可以让 xorg 使用我的帧缓冲设备作为主监视器,我就不必担心做任何特别的事情来让 SDL 绘制我的图像文件。但我不太确定 xorg 究竟是如何工作的,以及这是否可能。

任何人的任何见解或帮助都会有很大帮助!一周来我一直在努力解决这个问题,寻找不同的可能性。

【问题讨论】:

    标签: c raspberry-pi framebuffer xorg


    【解决方案1】:

    使用 Raspbian 上的 SDL2,您可以直接在帧缓冲区上绘制,而无需使用 X。图形窗口始终是全屏的。您可以从控制台模式启动代码(停止 X 或从运行 X 的 LXDE,想法是 SDL2 不会使用 X)。

    不幸的是,Raspbian 不附带 SDL2(Jessie 的 SDL2 不起作用),因此您需要自己构建它(大约需要一个小时)。下面描述一下构建SDL2的过程:

    sudo apt-get install build-essential libfreeimage-dev libopenal-dev libpango1.0-dev libsndfile-dev libudev-dev libasound2-dev
    

    https://www.libsdl.org/download-2.0.php 下载 SDL2 的源代码。假设您下载的文件名为 SDL2*.tar.gz,您可以使用以下命令构建和安装它:

    cd ~/Downloads
    tar zxvf SDL2*.tar.gz
    cd SDL2*
    
    ./configure --disable-video-x11
    make
    sudo make install
    

    之后,您应该能够将任何 C++ 程序与 SDL2 链接,例如:

    g++ my_program.cpp -lSDL2 -o my_program
    ./my_program
    

    【讨论】:

    • 有没有办法选择使用哪个帧缓冲设备?上次尝试使用 SDL2 时,它始终默认为 fb0,但我需要它才能使用 fb1。
    • 不确定这是否会有所帮助,但您可以尝试使用 SDL_GetNumRenderDrivers 并查看您有多少选项。如果您有超过 1 个,请尝试使用 SDL_CreateRenderer 选择相应的驱动程序,并查看哪个(如果有)在 fb1 上呈现。我没有找到任何可以直接指定 fb0 或 fb1 的函数。
    • 显然 SDL1.2 有一个环境变量 SDL_FBDEV,您可以使用它来选择要使用的帧缓冲区,SDL_FBDEV 参见sdl.beuc.net/sdl.wiki/SDL_envvars
    猜你喜欢
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 2023-04-06
    相关资源
    最近更新 更多