uClinux 的framebuffer简介/如何配置framebuffer - 范文中心

uClinux 的framebuffer简介/如何配置framebuffer

04/24

面的内容主要是关于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)函数。

如何添加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 即可。等操作系统运行以后就会在/dev 下面看到fb 这个设备。它的major 应该是29,第一个设备的minor 应该是0。

如何使用framebuffer 设备

我们可以在几个支持图形显示的平台上开发一些图形界面。例如microwindows,minigui,Qtembed,等等。在这里我们就不详细介绍具体做法,感兴趣的朋友可以到我们网站上下载。这里我们假设用户已经通过tftp 或者mount 命令将测试例子demo 传到/var/test 目录下。在/test 目录下启动后台服务程序./nano-X &,这时可以看到屏幕有一个闪动,然后会变为黑色,接着就可以运行测试程序了,执行./demo 即可.

===========================================================================

Framebuffer是在Linux内核架构版本2.2以后推出的标准显示设备驱动接口。采用mmap系统调用,可以将framebuffer的显示缓存映射为可连续访问的一段内存储针。由于目前比较高级的ARM体系的嵌入式CPU中大多集成了LCD控制模块,LCD控制模块一般采用双DMA控制器组成的专用DMA通道。其中一个DMA可以自动从一个数据结构队列中取出并装入新的参数,直到整个队列中的DMA操作都已完成为止。另外一个DMA与画面缓冲区相关,这部分由两个DMA控制器交替执行,并每次都自动按照预定的规则改变参数。虽然使用了双DMA,但这两个DMA控制器的交替使用对于CPU来说是不可见的。CPU所获得的只是由两个DMA组成的一个“通道”而已。

Framebuffer驱动程序的实现分为两个方面:一方面是对LCD及其相关部分的初始化,包括画在缓冲区的创建和对DMA通道的设置;另外一方面是对画面缓冲区的读写,具体到代码为read、write、 lseek等系统调用接口。至于将画面缓冲区的内容输出到LCD显示屏上,则由硬件自动完成。对于软件来说是透明的。当对于DMA通道和画面缓冲区设置完成后,DMA开始正常工作,并将缓冲区中的内容不断发送到LCD上。这个过程是基于DMA对于LCD的不断刷新的。基于该特性,framebuffer驱动程序必须将画面缓冲区的存储空间(物理空间)重新映射到一个不加高缓存和写缓存的虚拟地址区间中,这样能才保证应用程序通过mmap将该缓存映射到用户空间后,对于该画面缓存的写操作能够实时的体现在LCD上。


相关内容

  • 嵌入式技术推动工控网络化发展及应用
    嵌入式技术推动工控网络化发展及应用 王海宽1, 2 费敏锐1, 2 黄丹青1, 2 (1. 上海市电站自动化技术重点实验室,上海 200072:2. 上海大学机电工程与自动化学院, 上海 200072) 摘要:嵌入式技术在芯片集成.系统开发 ...
  • 常见的嵌入式操作系统
    常见的嵌入式操作系统 分类: 嵌入式 操作系统2012-12-11 10:06 459人阅读 评论(1) 收藏 举报 嵌入式操作系统 嵌入式操作系统与通用的操作相比较主要特点在于: 1.小内核,稳定可靠. 2.需要可装卸.可裁剪,以便能灵活 ...
  • 阿尔卡特-朗讯基站维护指导书
    阿尔卡特-朗讯基站维护指导书 第一部分 阿尔卡特朗讯基站简介 一.Modcell1.0基站 1.Modcell1.0基站外观 3 1 2 5 6 7 4 10 8 9 12 和 2.Modcell1.0板件图解 (1)FIT :提供120欧 ...
  • 配置管理计划
    测试中心配置管理保证计划 2015年8月 修订纪录 目录 第一章 1.1 1.2 1.3 1.4 第二章 第三章 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 第四章 第五章 简介 .................... ...
  • KDV8000B多点控制单元用户手册(R3)
    KDV8000B多点控制单元 用户手册 产品版本:V4.0-R3版本 声明 苏州科达科技有限公司 版权所有,保留一切权利 未经本公司明确书面许可,不得以任何形式或通过任何电子或机械方式,复制或传播本文档的任何部分用于任何用途.在法律上,复制 ...
  • 智能无纸化会议系统
    无纸化桌面会商系统 产 品 介 绍 马先生:[1**********] 目 录 (一) 1. 2. 3. 升降式无纸化多媒体会议终端系统简介 ................................................. ...
  • 38-域名解析操作
    目 录 第1章 域名解析配置.......................................................................................................... ...
  • CH-iVMS-4200部署方案
    杭州海康威视数字技术股份有限公司 http://www.hikvision.com 技术热线:400-700-5998 iVMS-4200 部署方案 V1.02 非常感谢您购买我公司的产品,如果您有什么疑问或需要请随时联系我们. 本手册适用 ...
  • 空气源热泵方案
    业务联系人:韩京伟 [1**********] 中央空调工程 [空气源热泵设计方案书] 山东世纪昌龙新能源有限公司 Shandong Shiji Changlong New Energy Co.,Ltd., 2015-4-14 目 录 01 ...
  • 滚动接触疲劳试验机技术简介
    GPM-30微机控制滚动接触疲劳试验台 1.产品外观及主要用途 济南益华技术简介 本试验台用于模拟轴承.轮箍.轧辊等滚动接触零件工况的失效试验,将一恒定的载 荷施加于滚动或滚动加滑动接触的试样,使其接触表面受到循环接触应力的作用.通过控 制 ...