modedb 默认视频模式支持¶
目前,所有帧缓冲设备驱动程序都有自己的视频模式数据库,这既混乱又浪费资源。modedb 的主要思想是拥有
一个用于探测视频模式的例程,可以被所有帧缓冲设备使用
一个包含大量标准视频模式的通用视频模式数据库(取自 XFree86)
为需要非标准模式的图形硬件提供您自己的模式数据库的可能性,例如 amifb 和 Mac 帧缓冲驱动程序(使用 macmodes.c)
当帧缓冲设备收到一个它不认识的 video= 选项时,它应该将其视为一个视频模式选项。如果 video= 选项中没有指定帧缓冲设备,则 fbmem 将其视为全局视频模式选项。
有效的模式说明符(mode_option 参数)
<xres>x<yres>[M][R][-<bpp>][@<refresh>][i][m][eDd]
<name>[-<bpp>][@<refresh>]
其中 <xres>、<yres>、<bpp> 和 <refresh> 是十进制数字,<name> 是一个字符串。方括号内的内容是可选的。
有效的名称是
- NSTC: 480i output, with the CCIR System-M TV mode and NTSC color encoding
- NTSC-J: 480i output, with the CCIR System-M TV mode, the NTSC color
encoding, and a black level equal to the blanking level.
- PAL: 576i output, with the CCIR System-B TV mode and PAL color encoding
- PAL-M: 480i output, with the CCIR System-M TV mode and PAL color encoding
如果在 mode_option 参数中指定了 'M' (在 <yres> 之后和 <bpp> 和 <refresh> 之前,如果指定了),则将使用 VESA(TM) 协调视频时序计算时序,而不是从表中查找模式。如果指定了 'R',则对数字显示器进行“减少消隐”计算。如果指定了 'i',则计算隔行扫描模式。如果指定了 'm',则在计算中添加边距(xres 的 1.8% 向下舍入到 8 像素,以及 yres 的 1.8%)。
用法示例:1024x768M@60m - 带边距的 CVT 时序
DRM 驱动程序还添加了用于启用或禁用输出的选项
'e' 将强制启用显示器,即它将覆盖是否连接了显示器的检测。'D' 将强制启用显示器并使用数字输出。这对于同时具有模拟和数字信号的输出(例如 HDMI 和 DVI-I)很有用。对于其他输出,它的行为类似于 'e'。如果指定了 'd',则禁用输出。
您还可以指定选项与哪个输出匹配。要强制启用 VGA 输出并驱动特定的模式,请说
video=VGA-1:1280x1024@60me
可以为不同的端口多次指定该选项,例如
video=LVDS-1:d video=HDMI-1:D
选项也可以在模式之后传递,使用逗号作为分隔符。
用法示例:720x480,rotate=180 - 720x480 模式,旋转 180 度
有效的选项是
- margin_top, margin_bottom, margin_left, margin_right (integer):
Number of pixels in the margins, typically to deal with overscan on TVs
- reflect_x (boolean): Perform an axial symmetry on the X axis
- reflect_y (boolean): Perform an axial symmetry on the Y axis
- rotate (integer): Rotate the initial framebuffer by x
degrees. Valid values are 0, 90, 180 and 270.
- tv_mode: Analog TV mode. One of "NTSC", "NTSC-443", "NTSC-J", "PAL",
"PAL-M", "PAL-N", or "SECAM".
- panel_orientation, one of "normal", "upside_down", "left_side_up", or
"right_side_up". For KMS drivers only, this sets the "panel orientation"
property on the kms connector as hint for kms users.
什么是 VESA(TM) 协调视频时序 (CVT)?¶
来自 VESA(TM) 网站
- “CVT 的目的是提供一种生成一致的方法
和协调的一组标准格式、显示刷新率以及用于计算机显示产品的时序规范,包括那些使用 CRT 的产品,以及那些使用其他显示技术的产品。CVT 的目的是为源制造商和显示器制造商提供一套通用的工具,使新时序能够以一致的方式开发,从而确保更高的兼容性。”
这是 VESA(TM) 批准的关于视频时序的第三个标准。第一个是离散视频时序 (DVT),它是 VESA(TM) 批准的预定义模式的集合。第二个是广义时序公式 (GTF),它是一种根据像素时钟、水平同步频率或垂直刷新率来计算时序的算法。
GTF 的局限性在于它主要为 CRT 显示器而设计。由于其高消隐要求,它人为地增加了像素时钟。这不适合具有高数据速率的数字显示接口,它要求尽可能地保留像素时钟。此外,GTF 不考虑显示器的宽高比。
CVT 解决了这些限制。如果与 CRT 一起使用,则使用的公式是 GTF 的派生版本,并进行了一些修改。如果与数字显示器一起使用,则可以使用“减少消隐”计算。
从帧缓冲子系统的角度来看,每当显示器制造商发布新模式时,都无需将新格式添加到全局模式数据库中。指定 CVT 将适用于大多数(如果不是全部)相对较新的 CRT 显示器,并且如果指定了“减少消隐”计算,则可能适用于大多数平板显示器。(显示器的 CVT 兼容性可以从其 EDID 确定。EDID 的 1.3 版本具有额外的 128 字节块,其中放置了额外的时序信息。到目前为止,该层尚不支持解析这些额外的块。)
CVT 还引入了一种新的命名约定(应从 dmesg 输出中看到)
<pix>M<a>[-R]
where: pix = total amount of pixels in MB (xres x yres)
M = always present
a = aspect ratio (3 - 4:3; 4 - 5:4; 9 - 15:9, 16:9; A - 16:10)
-R = reduced blanking
example: .48M3-R - 800x600 with reduced blanking
注意:VESA(TM) 对什么是标准 CVT 时序有限制
宽高比只能是上述值之一
可接受的刷新率只有 50、60、70 或 85 Hz
如果减少消隐,则刷新率必须为 60Hz
如果以上条件之一不满足,内核将打印警告,但仍将计算时序。
要查找合适的视频模式,您只需调用
int __init fb_find_mode(struct fb_var_screeninfo *var,
struct fb_info *info, const char *mode_option,
const struct fb_videomode *db, unsigned int dbsize,
const struct fb_videomode *default_mode,
unsigned int default_bpp)
其中 db/dbsize 是您的非标准视频模式数据库,或者 NULL 以使用标准视频模式数据库。
fb_find_mode()
首先尝试指定的视频模式(或任何匹配的模式,例如,可以有多个 640x480 模式,每个模式都会尝试)。如果失败,则尝试默认模式。如果失败,则遍历所有模式。
要在启动时指定视频模式,请使用以下启动选项
video=<driver>:<xres>x<yres>[-<bpp>][@refresh]
其中 <driver> 是下表中的名称。有效的默认模式可以在 drivers/video/fbdev/core/modedb.c 中找到。查看您的驱动程序文档。可能还有更多模式
Drivers that support modedb boot options
Boot Name Cards Supported
amifb - Amiga chipset frame buffer
aty128fb - ATI Rage128 / Pro frame buffer
atyfb - ATI Mach64 frame buffer
pm2fb - Permedia 2/2V frame buffer
pm3fb - Permedia 3 frame buffer
sstfb - Voodoo 1/2 (SST1) chipset frame buffer
tdfxfb - 3D Fx frame buffer
tridentfb - Trident (Cyber)blade chipset frame buffer
vt8623fb - VIA 8623 frame buffer
顺便说一句,目前只有少数 fb 驱动程序使用它。其他驱动程序将会跟进(欢迎发送补丁)。DRM 驱动程序也支持此功能。