Linux 帧缓冲区正确设置分辨率

Linux Framebuffer set resolution correctly

我有一个 RaspberryPi 并且想在没有 xserver 的情况下全屏显示图像 - 所以直接将它写入帧缓冲区。这里没问题。

但是设置为全屏不起作用。

cat /sys/class/graphics/fb0/modes

产量:

U:1024x768p-0
U:1920x1200p-0
U:1920x1080p-0
U:608x684p-0

所以我用

fbset -xres 1920 -yres 1200 -match

导致

>>fbset
mode "1920x1200"
geometry 1920 1200 1920 1200 16
timings 0 0 0 0 0 0 0
rgba 5/11,6/5,5/0,0/16
endmode

如果我现在使用 fbi 来显示图像,或者只是填充帧缓冲区 /dev/urandom >> /dev/fb0,则只会填充部分屏幕。显示部分的纵横比等都是正确的,只是周围有一个大黑边。

如果我使用其他分辨率,一切都会按预期工作,例如 fbi 中的统计行变大等。

我做错了什么?

为 fbset 尝试这种格式:

fbset -fb /dev/fb0 -g 1920 1200 1920 1200 16 

并检查你真的在看 fb0 而不是 fb1:

fbset -fb /dev/fb0

仔细检查实际设置的内容:

cat /sys/class/graphics/fb0/mode

也尝试 运行 fbi 与(再次确保您使用的是 fb0):

fbi -d /dev/fb0 image.png

您还可以通过执行以下操作将您的设置强制放入 fb0:

echo U:1920x1200p-0 > /sys/class/graphics/fb0/mode

从技术上讲,这就是 fbset 正在做的事情。 只是确保 fb1 没有搞砸。

最后,确保您的主机使用的是 fb0。我确定是。

con2fbmap 1

您可能还想重启,因此请检查您的设置:

cat /proc/cmdline

如果不是 1920x1200,请更新为 1920x200。我认为它位于 /boot/cmdline.txt for raspberry pi。对我来说它 /boot/uEnv.txt.

我有一个由两部分组成的答案,它在 Raspberry Pi 上产生了奇迹。

首先,Pi 有过扫描的概念,它是在整个屏幕周围添加黑色边框,使其落入旧电视的“管”内。是的,一些模拟该功能的现代平板电视也需要它。如果您的黑色边框围绕所有屏幕分辨率,则更改此设置。最简单的方法是通过 sudo raspi-config 。选项和布局因 raspi-config 的不同版本而异,但您可以先在 Advanced Options 菜单中查找 Overscan。如果过扫描是您的问题,但您希望更好地控制黑色边框的大小 - 那么在 /boot/config.txt 中有一种微调它的方法。我不会在这里深入探讨,搜索如何调整该文件很容易。

如果这不是您的问题,并且您正在寻找可以为您的 TV/monitor 设置的更好的分辨率,那么您也可以使用 raspi-config 到 select 从所有有效的屏幕分辨率。它们与过扫描位于相同的 Advanced Options 菜单中。

如果您需要以编程方式检查和设置分辨率,那么首选工具是 tvservice。该程序没有手册页,但 运行 它不带参数提供了一些帮助。有一些非常有趣的功能远远超出 fbset 所能做到的。

一些简短的例子:

$ sudo tvservice --status
state 0x120009 [HDMI CEA (16) RGB lim 16:9], 1920x1080 @ 60.00Hz, progressive
$
$ sudo tvservice --modes=CEA
Group CEA has 11 modes:
           mode 1: 640x480 @ 60Hz 4:3, clock:25MHz progressive 
           mode 2: 720x480 @ 60Hz 4:3, clock:27MHz progressive 
           mode 3: 720x480 @ 60Hz 16:9, clock:27MHz progressive 
           mode 4: 1280x720 @ 60Hz 16:9, clock:74MHz progressive 
  (prefer) mode 16: 1920x1080 @ 60Hz 16:9, clock:148MHz progressive 
           mode 17: 720x576 @ 50Hz 4:3, clock:27MHz progressive 
           mode 18: 720x576 @ 50Hz 16:9, clock:27MHz progressive 
           mode 19: 1280x720 @ 50Hz 16:9, clock:74MHz progressive 
           mode 31: 1920x1080 @ 50Hz 16:9, clock:148MHz progressive 
           mode 32: 1920x1080 @ 24Hz 16:9, clock:74MHz progressive 
           mode 34: 1920x1080 @ 30Hz 16:9, clock:74MHz progressive 

您可以看到电视支持哪些模式,要完成,您应该同时扫描 DMT 和 CEA 组以捕获所有内容。 DMT 模式更适合计算机显示器而不是电视。

然后您的程序可以从该列表中 select 并使用 tvservice -e 设置其中一种模式。