DM 3730的I2C控制器框架如图7-4所示。图7-4引自《DM 3730芯片手册》中第2798页的框图。关于DM 3730I2C的驱动部分,主要分析相关初始化和总线传输的操作。由于I2C作为控制和获取状态信息,数据量并不大,而且相关的操作频率并不高,这样在中断中进行相关的处理,对系统的影响并不大。......
2023-11-22
设备模型中驱动的主要功能是和设备绑定后为使用设备提供相关的操作服务。既然是服务就可以为多个设备提供,只要与设备匹配,服务功能就能正确地完成。设备模型中管理驱动的数据结构是device_driver,其中包含驱动提供的通用服务的接口,下面对它进行分析:
来看看sys文件系统中驱动之下主要管理哪些实体:
从driver_private可见,其中主要的信息是运行中使用该驱动的设备列表。
device_driver还是抽象层面的实体,而到具体的总线时,相应的驱动要有与总线相关的驱动实体,因为只有具体总线的驱动才会了解相应总线的设备,相应的服务接口也要与具体的总线设备相关。从这个层面上讲设备模型中的驱动与总线关系更紧密。
以platform驱动实体为例进行分析:
其中定义了总线设备相关的服务接口:
(www.chuimin.cn)
从platform驱动注册接口可以看出,抽象层的服务接口都被换为实例化的接口,这样内嵌的driver可以通过设备模型核心提供的标准操作进行管理,也可以通过这些实例化接口进行转换。
系统中设备与驱动绑定的流程如图5-17所示。
图5-17 驱动与设备绑定的流程
从图5-17可见,具体总线驱动在注册的时候就会根据总线是否自动probe设备(通常自动有效)来进行设备的绑定,为了实现该功能设备模型核心提供了很多接口方便设备和驱动的绑定,相应的功能也是十分完善的。其中添加driver的接口就是driver_register,来看看具体的内容:
从代码中可见,设备模型管理的device_driver必须与bus关联,因为只有bus才能帮其找到所管理的设备,而具体的总线都会如platform总线一样封装出注册driver的接口函数,并将device_driver的bus属性填入,为上层提供统一的接口,也避免跨层设置。后续的操作如图5-17所示,根据bus的自动probe属性来进行具体总线的设备与驱动的绑定。
有关深入剖析Linux内核与设备驱动的文章
DM 3730的I2C控制器框架如图7-4所示。图7-4引自《DM 3730芯片手册》中第2798页的框图。关于DM 3730I2C的驱动部分,主要分析相关初始化和总线传输的操作。由于I2C作为控制和获取状态信息,数据量并不大,而且相关的操作频率并不高,这样在中断中进行相关的处理,对系统的影响并不大。......
2023-11-22
图1-3引自TI的《DM 3730芯片手册》中第136页框图,为了方便读者在芯片手册中查找相关的内容,会在引用芯片手册框图时说明其所在的页码。各种不同类型的数据连接接口其设计思想以及功能是不同的,例如I2C通常用于设备的控制,McBSP用于音频数据的传输等。图1-3基于DM 3730的设备框图为什么要有这么多连接方式呢?......
2023-11-22
USB的设计为非对称式的,它是主从式总线,任何USB事务都是由主机引发的。USB总线拓扑如图7-12所示。图7-12引自《USB2.0规范》。USB总线已经成为使用最广泛的设备连接标准。每个USB设备至少有两个端点/管道,分别是进和出两个方向,编号为0,用于控制总线上的设备。总体上来说,系统对USB总线驱动的需求就是要能按规范实现总线的各种功能,并且满足总线的各种无关性的需求。......
2023-11-22
也正是因为Linux内核的唯一性,各个不同发布版本拥有相同的框架。Linux内核是在整个Linux系统的最底层,它负责管理硬件,运行用户程序,并保持系统整体的安全性和完整性。可以说是Linux系统的根和灵魂。图3-1中看到Linux内核还有另一层面的含义。这对于Linux内核同样适用。所以对Linux内核的剖析、学习和研究也不能独立于系统进行,而是要综合考虑应用、内核和硬件等各方面的信息和内容。这样才能更全面、深刻地理解Linux内核。......
2023-11-22
图7-8引自《MMC规范》。需要根据这些控制器的属性值正确地操作MMC设备。图7-9MMC信号传输特点图7-9以单一的读操作为例,可见MMC的信号主要通过CMD传送命令,并且需要响应,通过DAT信号传送数据。另外由于MMC连接的设备可能会以卡的形式存在,这就需要能够支持对设备插入的检测,在系统级别也需要能够对设备插拔进行支持。总体上来说,MMC总线驱动的需求就是要能实现总线的各种功能,并且满足总线的各种无关性需求。......
2023-11-22
图3-3Linux内核整体框架③bridges:桥梁层。Linux内核通过统一的接口操作设备,这样就屏蔽了各个设备的差异,从而降低了和硬件的耦合关系。Linux内核为了简化实现,将共享资源的进程作为线程。考虑到外部事件需要对执行流程进行转换,另外不同的应用执行流程之间需要切换,这就要在Linux内核的逻辑层抽象出调度器这一逻辑功能。......
2023-11-22
图6-4分辨率指标从图6-4可见,目前各种显示分辨率,不仅大小不同,长宽比也是各种各样的,这些分辨率主要有两种不同的标准,一种是4∶3的PC相关的显示器标准,另外一种是16∶9的TV相关的标准。对显示驱动基本的需求就是能够支持这些各种不同分辨率和长宽比的显示设备,并对这些设备进行相应的控制,使得系统能有较好的输出效果。......
2023-11-22
Linux内核作为目前最成功以及发展最快的开源项目之一,在实际应用中取得的巨大成功是举世瞩目的。Linux Foundation于2013年9月发布了《Who Writes Linux》报告,公布了最新的不同组织对Linux内核贡献的情况,见表1-1。表1-1不同组织对Linux内核贡献贡献前30名的公司中半导体厂商就有11家,约占三分之一,如果算上硬件相关的公司会超过20家,贡献总量超过了60%。可见硬件厂商对Linux内核的贡献是很大的,对Linux内核的影响也是巨大的。......
2023-11-22
相关推荐