概述
分析一下frambuffer驱动的软件部分
整个LCD驱动框架在linux内核源码的fbmem.c里,采用内核的分层思想,这里我们跳过对fbmem.c的分析直接到LCD驱动的编写分析
整个LCD驱动的核心是fb_info结构体
分析fbmem.c可知如果用户没有指定驱动的read,write,ioctl,mmap等接口fbmem.c会自动帮你实现,所以我们可以直接使用缺省的这些接口(没有特殊需要的话),但是我们要在内核中实现三个必须的接口 .fb_fillrect,.fb_cppyarea,.fb_imageblit
1.分配fb_info
2.初始化fb_info
显存的起始地址
显存的大小
LCD屏幕的可变信息和固定信息
3.调用register_framebuffer注册,注册的过程其实就是将fb_info放在一个数组中
以后应用程序,以次设备为索引从数组中取出对应的fb_info,然后在进行操作,
就是操作内存
4.初始化硬件相关的信息
硬件的相关初始化,首先要了解硬件相关的信号和时序操作,
由于mini2440内部自带LCD控制器,所有的信号的时序都是
由LCD控制器来发起,对这些信号的初始化,只需要操作对应的
寄存器即可,所以初始化的工作重心围绕着LCD控制器和LCD模组来进行。
为了方便编写我们这里不使用平台总线的编程方法
以下是根据硬件特性定义的宏:
#define MHZ (1000*1000)
#define PRINT_MHZ(m) ((m) / MHZ), ((m / 1000) % 1000)
#define VSPW 9
#define VBPD 13
#define LINEVAL 479
#define VFPD 21
#define HSPW 19
#define HBPD 25
#define HOZVAL 799
#define HFPD 209
#define LeftTopX 0
#define LeftTopY 0
#define RightBotX 799
#define RightBotY 479
定义LCD驱动需要使用的寄存器,然后根据芯片手册进行相应的设置就可以了,把各个gpio配置成输出口,打开LCD时钟clk_get(NULL, "lcd");等等
最后记得开启LCD,然后通过register_framebuffer注册fb_info
最后
以上就是纯情犀牛为你收集整理的framebuffer驱动开发二的全部内容,希望文章能够帮你解决framebuffer驱动开发二所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复