ack*_*er9 9 linux framebuffer console hdmi
我有一个新买的便宜的 8 英寸 TFT LCD 显示器,它的所有侧面都“切掉了边缘”(即不显示所有像素)。我了解到这是由于“过扫描”造成的,这似乎主要影响使用 HDMI 输入的电视。
我的内核首先启动到 efifb,然后切换到 inteldrmfb——两个帧缓冲区驱动程序都出现了这个问题。我不使用 X windows,也永远不想在这个小显示器上使用 X。我只想使用 Linux 文本控制台。所以任何使用“xrandr”的解决方案都已经过时了。
我已经尝试了有关驱动程序级(内核级)帧缓冲区设置的所有方法来解决此问题,包括使用“视频”内核启动参数调整分辨率设置以及使用 fbset 调整启动后的计时设置,但是无论我对 fbset 做什么,它似乎都会被忽略。
所以我的问题是:有没有一种方法,也许比帧缓冲区驱动程序级别更高,我可以在帧缓冲区控制台周围添加边距?
我知道我可以使用“stty”来缩短 Linux 将在控制台上使用的列数和行数,但这只能解决右侧和底部的问题,并且仍然会在左侧留下字符被切断,顶部。有没有办法使用“stty”向控制台添加“第一列”和“第一行”偏移量(即一些空白填充)?如果不使用 stty,使用其他一些轻量级工具(不是 X windows)?
您可以fbset尝试一下该命令。
运行fbset -i将向您显示有关当前帧缓冲区设置的一些信息,包括“计时”行。对我来说,所有值都是 0-s,这可能意味着它们没有被使用,但是如果您看到那里的一些实际值,您可以尝试调整它们。
摘录自man fbset:
Display timings:\n\n -pixclock <value>\n set the length of one pixel (in picosec\xe2\x80\x90\n onds). Note that the frame buffer device\n may only support some pixel lengths\n\n -left <value>\n set left margin (in pixels)\n\n -right <value>\n set right margin (in pixels)\n\n -upper <value>\n set upper margin (in pixel lines)\n\n -lower <value>\n set lower margin (in pixel lines)\n\n -hslen <value>\n set horizontal sync length (in pixels)\n\n -vslen <value>\n set vertical sync length (in pixel lines)\n\n --timings, -t ...\n set all timing parameters at once in the\n order <pixclock> <left> <right> <upper>\n <lower> <hslen> <vslen>, e.g. -t 35242 64\n 96 35 12 112 2\nRun Code Online (Sandbox Code Playgroud)\n\n请注意-left, -right, -upper,-lower参数。fbset甚至有一个-move命令可以增加这些值之一并同时减少相反的值:
Display positioning:\n\n -move {left|right|up|down}\n move the visible part of the display in the\n specified direction\n\n -step <value>\n set step size for display positioning (in\n pixels or pixel lines), if -step is not\n given display will be moved 8 pixels hori\xe2\x80\x90\n zontally or 2 pixel lines vertically\nRun Code Online (Sandbox Code Playgroud)\n