首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
基于SEP4O2O的Linux frame buffer驱动设计
来源:本站整理  作者:佚名  2009-10-23 10:22:24




3 L i nux驱动软件设计实现
3.1 驱动核心结构体的介绍
3.1.1.fb_jnfo结构体
    帧缓冲设备最关键的一个数据结构体是fb info结构体,其中包含了关于帧缓冲设备属性和操作的完整描述,定义如下:

   
    限于篇幅,只列出了部分成员,其中fb_var_screeninfo记录用户可以修改的显示控制器参数,包括屏幕分辨率和每个像素的比特数等;fb_fix_screeninfo记录用户不能修改的显示控制器参数;cmap为目前的颜色表;fb_ops为帧缓冲操作函数集;screen_base为帧缓冲的虚拟基地址;i oremapped的虚拟内存大小;pseudo_palette为伪16色的颜色表。
3.1.2.fb_ops结构体
    本结构体为指向底层操作的函数的指针,这些函数是需要驱动程序开发人员编写填充的,部分成员定义如下


    fb_check_var ()用于调整可变参数,并修整为硬件支持的值;fb_set_par()则根据屏幕参数设置具体读写LCD控制器的寄存器以使得LCD控制器进入相应的工作状态,使用户设置的屏幕参数在硬件上有效;f bsetcolreg ()成员函数实现伪颜色表和颜色表的填充。
3.1.3.fb_var_screeni nfo
    本结构体定义了用户可以修改的显示控制器参数,部分成员如下:


    本结构体中,xres为屏幕的水平像素数;yres为屏幕垂直宽度:bits_per_pixel定义每个像素由多少个位表示;pixclock定义了像素时钟;left_margin是表示行切换中从同步到绘图之间的延迟;right_margin表示行切换中从绘图到同步之间的延迟;upper_margin表示帧切换中从同步到绘图之间的延迟;lower_margin表示帧切换中从绘图到同步之间的延迟;hsyn_len表示水平同步的长度;vsync_len表示垂直同步的长度。
3.2 Linux帧缓冲设备的模块加载和卸载函数
    由于LCD控制器被集成在SOC芯片上作为一个独立的硬件模块,也就是platform_device而存在,因此本驱动中包含平台驱动。首先我们要定义platform_driver结构体:


    定义了此结构体之后,在帧缓冲设备的模块加载函数sep4020fb_init(void)中,我们只需要使用函数platform_driver_register(&sep4020fb_driver)注册平台驱动,而其余大部分的初始化工作移交到平台驱动的探测函数sep4020fb_probe中完成。
    在函数sep4020fb_probe(struct platform_device*pdev)中,首先要申请SEP4020的帧缓冲信息结构体:structsep4020fb_info*info,在此结构体中,成员sep4020fb_ma c h_i n f o记录了seP4020帧缓存的机器信息,sep4020fb_hw包含了sep4020微处理器LCD控制器所涉及到的所有寄存器的信息,screen_dma表示帧缓存的物理地址,而screen_cpu代表了帧缓存的虚拟地址。之后要为sep4020fb_mach_info申请内存空间,申请完毕之后就要初始化fb_info结构体中的固定和可变参数,即填充fb_var_screeninfo var和fb_fix_screeninfo fix成员。首先通过fb_info一>fbops=&sep4020fb_ops将为sep4020微处理器定义的函数操作结构体赋予帧缓存信息结构体中对应的成员,sep4020fb_ops定义了指向底层操作的一系列函数,本文将在后面详细介绍;由于本课题选用的液晶屏为320×240TFT彩屏,所以fb_info->var.xres赋值为320,fb_info一>var.yres赋值为240,fb_info一>var.bits_per_pixel赋值为16,这样就可以算出帧缓存的长度为320×240×16/8个字节,将此值赋给fbinfo->fix.smem_len成员。

上一页  [1] [2] [3] 

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)

推荐阅读

图文阅读

热门阅读

Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:247,355.50000 毫秒