我是靠谱客的博主 纯情犀牛,最近开发中收集的这篇文章主要介绍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驱动开发二所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部