新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 高清嵌入式系统中的DVI驱动开发

高清嵌入式系统中的DVI驱动开发

作者:时间:2012-05-08来源:网络收藏

3 Linux的帧缓冲设备
3.1 framebuffer机制
framebuffer(帧缓冲)是出现在Linux2.2.xx之后版本内核的一种程序接口,在Linux体系中它居于上层应用程序和底层显示设备之间。framebuffer屏蔽了不同显示设备间的差异,将显示设备抽象为帧缓冲区,它是一种供用户态实现直接写屏的抽象设备。framebuffer可
以看成是显存的一个映像,用户通过内存映射将其映射到进程的地址空间后,通过对显示缓冲区的读写操作可直接控制LCD的屏幕输出。
frameBuffer设备主要基于linux/include/linux/fb.h和linux/drivers/video/fbmem.c这两个文件。fb.h中包含了与帧缓冲设备相关的重要的数据结构。fbmem.c是framebuffer机制的核心程序,它为上层应用程序提供了通用接口,同时也为下层特定硬件提供了接口。其内的函数可对具体硬件进行操作,比如对寄存器进行设置,对显示缓冲进行映射等。
3.2 几个重要的数据结构
(1)struct fb_info
这个结构是Linux为帧缓冲区设备定义的层接口,它包含了关于帧缓冲设备属性和操作的完整描述,部分成员定义如下:
b.jpg
其中,var记录用户可以修改的显示控制器参数,包括屏幕分辨率和每个像素的位宽等;fix记录用户不能修改的显示控制器参数;cmap为当前的颜色表;fbops指向对底层硬件操作的函数集;dev表示帧缓冲设备;screen_base为I/O映射的虚拟基地址。
(2)struct fb_ops
该结构提供了指向底层操作的函数指针,其成员函数最终与LCD控制器硬件打交道,这些函数需要驱动者根据LCD控制器的硬件设置及LCD显示屏的硬件参数进行设计。该结构部分成员定义如下:
c.jpg
其中,fb_check_var用于检查可变的屏幕参数,并调整其为硬件支持的值;fb_set_par根据屏幕参数设置具体读写LCD控制器的寄存器以使其进入相应的工作状态,fb_setcolreg设置color寄存器来实现伪颜色表和颜色表的填充。
(3)struct fb_var_screeninfo
这是fb_info的成员结构体。它记录了帧缓冲设备和指定显示模式的可修改信息,包括屏幕分辨率、每个像素的位宽、帧延时、行延时等。
(4)struct fb_fix_screeninfo
这是fb_info的成员结构体,它描述显示卡的属性,并且在运行时不能被修改,例如缓冲区的首地址、长度等。当一种模式被设定后,内存信息由显示卡硬件给出,内存的位置等信息就不可修改。
MX51将LCD控制器直接嵌入到处理器芯片内部,这为关于显示功能的扩展提供了直接接口。LCD控制器驱动是设备驱动的核心,它是一个标准的framebuffer设备驱动。设计驱动程序,首要的是配置LCD控制器,设置帧缓冲区,这在很大程度上要依赖于上述的数据结构,驱动设计需填写相关结构体并完成指定的接口函数。
linux操作系统文章专题:linux操作系统详解(linux不再难懂)


评论


相关推荐

技术专区

关闭