More Related Content
Similar to Framebuffer (20)
Framebuffer
- 1. Tel:010-68492999 Fax: 010-68492337 www.zylogic.com.cn
uClinux 下如何写 framebuffer 设备驱动
下面的内容主要是关于 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 结构。这个结构是唯一
在内核空间可见的。
#1460, New Century Hotel Office Building. No.6 Southern Road Capital Gym. Beijing 100044
北京首都体育馆南路六号新世纪饭店写字楼 1460 室 邮编:100044
- 2. Tel:010-68492999 Fax: 010-68492337 www.zylogic.com.cn
设计自己的 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)函数。
如何添加 framebuffer 设备驱动
首先在 config.in 文件中添加一行代表用户自己驱动的选项。具体做法请参考
config.in 的帮助文档。
在 make menuconfig 的时候首先进入 Character devices,选中里面的 Virtual
terminal 和 Support for console on virtual terminal.
退到上一层界面我们就可以看到 Console device 的选项,进入后将光标落在
Framebuffer Support 上,按回车键进入,在里面选择自己所需要的 framebuffer
设备即可。自己所添加的设备驱动的类型(如果在 uclinux 下,应该以*选中,而不
是 M 选中),在编译的时候就会产生相应的 o 文件。
在 Advanced low level 中可以配置 bpp packed pixel support,然后选中 Select
compiled-in fonts 即可。
#1460, New Century Hotel Office Building. No.6 Southern Road Capital Gym. Beijing 100044
北京首都体育馆南路六号新世纪饭店写字楼 1460 室 邮编:100044
- 3. Tel:010-68492999 Fax: 010-68492337 www.zylogic.com.cn
等操作系统运行以后就会在/dev 下面看到 fb 这个设备。它的 major 应该是 29,
第一个设备的 minor 应该是 0。
如何使用 framebuffer 设备
我们可以在几个支持图形显示的平台上开发一些图形界面。例如 microwindows,
minigui,Qtembed,等等。在这里我们就不详细介绍具体做法,感兴趣的朋友可以
到我们网站上下载。
这里我们假设用户已经通过 tftp 或者 mount 命令将测试例子 demo 传到
/var/test 目录下。在/test 目录下启动后台服务程序./nano-X &,这时可以看到屏
幕有一个闪动,然后会变为黑色,接着就可以运行测试程序了,执行./demo 即可。
#1460, New Century Hotel Office Building. No.6 Southern Road Capital Gym. Beijing 100044
北京首都体育馆南路六号新世纪饭店写字楼 1460 室 邮编:100044