帧缓冲库¶
帧缓冲驱动程序严重依赖于四个数据结构。这些结构在 include/linux/fb.h 中声明。它们是 fb_info、fb_var_screeninfo、fb_fix_screeninfo 和 fb_monospecs。最后三个可以与用户空间进行相互访问。
fb_info 定义特定视频卡的当前状态。在 fb_info 内部,存在一个 fb_ops 结构,它是使 fbdev 和 fbcon 工作所需的函数的集合。fb_info 仅对内核可见。
fb_var_screeninfo 用于描述用户定义的视频卡功能。使用 fb_var_screeninfo,可以定义深度和分辨率等内容。
下一个结构是 fb_fix_screeninfo。这定义了在设置模式时创建且不能以其他方式更改的卡的属性。一个很好的例子是帧缓冲内存的起始位置。这会“锁定”帧缓冲内存的地址,使其不能被更改或移动。
最后一个结构是 fb_monospecs。在旧的 API 中,fb_monospecs 几乎没有重要性。这允许诸如在固定频率监视器上设置 800x600 的模式等被禁止的操作。使用新的 API,fb_monospecs 可以防止此类事情,如果使用正确,可以防止监视器被“烧坏”。在内核 2.5.x 之前,fb_monospecs 不会很有用。
帧缓冲内存¶
参数
struct fb_info *fb_info
帧缓冲信息结构
注册一个帧缓冲设备 fb_info。
错误时返回负的 errno,成功时返回零。
参数
struct fb_info *fb_info
帧缓冲信息结构
注销一个帧缓冲设备 fb_info。
错误时返回负的 errno,成功时返回零。
此函数还会通知帧缓冲控制台释放该驱动程序。
这意味着在驱动程序的
module_exit()
函数中调用。如果在module_exit()
之外调用,请确保驱动程序实现 fb_open() 和 fb_release() 以检查是否有进程正在使用该设备。
参数
struct device *dev
帧缓冲所属的设备
struct fb_info *fb_info
帧缓冲信息结构
将帧缓冲设备 fb_info 注册到设备 dev。
错误时返回负的 errno,成功时返回零。
-
void fb_set_suspend(struct fb_info *info, int state)¶
底层驱动程序发出暂停信号
参数
struct fb_info *info
受影响的帧缓冲
int state
0 = 恢复,!=0 = 暂停
这旨在供底层驱动程序用于向核心和客户端发出暂停/恢复信号。必须在持有控制台信号量的情况下调用它
帧缓冲颜色映射¶
-
void fb_dealloc_cmap(struct fb_cmap *cmap)¶
释放颜色映射
参数
struct fb_cmap *cmap
帧缓冲颜色映射结构
释放先前使用 fb_alloc_cmap() 分配的颜色映射。
-
int fb_copy_cmap(const struct fb_cmap *from, struct fb_cmap *to)¶
复制颜色映射
参数
const struct fb_cmap *from
帧缓冲颜色映射结构
struct fb_cmap *to
帧缓冲颜色映射结构
将颜色映射的内容从 from 复制到 to。
-
int fb_set_cmap(struct fb_cmap *cmap, struct fb_info *info)¶
设置颜色映射
参数
struct fb_cmap *cmap
帧缓冲颜色映射结构
struct fb_info *info
帧缓冲信息结构
为设备info的屏幕设置颜色映射cmap。
错误时返回负的errno,成功时返回零。
-
const struct fb_cmap *fb_default_cmap(int len)¶
获取默认颜色映射
参数
int len
特定深度的调色板大小
获取特定屏幕深度的默认颜色映射。len是特定屏幕深度的调色板大小。
返回指向帧缓冲区颜色映射结构的指针。
-
void fb_invert_cmaps(void)¶
反转所有默认颜色映射
参数
void
无参数
描述
反转所有默认颜色映射。
帧缓冲区视频模式数据库¶
-
int fb_try_mode(struct fb_var_screeninfo *var, struct fb_info *info, const struct fb_videomode *mode, unsigned int bpp)¶
测试视频模式
参数
struct fb_var_screeninfo *var
帧缓冲区用户定义的显示部分
struct fb_info *info
帧缓冲信息结构
const struct fb_videomode *mode
帧缓冲区视频模式结构
unsigned int bpp
每个像素的颜色深度(以位为单位)
尝试一种视频模式,以测试其对设备info的有效性。
成功时返回1。
-
void fb_delete_videomode(const struct fb_videomode *mode, struct list_head *head)¶
从模式列表中移除视频模式条目
参数
const struct fb_videomode *mode
要移除的视频模式
struct list_head *head
模式列表的list_head结构
注意
将移除所有匹配的模式条目
-
int 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)¶
查找有效的视频模式
参数
struct fb_var_screeninfo *var
帧缓冲区用户定义的显示部分
struct fb_info *info
帧缓冲信息结构
const char *mode_option
要查找的字符串视频模式
const struct fb_videomode *db
视频模式数据库
unsigned int dbsize
db的大小
const struct fb_videomode *default_mode
回退到的默认视频模式
unsigned int default_bpp
默认颜色深度(以位为单位)
描述
查找合适的视频模式,首先尝试mode_option中指定的模式,如果失败则回退到default_mode。如果default_mode也失败,则会尝试视频模式数据库中的所有模式。
mode_option的有效模式说明符
<xres>x<yres>[M][R][-<bpp>][@<refresh>][i][p][m]
或者
<name>[-<bpp>][@<refresh>]
其中<xres>、<yres>、<bpp>和<refresh>是十进制数字,<name>是字符串。
如果在yres之后(以及如果存在,在刷新率/bpp之前)存在'M',该函数将使用VESA(tm)协调视频定时(CVT)计算时序。 如果'M'之后存在'R',将使用减少的消隐计算(对于平板显示器)。 如果存在'i'或'p',则计算隔行或逐行模式。 如果存在'm',则添加等于xres的1.8%(向下舍入到8像素)和yres的1.8%的边距。字符'i'、'p'和'm'必须在'M'和'R'之后。例子
1024x768MR-8@60m - Reduced blank with margins at 60Hz.
失败返回零,如果使用指定的mode_option返回1,如果使用指定的mode_option但忽略刷新率返回2,如果使用默认模式返回3,如果回退到任何有效模式返回4。
注意
传入的结构体var不会被清除!这允许你为例如灰度和accel_flags字段提供值。
-
void fb_var_to_videomode(struct fb_videomode *mode, const struct fb_var_screeninfo *var)¶
将fb_var_screeninfo转换为fb_videomode
参数
struct fb_videomode *mode
指向fb_videomode结构的指针
const struct fb_var_screeninfo *var
指向fb_var_screeninfo结构的指针
-
void fb_videomode_to_var(struct fb_var_screeninfo *var, const struct fb_videomode *mode)¶
将fb_videomode转换为fb_var_screeninfo
参数
struct fb_var_screeninfo *var
指向fb_var_screeninfo结构的指针
const struct fb_videomode *mode
指向fb_videomode结构的指针
-
int fb_mode_is_equal(const struct fb_videomode *mode1, const struct fb_videomode *mode2)¶
比较两个视频模式
参数
const struct fb_videomode *mode1
第一个视频模式
const struct fb_videomode *mode2
第二个视频模式
返回
如果相等,则为1,否则为0
-
const struct fb_videomode *fb_find_best_mode(const struct fb_var_screeninfo *var, struct list_head *head)¶
查找最佳匹配的视频模式
参数
const struct fb_var_screeninfo *var
指向fb_var_screeninfo结构的指针
struct list_head *head
指向模式列表的list_head结构的指针
返回
struct fb_videomode,如果未找到则为NULL
描述
重要提示:此函数假设info->modelist中的所有模式列表条目都有效。
注意
查找具有等于或大于var->xres和var->yres的尺寸的最佳匹配视频模式。 如果找到多个视频模式,则将返回具有最高刷新率的视频模式
-
const struct fb_videomode *fb_find_nearest_mode(const struct fb_videomode *mode, struct list_head *head)¶
查找最接近的视频模式
参数
const struct fb_videomode *mode
指向fb_videomode结构的指针
struct list_head *head
指向模式列表的指针
描述
查找最匹配的视频模式,尺寸可以更大或更小。如果找到多个视频模式,将返回刷新率最接近的视频模式。
-
const struct fb_videomode *fb_match_mode(const struct fb_var_screeninfo *var, struct list_head *head)¶
查找一个与 var 中时间设置完全匹配的视频模式
参数
const struct fb_var_screeninfo *var
指向fb_var_screeninfo结构的指针
struct list_head *head
指向模式列表的list_head结构的指针
返回
struct fb_videomode,如果未找到则为NULL
-
int fb_add_videomode(const struct fb_videomode *mode, struct list_head *head)¶
将视频模式条目添加到模式列表
参数
const struct fb_videomode *mode
要添加的视频模式
struct list_head *head
模式列表的list_head结构
注意
只会添加不匹配的模式条目
-
void fb_destroy_modelist(struct list_head *head)¶
销毁模式列表
参数
struct list_head *head
模式列表的list_head结构
-
void fb_videomode_to_modelist(const struct fb_videomode *modedb, int num, struct list_head *head)¶
将模式数组转换为模式列表
参数
const struct fb_videomode *modedb
fb_videomode 结构体的数组
int num
数组中的条目数
struct list_head *head
模式列表的list_head结构
帧缓冲 Macintosh 视频模式数据库¶
-
int mac_vmode_to_var(int vmode, int cmode, struct fb_var_screeninfo *var)¶
将 vmode/cmode 对转换为 var 结构
参数
int vmode
MacOS 视频模式
int cmode
MacOS 颜色模式
struct fb_var_screeninfo *var
帧缓冲区视频模式结构
将 MacOS vmode/cmode 对转换为帧缓冲视频模式结构。
错误时返回负的 errno,成功时返回零。
-
int mac_map_monitor_sense(int sense)¶
将显示器感知转换为 vmode
参数
int sense
Macintosh 显示器感知编号
将 Macintosh 显示器感知编号转换为 MacOS vmode 编号。
返回 MacOS vmode 视频模式编号。
-
int mac_find_mode(struct fb_var_screeninfo *var, struct fb_info *info, const char *mode_option, unsigned int default_bpp)¶
查找视频模式
参数
struct fb_var_screeninfo *var
帧缓冲区用户定义的显示部分
struct fb_info *info
帧缓冲信息结构
const char *mode_option
视频模式名称(请参见 mac_modedb[])
unsigned int default_bpp
默认颜色深度(以位为单位)
查找合适的视频模式。尝试设置由 mode_option 指定的模式。如果所需模式的名称以 ‘mac’ 开头,则将使用 Mac 视频模式数据库,否则将回退到标准视频模式数据库。
注意
- 标记为 __init 的函数只能在以下期间使用
系统启动。
返回来自 fb_find_mode 的错误代码(请参见 fb_find_mode 函数)。
帧缓冲字体¶
有关更多信息,请参阅文件 lib/fonts/fonts.c。