SPI总线框架对这两类设备进行管理,具体的框架如图7-6所示。通常的SPI驱动都是在内核实现并在内核态执行的,所以就不对spidev进行详细的分析。SPI总线框架整体的功能就是这样,接下来看看具体各部分的实现。在SPI总线框架中相应的实体是spi_board_info,内容如下:其中的主要信息是与总线信号相关的属性。......
2023-11-22
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页的框图。(www.chuimin.cn)
图6-7 可变参数中硬件信息的含义
固定信息是在frame buffer的操作过程中并不发生变化的。具体如下:
其中主要的就是物理地址信息。
接下来就是驱动的重点———操作接口:
以上是主要的管理实体,相应的frame buffer框架还提供了重要的管理接口,用于驱动使用。
这是对frame buffer管理实体的分配操作,其中会初始化设备的信息。另一个重要的接口就是注册,一般是在进行相应的设置之后执行。具体内容如下:
这些接口是frame buffer框架和具体驱动交互的桥梁,通过它们,设备驱动将加入到框架中供用户使用。
从整体分析,frame buffer的框架很直接,主要就是直接管理实际的设备,而相关的操作与应用层直接相关。相关的操作逻辑可以通过应用层的操作来理解。
有关深入剖析Linux内核与设备驱动的文章
SPI总线框架对这两类设备进行管理,具体的框架如图7-6所示。通常的SPI驱动都是在内核实现并在内核态执行的,所以就不对spidev进行详细的分析。SPI总线框架整体的功能就是这样,接下来看看具体各部分的实现。在SPI总线框架中相应的实体是spi_board_info,内容如下:其中的主要信息是与总线信号相关的属性。......
2023-11-22
也正是因为Linux内核的唯一性,各个不同发布版本拥有相同的框架。Linux内核是在整个Linux系统的最底层,它负责管理硬件,运行用户程序,并保持系统整体的安全性和完整性。可以说是Linux系统的根和灵魂。图3-1中看到Linux内核还有另一层面的含义。这对于Linux内核同样适用。所以对Linux内核的剖析、学习和研究也不能独立于系统进行,而是要综合考虑应用、内核和硬件等各方面的信息和内容。这样才能更全面、深刻地理解Linux内核。......
2023-11-22
VFS的实现是以“一切皆是文件”为需求出发点的。要理解VFS的框架首先看一下VFS和系统的静态关系框图,如图5-1所示。从图5-1可见,VFS是用户层的直接接口,是面向用户的服务。图5-1VFS和系统静态关系图在图5-2中每个节点被使用时都会在VFS层中创建dentry,这样可以快速通过文件名进行查找和定位,Linux内核中对dentry的管理组织形式如图5-3所示。以上是系统运行时VFS对文件名的组织管理,这是VFS管理的一个方面。......
2023-11-22
1框架总体设计从输入设备框架的需求可知,内核的整个输入流程应该分为下层的各种输入设备和上层与用户的控制信息交互两个方面。从图6-1可见,输入设备系统框架的核心部分从底到上分为input driver,input core和event handler三个部分。应用层则要根据输入设备的事件进行相应的操作,为了给应用层统一的接口,输入设备框架对于输入事件进行了规范。......
2023-11-22
考虑到电源管理的需求涉及处理器和各种设备,一方面是处理器尽可能减少功耗,另一方面是设备尽可能减少功耗。图5-30Linux电源管理各个功能从图5-30可见Linux内核的电源管理功能有与处理器相关的CPUIdle和CPUFreq,也有与设备相关的runtime pm,另外还有与整个系统待机时SLM相关的低功耗电源管理功能。下面分别对这些功能框架进行介绍。具体的驱动同样会在SoC电源管理部分进行讲解。对具体设备的电源管理实现,将在设备驱动中进行详细分析。......
2023-11-22
DM 3730的I2C控制器框架如图7-4所示。图7-4引自《DM 3730芯片手册》中第2798页的框图。关于DM 3730I2C的驱动部分,主要分析相关初始化和总线传输的操作。由于I2C作为控制和获取状态信息,数据量并不大,而且相关的操作频率并不高,这样在中断中进行相关的处理,对系统的影响并不大。......
2023-11-22
图6-4分辨率指标从图6-4可见,目前各种显示分辨率,不仅大小不同,长宽比也是各种各样的,这些分辨率主要有两种不同的标准,一种是4∶3的PC相关的显示器标准,另外一种是16∶9的TV相关的标准。对显示驱动基本的需求就是能够支持这些各种不同分辨率和长宽比的显示设备,并对这些设备进行相应的控制,使得系统能有较好的输出效果。......
2023-11-22
谈到Linux内核,大家的第一感觉就是一个庞大的系统、很多的模块和功能,实在是太复杂了。Linux内核在设计过程中这些都已考虑在其中,这也就提升了它的适用范围。抽象是人类的一个重要思维能力,从某种角度来说软件系统是对各种概念或者行为进行抽象,并加以管理。......
2023-11-22
相关推荐