framebuffer驱动开发二

来源:互联网 发布:语音软件 编辑:程序博客网 时间:2024/06/02 00:35

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

 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 吃自助餐吃撑了怎么办 包饺子多的馅怎么办 车的变速箱坏了怎么办 割眼袋后有疤痕怎么办 摔到腰了很痛怎么办 坐久了腰椎疼怎么办 5个月的婴儿咳嗽怎么办 5个月宝宝湿疹怎么办 5个月宝宝干咳怎么办 6个月的宝宝咳嗽怎么办 4个月睡眠倒退期怎么办 科三五次没通过怎么办 打架时被抱住了怎么办 炸猫耳朵不脆怎么办 五个月宝宝脖子有点歪怎么办 婆婆不给带孩子怎么办 脚冻了怎么办 小妙招 pdf转word后乱码怎么办 李氏根源用多了怎么办 pdf在wps中打开怎么办 小孩刚上幼儿园哭闹怎么办 一到冬天皮肤痒怎么办 87岁老人身上痒怎么办 天刀技能拖不动怎么办 晚上不吃饭饿了怎么办 虚火引起的牙疼怎么办 吃上火了牙疼怎么办 慢性胃炎引起的口臭怎么办 烂牙引起的口臭怎么办 坏牙引起的口臭怎么办 牙齿拔了有口臭怎么办 胃疼连着后背疼怎么办 肚脐眼又红又痒怎么办 三岁宝宝有口臭怎么办 脚扭了按压疼痛怎么办 喝完酒头晕5天了怎么办 三岁宝宝口气重怎么办 肠镜检查出息肉怎么办 怀孕了口气很重怎么办 脚被重物压肿了怎么办 摔倒膝盖肿了应该怎么办