首页 理论教育帧缓冲框架解析-《深入剖析Linux内核与设备驱动》

帧缓冲框架解析-《深入剖析Linux内核与设备驱动》

【摘要】:整体的frame buffer框架如图6-5所示。了解frame buffer的框架还要先从为用户提供的接口开始。图6-7可变参数中硬件信息的含义固定信息是在frame buffer的操作过程中并不发生变化的。从整体分析,frame buffer的框架很直接,主要就是直接管理实际的设备,而相关的操作与应用层直接相关。

Linux内核中帧缓冲对应的就是显示输出设备,它是从一个包含了完整显示帧数据的内存缓冲区来驱动视频显示器。主要是将显示设备抽象为显示的内容,通过显示内容来对显示设备进行操作。从层次上考虑对用户可见的是不同的显示内容,而物理显示设备的控制则由驱动进行处理,当然用户不能对物理设备的参数一无所知,由于应用层控制显示内容和效果,所以相应的也需要获得显示参数。而从驱动的角度考虑,只要将显示内容统一的看作数据就可以在抽象操作上将分辨率等物理参数的不同屏蔽,毕竟那些参数偏向于控制显示设备的信息。

整体的frame buffer框架如图6-5所示。

978-7-111-49426-3-Chapter06-52.jpg

图6-5 frame buffer框架

从图6-5中可见,对框架来说,由于显示设备还可以显示控制台的信息,所以专门提供fbcon来进行统一的相关操作,并与console模块相结合,而fbcmap存在的原因是由于老的设备内存很少(由于当时价格昂贵),而显示设备每个像素的色彩相对丰富,所以建立一个映射表,使得用较少的信息表示颜色在内存的色彩值,并与显示设备的色彩值之间建立映射,以达到更好的显示效果。这两部分使用并不多,所以不做介绍。框架的主要部分是fb-mem,而相应与驱动的关系也是很直接的。

了解frame buffer的框架还要先从为用户提供的接口开始。frame buffer提供了相应的文件操作接口fb_fops,下面来看看具体内容:

978-7-111-49426-3-Chapter06-53.jpg

对于直接对应驱动的框架,只要了解相应的open操作就能明确框架管理的实体是什么。下面来看看fb_open,调用fb_open说明文件的相关操作已经重载为frame buffer框架的文件操作fb_fops。

978-7-111-49426-3-Chapter06-54.jpg

978-7-111-49426-3-Chapter06-55.jpg

从代码中可以了解,frame buffer框架最重要的实体就是fb_info,其中涉及驱动的操作接口fbops。接下来分析一下fb_info:

978-7-111-49426-3-Chapter06-56.jpg

978-7-111-49426-3-Chapter06-57.jpg

其中最重要的三个属性分别是var、fix和fbops,分别代表可变信息、固定信息和驱动操作接口。先来看看可变信息:

978-7-111-49426-3-Chapter06-58.jpg

978-7-111-49426-3-Chapter06-59.jpg

fb_var_screeninfo会在frame buffer的操作中发生改变,其中主要分辨率的关系如图6-6所示。在实际显示过程中通过调整这些参数可以显示不同的内容,也是利用该部分实现多帧操作,提高整个的显示效果。

978-7-111-49426-3-Chapter06-60.jpg

图6-6 可变参数中分辨率的关系

硬件信息的含义如图6-7所示。图6-6引自《DM 3730芯片手册》中第1722页的框图。(www.chuimin.cn)

978-7-111-49426-3-Chapter06-61.jpg

图6-7 可变参数中硬件信息的含义

固定信息是在frame buffer的操作过程中并不发生变化的。具体如下:

978-7-111-49426-3-Chapter06-62.jpg

其中主要的就是物理地址信息。

接下来就是驱动的重点———操作接口:

978-7-111-49426-3-Chapter06-63.jpg

978-7-111-49426-3-Chapter06-64.jpg

978-7-111-49426-3-Chapter06-65.jpg

以上是主要的管理实体,相应的frame buffer框架还提供了重要的管理接口,用于驱动使用。

978-7-111-49426-3-Chapter06-66.jpg

978-7-111-49426-3-Chapter06-67.jpg

这是对frame buffer管理实体的分配操作,其中会初始化设备的信息。另一个重要的接口就是注册,一般是在进行相应的设置之后执行。具体内容如下:

978-7-111-49426-3-Chapter06-68.jpg

978-7-111-49426-3-Chapter06-69.jpg

978-7-111-49426-3-Chapter06-70.jpg

这些接口是frame buffer框架和具体驱动交互的桥梁,通过它们,设备驱动将加入到框架中供用户使用。

从整体分析,frame buffer的框架很直接,主要就是直接管理实际的设备,而相关的操作与应用层直接相关。相关的操作逻辑可以通过应用层的操作来理解。