首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

uClinux下如何写framebuffer设备驱动 01

uClinux下如何写framebuffer设备驱动 01

下面的内容主要是关于framebuffer 的一些知识, 主要是根据我们实际开发过程中的一些体会,其中难免错漏之处, 欢迎指正。
什么是framebuffer 设备

framebuffer 是一种能够提取图形的硬件设备,是用户进入图形界面很好的接口。有了framebuffer,用户的应用程序不需要对底层的驱动的深入了解就能够做出很好的图形。对于用户而言,它和/dev 下面的其他设备没有什么区别,用户可以把framebuffer 看成一块内存,既可以向这块内存中写入数据,也可以从这块内存中读取数据。
第一个被注册的framebuffer 的minor 等于0,第二个被注册的framebuffer的minor 等于1,以此类推。

framebuffer 内部结构
数据结构:framebuffer 设备很大程度上依靠了下面四个数据结构。这三个结构
在fb.h 中声明。
Struct fb_var_screeninfo
Struct fb_fix_screeninfo
Struct fb_info
第一个结构是用来描述图形卡的特性的。通常是被用户设置的。
第二个结构定义了图形卡的硬件特性, 是不能改变的,用户选定了哪一个图形卡,那么它的硬件特性也就定下来了。第三个结构定义了当前图形卡framebuffer 设备的独立状态,一个图形卡可能有两个framebuffer, 在这种情况下,就需要两个fb_info 结构。这个结构是唯一在内核空间可见的。
设计自己的framebuffer 设备驱动
用户首先需要添加下面的代码到fbmem.c

static struct {
const char *name;
int (*init)(void);
int (*setup)(char*);
} fb_drivers[] __initdata = {
#ifdef CONFIG_FB_YOURCARD
{ "driver_name", xxxfb_init, xxxfb_setup },
#endif
其次在xxfb.c 中根据自己的需要重新分配显存大小。例如: #define VIDEOMEMSIZE (1*1024*1024) /* 1 MB */再次根据自己的硬件设备修改相应的var 信息。主要修改xxfb_set_var(struct fb_var_screeninfo *var, int con, struct fb_info *info)函数。
返回列表