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
- framebuffer驱动开发二
- framebuffer驱动开发一
- framebuffer驱动开发三
- S3C2440上LCD驱动(FrameBuffer)实例开发讲解(二)
- S3C2440上LCD驱动(FrameBuffer)实例开发讲解(二)
- S3C2440上LCD驱动(FrameBuffer)实例开发讲解(二)
- S3C2440上LCD驱动(FrameBuffer)实例开发讲解(二)
- S3C2440上LCD驱动(FrameBuffer)开发(二)
- S3C2440上LCD驱动(FrameBuffer)实例开发讲解(二)
- S3C2440上LCD驱动(FrameBuffer)实例开发讲解(二)
- S3C2440上LCD驱动(FrameBuffer)实例开发讲解(二)
- LCD及FrameBuffer驱动(二)-------------------FrameBuffer
- framebuffer驱动全篇(二)
- framebuffer驱动全篇(二)
- linux LCD驱动(二)--FrameBuffer
- linux LCD驱动(二)--FrameBuffer
- linux LCD驱动(二)--FrameBuffer
- linux LCD 驱动 (二) --- Framebuffer
- MFC中的菜单操作
- LeetCode | Binary Tree Zigzag Level Order Traversal
- Fragment中使用ViewFlipper在严格模式下抛出android.app.IntentReceiverLeaked
- 如何做好网站优化,seo小白必看
- Hadoop 和Mongodb是否能用于存储实时视频数据
- framebuffer驱动开发二
- 寻找凸包 convex hull(二)——Graham_Scan
- IEnumerable和IEnumerator 详解
- 对花两无语,物我两相忘
- modelsim10.1a的破解
- imsi 介绍
- linux中强大的screen命令
- Eclipse 自动提示补全设置
- ios中NSUserDefaults的使用