USB的设计为非对称式的,它是主从式总线,任何USB事务都是由主机引发的。USB总线拓扑如图7-12所示。图7-12引自《USB2.0规范》。USB总线已经成为使用最广泛的设备连接标准。每个USB设备至少有两个端点/管道,分别是进和出两个方向,编号为0,用于控制总线上的设备。总体上来说,系统对USB总线驱动的需求就是要能按规范实现总线的各种功能,并且满足总线的各种无关性的需求。......
2023-11-22
内存管理是Linux内核非常重要的功能,可以说是最基础的功能之一。在介绍最小系统的时候,就已经看到内存是硬件必不可少的部分。如何管理内存一直是一个综合的问题,对于内存的管理是多方面的,因为存储系统本身就是一个有层次概念的系统。存储系统的层次结构如图4-31所示。而内存RAM是既可以用来执行指令又可以用来存放数据的多功能存储器件,而且在存储系统层次中位于中间的位置,起到承上启下的作用,性价比(速度快并且价格低)十分高,这样就附加了内存缓存的功能需求,用于缓存底层存储系统的数据。
图4-31 存储系统层次结构
整个内存管理的首要需求自然是内存物理空间的管理。当然空间的管理要有单元的概念,并且单元大小要合适,单元小则需要的管理资源多,单元大就会有浪费。由于处理器是使用自己的视角(地址空间)访问内存,内存的管理也要从处理器的角度出发。由于处理器使用虚拟地址并通过映射来访问内存,这样内存管理就不能只关心内存的物理空间,还要关心虚拟地址空间,并对虚拟地址空间和映射关系进行管理。这样内核中实际的内存管理需求就包括了内存物理空间管理、虚拟地址空间管理,以及虚拟地址和内存物理地址映射关系的管理。(www.chuimin.cn)
同样内存管理部分会有相应的性能需求,主要是减少碎片,包括外部碎片和内部碎片(与管理粒度相关)。另外对于分配和释放也有性能的要求(当然是越快越好)。
作为内核的基础功能之一,内存管理由于空间的限制,需要将各种模块及不同情况下对于内存的请求分为不同的优先级和不同的方式进行操作,这些也是内存管理需要满足的需求。
随着SoC芯片技术的发展,愈来愈多的协处理器加入到了SoC中。特别是视频应用需求的不断增长使得内存管理的需求也发生了变化,由于图像分辨率以及显示分辨率的不断提高,而协处理器通常又需要连续的物理内存,这样就有对于几兆甚至十几兆连续内存管理的需求。而原有的Linux内核内存管理并不能满足这种需求,这样就需要开发新的内存管理方法。简便有效的方法是将相应的物理空间和Linux内核的空间保持分离,相应的物理空间单独进行管理,应用则通过映射来进行访问。这部分空间通常由芯片厂商提供管理方法,如TI的CMEM、高通的PMEM等。当然随着内核的发展,芯片厂商各自为政的局面必然得到改观。现今内核也在逐渐整合这部分功能,提出了一些独立的方案,如CMA和ION。最新的内核有对两者进行整合的趋势,很可能将CMA作为ION的基础。不管怎样,这个功能需求是固定的,原理也是基本一致的,后面会以TI的CMEM为例进行介绍,至于内核最终的解决形式还要时间的验证。
有关深入剖析Linux内核与设备驱动的文章
USB的设计为非对称式的,它是主从式总线,任何USB事务都是由主机引发的。USB总线拓扑如图7-12所示。图7-12引自《USB2.0规范》。USB总线已经成为使用最广泛的设备连接标准。每个USB设备至少有两个端点/管道,分别是进和出两个方向,编号为0,用于控制总线上的设备。总体上来说,系统对USB总线驱动的需求就是要能按规范实现总线的各种功能,并且满足总线的各种无关性的需求。......
2023-11-22
SPI是一种高速、全双工、同步总线。这样就允许单个SPI总线上连接多个SPI从设备。对于SPI总线从设备并没有固化的地址,而是通过CS信号区分不同的设备。另外因为SPI总线频率最高可以达到70MHz,所以需要较大吞吐量的操作方案进行数据传输,通常使用DMA进行操作。总体上来说,系统对于SPI总线驱动的需求就是要能实现总线的各种功能,并且满足类似于I2C总线的各种无关性需求。图7-5SPI总线数据传输信号规范......
2023-11-22
图4-25中断在系统中的连接示意图从图4-25中可见,中断相关的硬件包括设备、中断控制器和处理器。这需要对中断控制器进行不同的操作逻辑来避免该类问题的发生,中断处理逻辑需要和中断控制器的操作相结合以使中断处理能正确的执行。以上主要还是功能需求,对于性能方面,中断处理都是有时间要求的,所以会有中断响应时间这一性能指标的要求。好的系统需要在大量上报中断时仍能有较小的中断响应时间。......
2023-11-22
整个系统启动和初始化的过程,Linux内核是在主处理器启动之后才会执行。不同的处理器启动流程并不相同,这就要求Linux内核能支持各种处理器的初始化操作。Linux内核各个模块,大部分设计时做到了体系结构无关。Linux内核是一个庞大的系统,最终生成的操作系统代码的执行文件非常大。......
2023-11-22
1芯片片内内存使用TI芯片相关的内存管理,对片外内存来说,可以通过启动参数将需要内核管理的内存进行设置。这样做的原因是由于需要连续的物理内存空间,并且对内核的物理内存管理影响最小。3独立cmem管理之前简单说明芯片厂商的独立内存管理,针对于TI的视频芯片,TI提供了cmem的内存管理驱动,主要是连续内存管理。有了该内存管理功能,TI的多媒体框架和编解码库就可以使用连续的物理内存空间,高效地完成多媒体处理相关的功能。......
2023-11-22
DM 3730的I2C控制器框架如图7-4所示。图7-4引自《DM 3730芯片手册》中第2798页的框图。关于DM 3730I2C的驱动部分,主要分析相关初始化和总线传输的操作。由于I2C作为控制和获取状态信息,数据量并不大,而且相关的操作频率并不高,这样在中断中进行相关的处理,对系统的影响并不大。......
2023-11-22
考虑到电源管理的需求涉及处理器和各种设备,一方面是处理器尽可能减少功耗,另一方面是设备尽可能减少功耗。图5-30Linux电源管理各个功能从图5-30可见Linux内核的电源管理功能有与处理器相关的CPUIdle和CPUFreq,也有与设备相关的runtime pm,另外还有与整个系统待机时SLM相关的低功耗电源管理功能。下面分别对这些功能框架进行介绍。具体的驱动同样会在SoC电源管理部分进行讲解。对具体设备的电源管理实现,将在设备驱动中进行详细分析。......
2023-11-22
可以说I2C已经成为嵌入式设备不可或缺的总线形式。嵌入式处理器通常作为I2C总线的主设备,而传感器等外围设备是总线上的从设备。I2C总线数据传输信号规范如图7-2所示。图7-2I2C总线数据传输信号规范从图7-2可见,具体传输是由Start和Stop标记的,并且每传送一个字长都需要有ACK标记。总体上来说,系统对I2C总线驱动的需求就是要能实现总线的各种功能,并且满足以上的各种无关性需求。......
2023-11-22
相关推荐