有关于directFB和freebuffer的学习
2016-04-07 13:52
330 查看
参考网址:网址1,网址2,网址3,网址4
DirectFB 项目是由德国 Convergence 公司推动的 Open source 计划的一部分,它是专门为满足嵌入式设备要求而开发的小巧、强大、灵活和易于使用的图形系统,并且试图成为一个建构于 Linux Framebuffer Device 之上的新图形标准。它在 FrameBuffer 的基础上提供了图形加速、输入设备处理提取、透明窗口和多重显示层的功能,能够对嵌入式系统
GUI 有较好的支持。与那些通用的嵌入式 GUI 系统相比,它具有非常简洁、高效的体系结构和硬件图形加速功能。DirectFB依靠内核中的Framebuffer设备驱动(/dev/fb)所提供的现有接口来访问图形硬件。这就意味着DirectFB必须要有一个能够正常工作的Framebuffer设备驱动才能正常运行。有些芯片组需要在Linux内核中有特定的Framebuffer驱动。
directFB向上提供了什么接口:
概述:directFB最主要的是设置环境变量,其所有功能块都是通过.so文件,在上层应用(如Qt等)执行的时候,动态加载的。
1.
2.
3.
directFB向下层的frameBuffer的交互:
概述:主要是通过gfxdriver模块和下层的frameBuffer交互。交互时通过共享内存实现的,那么共享地址是怎么传递的呢?
1.调用dfb_fbdev_open()打开framebuffer设备(如:“/dev/fb0”);
2.调用ioctl( dfb_fbdev->fd, FBIOGET_FSCREENINFO, &shared->fix)获取显卡内存和类型等固定信息;
3. 把framebuffer设备文件映射进虚拟内存,并保存内存基址;
4.调用dfb_surface_pool_initialize初始化平面内存池。
5.通过ioctl获取屏幕可变信息和调色板等信息。
frameBuffer运行的时候,可以看到/dev/fb0,fb1...。
frameBuffer(帧缓冲)概述:
帧缓冲(framebuffer)是Linux为显示设备提供的一个接口,把显存抽象后的一种设备,他允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。framebuffer是LCD对应的一中HAL(硬件抽象层),提供抽象的,统一的接口操作,用户不必关心硬件层是怎么实施的。这些都是由Framebuffer设备驱动来完成的。
帧缓冲设备对应的设备文件为/dev/fb*,如果系统有多个显示卡,Linux下还可支持多个帧缓冲设备,最多可达32个,分别为/dev/fb0到 /dev/fb31,而/dev/fb则为当前缺省的帧缓冲设备,通常指向/dev/fb0,在嵌入式系统中支持一个显示设备就够了。帧缓冲设备为标准字符设备,主设备号为29,次设备号则从0到31。分别对应/dev/fb0-/dev/fb31。
通过/dev/fb,应用程序的操作主要有这几种:
1. 读/写(read/write)/dev/fb:相当于读/写屏幕缓冲区。
2. 映射(map)操作:由于Linux工作在保护模式,每个应用程序都有自己的虚拟地址空间,在应用程序中是不能直接访问物理缓冲区地址的。而帧缓冲设备可以通过mmap()映射操作将屏幕缓冲区的物理地址映射到用户空间的一段虚拟地址上,然后用户就可以通过读写这段虚拟地址访问屏幕缓冲区,在屏幕上绘图了。
3. I/O控制:对于帧缓冲设备,对设备文件的ioctl操作可读取/设置显示设备及屏幕的参数,如分辨率,屏幕大小等相关参数。ioctl的操作是由底层的驱动程序来完成的。
对frameBuffer的操作如下:
//打开显示设备
fbfd = open("/dev/fb0", O_RDWR);
//获取屏幕信息,屏幕信息保存在finfo里面
if (ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo))
{
printf("Error:reading fixed information.\n");
exit(2);
}
相关概念之平面池( Surface
Pool):
待添加。
DirectFB 项目是由德国 Convergence 公司推动的 Open source 计划的一部分,它是专门为满足嵌入式设备要求而开发的小巧、强大、灵活和易于使用的图形系统,并且试图成为一个建构于 Linux Framebuffer Device 之上的新图形标准。它在 FrameBuffer 的基础上提供了图形加速、输入设备处理提取、透明窗口和多重显示层的功能,能够对嵌入式系统
GUI 有较好的支持。与那些通用的嵌入式 GUI 系统相比,它具有非常简洁、高效的体系结构和硬件图形加速功能。DirectFB依靠内核中的Framebuffer设备驱动(/dev/fb)所提供的现有接口来访问图形硬件。这就意味着DirectFB必须要有一个能够正常工作的Framebuffer设备驱动才能正常运行。有些芯片组需要在Linux内核中有特定的Framebuffer驱动。
directFB向上提供了什么接口:
概述:directFB最主要的是设置环境变量,其所有功能块都是通过.so文件,在上层应用(如Qt等)执行的时候,动态加载的。
1.
2.
3.
directFB向下层的frameBuffer的交互:
概述:主要是通过gfxdriver模块和下层的frameBuffer交互。交互时通过共享内存实现的,那么共享地址是怎么传递的呢?
1.调用dfb_fbdev_open()打开framebuffer设备(如:“/dev/fb0”);
2.调用ioctl( dfb_fbdev->fd, FBIOGET_FSCREENINFO, &shared->fix)获取显卡内存和类型等固定信息;
3. 把framebuffer设备文件映射进虚拟内存,并保存内存基址;
4.调用dfb_surface_pool_initialize初始化平面内存池。
5.通过ioctl获取屏幕可变信息和调色板等信息。
frameBuffer运行的时候,可以看到/dev/fb0,fb1...。
frameBuffer(帧缓冲)概述:
帧缓冲(framebuffer)是Linux为显示设备提供的一个接口,把显存抽象后的一种设备,他允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。framebuffer是LCD对应的一中HAL(硬件抽象层),提供抽象的,统一的接口操作,用户不必关心硬件层是怎么实施的。这些都是由Framebuffer设备驱动来完成的。
帧缓冲设备对应的设备文件为/dev/fb*,如果系统有多个显示卡,Linux下还可支持多个帧缓冲设备,最多可达32个,分别为/dev/fb0到 /dev/fb31,而/dev/fb则为当前缺省的帧缓冲设备,通常指向/dev/fb0,在嵌入式系统中支持一个显示设备就够了。帧缓冲设备为标准字符设备,主设备号为29,次设备号则从0到31。分别对应/dev/fb0-/dev/fb31。
通过/dev/fb,应用程序的操作主要有这几种:
1. 读/写(read/write)/dev/fb:相当于读/写屏幕缓冲区。
2. 映射(map)操作:由于Linux工作在保护模式,每个应用程序都有自己的虚拟地址空间,在应用程序中是不能直接访问物理缓冲区地址的。而帧缓冲设备可以通过mmap()映射操作将屏幕缓冲区的物理地址映射到用户空间的一段虚拟地址上,然后用户就可以通过读写这段虚拟地址访问屏幕缓冲区,在屏幕上绘图了。
3. I/O控制:对于帧缓冲设备,对设备文件的ioctl操作可读取/设置显示设备及屏幕的参数,如分辨率,屏幕大小等相关参数。ioctl的操作是由底层的驱动程序来完成的。
对frameBuffer的操作如下:
//打开显示设备
fbfd = open("/dev/fb0", O_RDWR);
//获取屏幕信息,屏幕信息保存在finfo里面
if (ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo))
{
printf("Error:reading fixed information.\n");
exit(2);
}
相关概念之平面池( Surface
Pool):
待添加。
相关文章推荐
- 针对IE浏览器单独写CSS样式的几种方法
- 探究CSS box-shadow属性
- JSON 数据格式详解
- AngularJs 弹出模态框(model)
- jQuery css3鼠标悬停图片显示遮罩层动画特效
- web前端调试工具及方法
- 详解AngularJS 模态对话框
- HTML5第一讲
- javascript console打印技
- [LintCode] paint fence
- JSON 数据格式
- html5的感想
- jQuery在IE11下提交form时遇到的问题
- 浅谈CSS3 Filter的10种特效
- json 解析 数组中的对象
- 【笔记】 《js权威指南》- 第15章 脚本化文档 - 15.3 - 15.4
- inode及硬链接和软链接
- JS获取当前周、上一周、下一周日期
- Run JS in Address Bar
- 网路:JSON 解析(天气预报)