framebuffer驱动开发二

分析一下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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值