我是靠谱客的博主 纯情犀牛,这篇文章主要介绍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

 

最后

以上就是纯情犀牛最近收集整理的关于framebuffer驱动开发二的全部内容,更多相关framebuffer驱动开发二内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部