DM 3730的I2C控制器框架如图7-4所示。图7-4引自《DM 3730芯片手册》中第2798页的框图。关于DM 3730I2C的驱动部分,主要分析相关初始化和总线传输的操作。由于I2C作为控制和获取状态信息,数据量并不大,而且相关的操作频率并不高,这样在中断中进行相关的处理,对系统的影响并不大。......
2023-11-22
对设备模型中的设备,考虑的重点是如何进行抽象。任何设备要使用都是需要资源的,无论是自身的资源还是系统的资源,所以应从其拥有的资源考虑进行抽象。
具体分析设备模型中的设备管理,首先要分析device结构。
从device可见,重点是管理的资源,当然也包含针对sys文件系统关联的属性。而设备的层次关系在实际的情况下通常是从逻辑层的功能设备逐渐到物理层的总线设备,最终到platform bus中对应的device,这样系统就建立了完整的设备层次关系。
还是以platform总线的设备进行实例化分析:
这里可以理解为其记录总线相关的特殊资源,但实际又有platform总线的特殊性,re-sources实际是各种资源的抽象,其中包含中断、IO空间等。其资源具体的类型在ioport.h中定义,具体如下:
可见platform设备管理的资源就是物理设备的各种资源,这和实际也是一致的。
整体来说,设备模型中的设备就是管理资源以供驱动访问和操作,资源管理是设备管理的一个核心。
当然设备管理还需要能为用户创建合适的操作接口文件,不能因为创建时间的差异而产生不同的文件名,这就需要和用户层的管理程序结合,相应的框架和流程如图5-18所示。
从图5-18可见,内核设备模型和udev紧密结合,按从1~6的顺序执行最终对固定的设备产生固定的操作接口文件,从而保证了应用的一致视角。设备模型通知udev的方式如图5-19所示。
通过uevent通知到应用层,就完成设备管理创建设备文件到应用层的操作。这样设备管理的功能就是完整的了。(www.chuimin.cn)
图5-18 设备模型设备文件创建流程及框架
图5-19 设备模型通知应用层流程
关于设备名,设备模型提供产生文件名的接口device_get_devnode,并通过uevent属性文件提供给用户层,device_get_devnode的细节如下:
设备模型通过device_add接口来为以上功能提供统一的服务,具体细节如下:
从代码细节可见,设备并不完全与总线绑定,还有上层功能抽象的功能类,这和之前的设备分类是吻合的。具体的设备在进行add操作之前要将其bus或者class的属性进行正确地设置。设备模型提供了良好的框架,具体的实例化就交由具体的模块实现。
有关深入剖析Linux内核与设备驱动的文章
DM 3730的I2C控制器框架如图7-4所示。图7-4引自《DM 3730芯片手册》中第2798页的框图。关于DM 3730I2C的驱动部分,主要分析相关初始化和总线传输的操作。由于I2C作为控制和获取状态信息,数据量并不大,而且相关的操作频率并不高,这样在中断中进行相关的处理,对系统的影响并不大。......
2023-11-22
从图5-14可见,具体的设备模型的初始化流程在系统已经基本初始化完毕后执行,这时候sys文件系统作为一种特殊的文件系统已经注册并初始化,具体的设备初始化会在do_initcalls以函数表的形式进行,在这之前就是设备模型初始化的好时机,由driver_init来完成,其内部会进行总线管理初始化,功能设备管理初始化,platform总线初始化等。这样就对设备模型的设计框架有了基本的认识。......
2023-11-22
图3-3Linux内核整体框架③bridges:桥梁层。Linux内核通过统一的接口操作设备,这样就屏蔽了各个设备的差异,从而降低了和硬件的耦合关系。Linux内核为了简化实现,将共享资源的进程作为线程。考虑到外部事件需要对执行流程进行转换,另外不同的应用执行流程之间需要切换,这就要在Linux内核的逻辑层抽象出调度器这一逻辑功能。......
2023-11-22
也正是因为Linux内核的唯一性,各个不同发布版本拥有相同的框架。Linux内核是在整个Linux系统的最底层,它负责管理硬件,运行用户程序,并保持系统整体的安全性和完整性。可以说是Linux系统的根和灵魂。图3-1中看到Linux内核还有另一层面的含义。这对于Linux内核同样适用。所以对Linux内核的剖析、学习和研究也不能独立于系统进行,而是要综合考虑应用、内核和硬件等各方面的信息和内容。这样才能更全面、深刻地理解Linux内核。......
2023-11-22
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
VFS的实现是以“一切皆是文件”为需求出发点的。要理解VFS的框架首先看一下VFS和系统的静态关系框图,如图5-1所示。从图5-1可见,VFS是用户层的直接接口,是面向用户的服务。图5-1VFS和系统静态关系图在图5-2中每个节点被使用时都会在VFS层中创建dentry,这样可以快速通过文件名进行查找和定位,Linux内核中对dentry的管理组织形式如图5-3所示。以上是系统运行时VFS对文件名的组织管理,这是VFS管理的一个方面。......
2023-11-22
谈到Linux内核,大家的第一感觉就是一个庞大的系统、很多的模块和功能,实在是太复杂了。Linux内核在设计过程中这些都已考虑在其中,这也就提升了它的适用范围。抽象是人类的一个重要思维能力,从某种角度来说软件系统是对各种概念或者行为进行抽象,并加以管理。......
2023-11-22
相关推荐