没有合适的资源?快使用搜索试试~ 我知道了~
Linux Framebuffer 技术详解
需积分: 10 27 下载量 42 浏览量
2011-10-14
15:11:50
上传
评论
收藏 66KB DOCX 举报
温馨提示
试读
17页
结合实际的代码例子,讲解了linux系统下的framebuffer技术。这对深入理解linux图像显示原理以及android图像获取,有很大的帮助
资源推荐
资源详情
资源评论
Linux Framebuer 技术
一、 的原理
是出现在 内核当中的一种驱动程序接口。
是工作在保护模式下,所以用户态进程是无法象 那样使用显卡 里提供的
中断调用来实现直接写屏, 抽象出 这个设备来供用户态进程实现直接写
屏。 机制模仿显卡的功能,将显卡硬件结构抽象掉,可以通过 的
读写直接对显存进行操作。用户可以将 看成是显示内存的一个映像,将其映射
到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上。这种
操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细节。这些都
是由 设备驱动来完成的。
但 本身不具备任何运算数据的能力就只好比是一个暂时存放水的水池
将运算后的结果放到这个水池水池再将结果流到显示器中间不会对数据做处理应用程序
也可以直接读写这个水池的内容在这种机制下,尽管 需要真正的显卡驱动的
支持,但所有显示任务都有 完成因此 负担很重
的设备文件一般是 、等等。
可以用命令 !"#$$"清空屏幕
如 果 显 示 模 式 是 %&'()( 位 色 , 用 命 令 : *"#$$"+"%
,$-"&'(清空屏幕;
用命令 !"$"./可以将 中的内容保存下来;
可以重新写回屏幕 !"./$";
在使用 时, 是将显卡置于图形模式下的.
在应用程序中,一般通过将 设备映射到进程地址空间的方式使用,比如下面
的程序就打开 设备,并通过 0系统调用进行地址映射,随后用 +-将屏
幕清空(这里假设显示模式是 %&'()(位色模式,线性内存模式):
-1
+2,3451
"$06775898:1
5"06;%4&'(8<58=>?8<598<=@>5A>8=:1
+-65%4&'(:1这个命令应该只有在 $$- 可以执行
设备还提供了若干 $,-/命令,通过这些命令,可以获得显示设备的一些固定
信息(比如显示内存大小)、与显示模式相关的可变信息(比如分辨率、象素结构、每扫
描线的字节宽度),以及伪彩色模式下的调色板信息等等。
通过 设备,还可以获得当前内核所支持的加速显示卡的类型(通过固定信息
得到),这种类型通常是和特定显示芯片相关的。比如目前最新的内核(%B)中,就包
含有对 C、@-$、D、C等等流行显示芯片的加速支持。在获得了加速芯片类型
之后,应用程序就可以将 设备的内存 ($)映射到进程的地址空间。这些
$一般是用来控制显示卡的寄存器,通过对这些寄存器的操作,应用程序就可以控制
特定显卡的加速功能。
设备可以将自己的控制寄存器映射到物理内存空间,而后,对这些控制寄存器的访问,
给变成了对物理内存的访问。因此,这些寄存器又被称为7$7。一旦被映射到物理内
存,的普通进程就可以通过 0将这些内存 映射到进程地址空间,这样就可以
直接访问这些寄存器了。
当然,因为不同的显示芯片具有不同的加速能力,对 $的使用和定义也各自不同,
这时,就需要针对加速芯片的不同类型来编写实现不同的加速功能。比如大多数芯片都提
供了对矩形填充的硬件加速支持,但不同的芯片实现方式不同,这时,就需要针对不同的
芯片类型编写不同的用来完成填充矩形的函数。
只是一个提供显示内存和显示芯片寄存器从物理内存映射到进程地址空间中
的设备。所以,对于应用程序而言,如果希望在 之上进行图形编程,还需要
自己动手完成其他许多工作。
二、 在 中的实现和机制
对应的源文件在 /+$目录下。总的抽象设备文件为 ,$,,在
这个目录下还有与各种显卡驱动相关的源文件。 这个文件要好好看看
6一:、分析 设备驱动
需要特别提出的是在 ;<= 平台上,老式的 D=>卡,如 E>=E> 卡,是不能支持
的,因为 要求显卡支持线性帧缓冲,即 可以访问显缓冲中的
每一位,但是 D=>卡只能允许 一次访问 '%F 的地址空间。
设备驱动基于如下两个文件:
:/,//3
:/+$,
下面分析这两个文件。
、3
几乎主要的结构都是在这个中文件定义的。这些结构包括:
)55+,$
这个结构描述了显示卡的特性:
;<= 55C是表示 +2不带符号的 C-+的数据类型,其余类推。这是 内
核中所用到的数据类型,如果是开发用户空间(+)+0,)的程序,可以根据具体计算机
平台的情况,用 +2/$2等等来代替
+-,-55+,$
G
55C+14+/+$/H$4可视区域
55CI+1
55C+5-/14-/+$/H$4可视区域
55CI+5-/1
55C$+-14$+-$-/-$+/+$/H$4可视区域的偏移
55CI$+-1
55C-+5050/142++J3-4每一象素的 - 数
55C2I+,/14K"EI//++-$,$/$+4等于零就成黑白
+-,-5L/14L/-,$/$4真彩的 - 机构
+-,-5L/214/+$/I/2-3++2.,-4
+-,-5L//1
+-,-5L/-+014-+0,I4透明
55C$+-14K";$+-0/$-4不是标准格式
55C,H-14+5><D><=544
55C323-14323-$0,-4内存中的图像高度
55CJ-314J-3$0,-4内存中的图像宽度
55C,,/5M2+14,,/H$M2+63-+:4加速标志
4<2 >///+0,/$,N+,0-0,/$,N6$,$+:4
时序)5)这些部分就是显示器的显示方法了,可以找相关的资料看看
55C0,/$,N140/,/$,N0+60,$+,$+:4
55C/O5214H$+I,-$0,-4
55C23-5214H$0,--$+I,4
55C005214H$+I,-$0,-4
55C/$J521
55C3+I,5/14/2-3$3$#$-/+I,4水平可视区域
55C+I,5/14/2-3$H,/+I,4垂直可视区域
55C+I,14+5P;544
55C$14+5D@=544
55C+Q'R148+$-,$0H/-I4备用-以后开发
S1
:5.5+,$
这个结构在显卡被设定模式后创建,它描述显示卡的属性,并且系统运行时不能被修改;
比如 内存的起始地址。它依赖于被设定的模式,当一个模式被设定后,内存信
息由显示卡硬件给出,内存的位置等信息就不可以修改。
+-,-5.5+,$G
,3Q'R14H.,H$+-227<</H74
+2/$2+5+--14--$4内存起始
4603I+,/++:4物理地址
55C+5/142-3$4内存大小
55C-I014+5<P=544
55C-I0514-/$-//+4插入区域?
55C+/14+5D>544
55'0+-014#$$3J024没有硬件设备就为零
55'I0+-014#$$3J024
55'IJ0+-014#$$3JIJ04
55C/5/2-314/2-3$/I-+4一行的字节表示
+2/$2$5+--14--$@$I@004内存映射的 起始
4603I+,/++:4
55C$5/142-3$@$I@004 的大小
55C,,/14<I0$,,/H$//4可用的加速类型
55'+QCR148+$-,$0H/-I4
S1
C:5,0
描述设备无关的颜色映射信息。可以通过 E=<@>和 <@>对应的 $,-/ 操作
设定或获取颜色映射信息
+-,-5,0G
55C+--14+--I4第一个入口
55C/14;$-+4入口的数字
55'4148/+4红
55'421
55'4/1
55'4-+014-+0,I,;4透明,可以为零
S1
%:5$
定义当显卡的当前状态;5$ 结构仅在内核中可见,在这个结构中有一个 5$0+ 指针,
指向驱动设备工作所需的函数集。
+-,-5$G
,3$Q%R14/-$$4默认的视频卡类型
N5-$1
-M2+1
-$014A+-3+$0/IT4被打开过么?
!.;5>E5@=4$J)//+$/4
+-,-55+,$14-4现在的视频信息
+-,-5.5+,$.14-.4修正的信息
+-,-5$+0,+$+0,+14-@$-$+0,+4现在的显示器模式
+-,-5,0,014-,04当前优先级
+-,-5$0+4$0+1
,34+,5+14D-/++4物理基址
+-,-+0/I4+014H/+0/I/4初始化
+-,-,5-4+0/I5214$+$/+/$-3++0/I4
,3$-Q%R14/-$-4默认的字体
剩余16页未读,继续阅读
资源评论
LOVE_GG
- 粉丝: 54
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于protel99se(原理图库+封装库)电路设计硬件PCB设计protel库合集protel封装大全(近3000个).zip
- python-leetcode面试题解之第157题用Read4读取N个字符-题解.zip
- python-leetcode面试题解之第156题上下翻转二叉树-题解.zip
- python-leetcode面试题解之第155题最小栈-题解.zip
- python-leetcode面试题解之第153题寻找旋转排序数组中的最小值-题解.zip
- python-leetcode面试题解之第152题乘积最大子数组-题解.zip
- python-leetcode面试题解之第151题反转字符串中的单词-题解.zip
- python-leetcode面试题解之第150题逆波兰表达式求值-题解.zip
- python-leetcode面试题解之第149题直线上最多的点数-题解.zip
- python-leetcode面试题解之第148题排序链表-题解.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功