图6-4分辨率指标从图6-4可见,目前各种显示分辨率,不仅大小不同,长宽比也是各种各样的,这些分辨率主要有两种不同的标准,一种是4∶3的PC相关的显示器标准,另外一种是16∶9的TV相关的标准。对显示驱动基本的需求就是能够支持这些各种不同分辨率和长宽比的显示设备,并对这些设备进行相应的控制,使得系统能有较好的输出效果。......
2025-09-30
Linux内核中帧缓冲对应的就是显示输出设备,它是从一个包含了完整显示帧数据的内存缓冲区来驱动视频显示器。主要是将显示设备抽象为显示的内容,通过显示内容来对显示设备进行操作。从层次上考虑对用户可见的是不同的显示内容,而物理显示设备的控制则由驱动进行处理,当然用户不能对物理设备的参数一无所知,由于应用层控制显示内容和效果,所以相应的也需要获得显示参数。而从驱动的角度考虑,只要将显示内容统一的看作数据就可以在抽象操作上将分辨率等物理参数的不同屏蔽,毕竟那些参数偏向于控制显示设备的信息。
整体的frame buffer框架如图6-5所示。

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

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


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


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


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

图6-6 可变参数中分辨率的关系
硬件信息的含义如图6-7所示。图6-6引自《DM 3730芯片手册》中第1722页的框图。(https://www.chuimin.cn)

图6-7 可变参数中硬件信息的含义
固定信息是在frame buffer的操作过程中并不发生变化的。具体如下:

其中主要的就是物理地址信息。
接下来就是驱动的重点———操作接口:



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


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



这些接口是frame buffer框架和具体驱动交互的桥梁,通过它们,设备驱动将加入到框架中供用户使用。
从整体分析,frame buffer的框架很直接,主要就是直接管理实际的设备,而相关的操作与应用层直接相关。相关的操作逻辑可以通过应用层的操作来理解。
相关文章
图6-4分辨率指标从图6-4可见,目前各种显示分辨率,不仅大小不同,长宽比也是各种各样的,这些分辨率主要有两种不同的标准,一种是4∶3的PC相关的显示器标准,另外一种是16∶9的TV相关的标准。对显示驱动基本的需求就是能够支持这些各种不同分辨率和长宽比的显示设备,并对这些设备进行相应的控制,使得系统能有较好的输出效果。......
2025-09-30
VFS的实现是以“一切皆是文件”为需求出发点的。要理解VFS的框架首先看一下VFS和系统的静态关系框图,如图5-1所示。从图5-1可见,VFS是用户层的直接接口,是面向用户的服务。图5-1VFS和系统静态关系图在图5-2中每个节点被使用时都会在VFS层中创建dentry,这样可以快速通过文件名进行查找和定位,Linux内核中对dentry的管理组织形式如图5-3所示。以上是系统运行时VFS对文件名的组织管理,这是VFS管理的一个方面。......
2025-09-30
也正是因为Linux内核的唯一性,各个不同发布版本拥有相同的框架。Linux内核是在整个Linux系统的最底层,它负责管理硬件,运行用户程序,并保持系统整体的安全性和完整性。可以说是Linux系统的根和灵魂。图3-1中看到Linux内核还有另一层面的含义。这对于Linux内核同样适用。所以对Linux内核的剖析、学习和研究也不能独立于系统进行,而是要综合考虑应用、内核和硬件等各方面的信息和内容。这样才能更全面、深刻地理解Linux内核。......
2025-09-30
考虑到电源管理的需求涉及处理器和各种设备,一方面是处理器尽可能减少功耗,另一方面是设备尽可能减少功耗。图5-30Linux电源管理各个功能从图5-30可见Linux内核的电源管理功能有与处理器相关的CPUIdle和CPUFreq,也有与设备相关的runtime pm,另外还有与整个系统待机时SLM相关的低功耗电源管理功能。下面分别对这些功能框架进行介绍。具体的驱动同样会在SoC电源管理部分进行讲解。对具体设备的电源管理实现,将在设备驱动中进行详细分析。......
2025-09-30
图3-3Linux内核整体框架③bridges:桥梁层。Linux内核通过统一的接口操作设备,这样就屏蔽了各个设备的差异,从而降低了和硬件的耦合关系。Linux内核为了简化实现,将共享资源的进程作为线程。考虑到外部事件需要对执行流程进行转换,另外不同的应用执行流程之间需要切换,这就要在Linux内核的逻辑层抽象出调度器这一逻辑功能。......
2025-09-30
1基本中断处理流程Linux内核的中断处理框架当然要满足之前提到的各种需求。对Linux内核来说,每个中断号都是通过irq_desc进行描述的,可以说irq_desc是中断处理的核心。通过这些抽象结构就可以实现整个中断处理的框架。2中断处理延时操作下面介绍系统如何解决中断中大数据量时的延时处理问题。图4-28是Linux内核中断处理流程。......
2025-09-30
谈到Linux内核,大家的第一感觉就是一个庞大的系统、很多的模块和功能,实在是太复杂了。Linux内核在设计过程中这些都已考虑在其中,这也就提升了它的适用范围。抽象是人类的一个重要思维能力,从某种角度来说软件系统是对各种概念或者行为进行抽象,并加以管理。......
2025-09-30
从图3-2中可以理解Linux内核就是将硬件的功能抽象出来,为用户的应用程序提供各种系统服务。与用户相关的属性是与Linux内核中整体安全性相关的,这部分功能通常和硬件具体功能关系不大,而是附加在逻辑功能之上的属性。本书是以嵌入式系统为基础进行说明,所以将重点放在硬件设备的具体功能以及Linux内核在硬件之上的具体实现方面。Linux内核的整体框架如图3-3所示。图3-3清晰地展现了Linux内核的实现层次,以及应用层功能和硬件功能的对应关系。......
2025-09-30
相关推荐