现在位置:首页 >> 嵌入式操作系统 >> LINUX
Linux液晶屏驱动开发[2]
作者:intq 时间:2009/9/27 文章来源:来自网络

fb_fix_screeninfon 这个结构在显卡被设定模式后创建,它描述显示卡的属性,并且系统运行时不能被修改;比如FrameBuffer内存的起始地址。

  struct fb_info Linux为帧缓冲设备定义的驱动层接口。它不仅包含了底层函数,而且还有记录设备状态的数据。每个帧缓冲设备都与一个fb_info结构相对应。其中成员变量modename为设备名称,fontname为显示字体,fbops为指向底层操作的函数的指针。

  fb_cmap描述设备无关的颜色映射信息。可以通过FBIOGETCMAP 和FBIOPUTCMAP 对应的ioctl操作设定或获取颜色映射信息。然后分析fbmem.h文件。

  帧缓冲设备属于字符设备,采用“文件层-驱动层”的接口方式。在文件层为之定义了以下数据结构

  其成员函数都在Linux/driver/video/fbmem.c中定义,其中的函数对具体的硬件进行操作,对寄存器进行设置,对显示缓冲进行映射。

  对于/dev/fb,对显示设备的操作主要有以下几种:

  读/写(read/write)/dev/fb 相当于读/写屏幕缓冲区。

  映射(map)操作 由于Linux工作在保护模式和每个应用程序里都有自己的虚拟地址空间,在应用程序中是不能直接访问物理缓冲区地址的。因此,Linux在文件操作file_operations结构中提供了mmap函数,可将文件的内容映射到用户空间。对于帧缓冲设备,则可通过映射操作,可将屏幕缓冲区的物理地址映射到用户空间的一段虚拟地址中,之后用户就可以通过读写这段虚拟地址访问屏幕缓冲区,在屏幕上绘图。

  I/O控制 对于帧缓冲设备,对设备文件的ioctl操作可读取/设置显示设备及屏幕的参数,如分辨率、显示颜色数和屏幕大小等。ioctl的操作是由底层的驱动程序来完成的。

  在应用程序中,操作/dev/fb的一般步骤为首先打开/dev/fb设备文件,然后用ioctl操作取得当前显示屏幕的参数,如屏幕分辨率,每个像素点的比特数,根据屏幕参数可计算屏幕缓冲区的大小。接下来,将屏幕缓冲区映射到用户空间。最后,映射后就可以直接读写屏幕缓冲区,进行绘图和图片显示了。典型程序段如下:

  由于准备在LCD 上显示一幅256色BMP图片,关于BMP 图片方面的知识请见相关链接。


上一篇:使用虚拟机嵌入式Linux开发[返回列表]下一篇: arm2410的Linux系统移植—