Linux Framebuffer正确设置分辨率

use*_*412 4 linux graphics framebuffer raspbian

我有一个RaspberryPi,想在没有xserver的情况下全屏显示图像-因此直接将其写入帧缓冲区。没问题

但是将其全屏设置是行不通的。

cat /sys/class/graphics/fb0/modes
Run Code Online (Sandbox Code Playgroud)

产量:

U:1024x768p-0
U:1920x1200p-0
U:1920x1080p-0
U:608x684p-0
Run Code Online (Sandbox Code Playgroud)

所以我用

fbset -xres 1920 -yres 1200 -match
Run Code Online (Sandbox Code Playgroud)

导致

>>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
Run Code Online (Sandbox Code Playgroud)

如果我现在用于fbi显示图像,或仅填充framebuffer /dev/urandom >> /dev/fb0,则仅填充部分屏幕。显示部分的长宽比等正确,周围只有一个大的黑色边界。

如果我使用其他分辨率,一切都会按预期运行,例如fbi中的stats-line变大等。

我做错了什么?

小智 5

为fbset尝试以下格式:

fbset -fb /dev/fb0 -g 1920 1200 1920 1200 16 
Run Code Online (Sandbox Code Playgroud)

并检查您是否真正在查看fb0而不是fb1:

fbset -fb /dev/fb0
Run Code Online (Sandbox Code Playgroud)

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

cat /sys/class/graphics/fb0/mode
Run Code Online (Sandbox Code Playgroud)

还尝试使用以下命令运行fbi(同样,确保使用的是fb0):

fbi -d /dev/fb0 image.png
Run Code Online (Sandbox Code Playgroud)

您还可以通过以下操作将设置强制进入fb0:

echo U:1920x1200p-0 > /sys/class/graphics/fb0/mode
Run Code Online (Sandbox Code Playgroud)

从技术上讲,这就是fbset要做的。只要确保fb1不会搞砸。

最后,确保您的控制台正在使用fb0。我敢肯定

con2fbmap 1
Run Code Online (Sandbox Code Playgroud)

您可能还需要重新启动,因此请检查您的设置是什么:

cat /proc/cmdline
Run Code Online (Sandbox Code Playgroud)

如果不是1920x1200,请更新为1920x200。我认为它位于树莓派的/boot/cmdline.txt中。对我来说,它是/boot/uEnv.txt。