Linux内核直接开放一些类型的设备给用户使用,这些类型就是功能型设备。可以说Linux内核同样考虑按功能进行设备分类,对应的方式就是为每一类功能的设备分配一个主设备号。在功能层面可以不必考虑像字符设备和块设备这种高层次的抽象,而是应更多地关注功能框架本身。可见Linux内核不仅提供了比较完善的功能设备框架,而且为功能的扩展提供了强大的支持,这些都是为了满足需求的多样性,以适应需求的变化。......
2023-11-22
只是SOM的话没有太多使用价值,真正的设备是要连接很多复杂外设的,以DM 3730为基础的设备框图如图1-3所示。
图1-3引自TI的《DM 3730芯片手册》中第136页框图,为了方便读者在芯片手册中查找相关的内容,会在引用芯片手册框图时说明其所在的页码。笔者从对硬件毫无了解的计算机软件专业毕业生到目前个人感觉对嵌入式真正了解的开发者的成长过程中,TI的芯片手册给了我很大的帮助,其中详细讲解了诸多的原理和实现细节。当然很多人会觉得几千页的芯片手册无从下手,但是对钻研技术的人来说这些可是宝贝。如果大家可以静下心来仔细品味,绝对会受益匪浅。
图中,DM 3730通过各种连接方式连接了各种设备,输入输出设备根据不同的类型大体可以分为电源管理、用户输入、显示输出、图像采集、存储以及无线设备等。我们可以将DM3730与这些设备的数据接口分为总线和单一的数据接口总线。总线(如I2C、SPI和USB)的显著特点是单个总线上可以连接多个设备(如User Interface部分Finger Print和Touch Screen都是通过SPI总线和DM 3730进行连接);单一的数据接口只连接单一类型的设备(如用于用户显示LCD输出的DSI接口)。各种不同类型的数据连接接口其设计思想以及功能是不同的,例如I2C通常用于设备的控制,McBSP用于音频数据的传输等。需要注意的是同一总线可以连接不同类型的设备,比如MMC可以连接SD卡也可以连接WIFI设备。这些接口都是长期发展的行业标准,是需要软件适应并满足的需求。DM 3730作为SoC,其中包含图中所有接口控制器,相应的控制器用于按照相关的总线和接口标准进行数据传输。驱动的开发人员必须了解对应的总线以及接口知识,相关知识理解越深刻,解决问题就越游刃有余。
(www.chuimin.cn)
图1-3 基于DM 3730的设备框图
为什么要有这么多连接方式呢?这和数据传输的需求、数据的特性及复杂程度相关,比如数字信号通常依靠clock信号同步,那么相应的带宽就是Fclock×bits,bits为并行传输的位数,总线设计的时钟频率范围不同、位数不同相应的带宽就不同,而频率和位数不能随意提高,高速信号会产生电磁效应影响其他信号的完整性,另外从需求的角度来讲,不是所有类型的数据都需要高速传输,比如控制数据可以通过I2C传输,这种2线低时钟扩展性较好的总线,能够方便的进行硬件设计并通过其连接各种各样的传感器,丰富我们的实际生活。在高速数据总线设计方面,信号频率越来越高,并行信号在高主频时会有先天的劣势,很难保证信号完整性,而差分信号则可以避免相应的问题,现如今视频输入输出、高速硬盘、PCI甚至连外部memory都逐渐转向差分信号的传输方式,伴随而来的问题就是对相关接口的调试会复杂一些,需要理解协议。另外信号的分析需要专门的设备,这和调试并行信号只需要示波器比起来就显得复杂得多了。总之对接口来讲,最需要了解数据是如何组织传输的。
有关深入剖析Linux内核与设备驱动的文章
Linux内核直接开放一些类型的设备给用户使用,这些类型就是功能型设备。可以说Linux内核同样考虑按功能进行设备分类,对应的方式就是为每一类功能的设备分配一个主设备号。在功能层面可以不必考虑像字符设备和块设备这种高层次的抽象,而是应更多地关注功能框架本身。可见Linux内核不仅提供了比较完善的功能设备框架,而且为功能的扩展提供了强大的支持,这些都是为了满足需求的多样性,以适应需求的变化。......
2023-11-22
设备模型中管理驱动的数据结构是device_driver,其中包含驱动提供的通用服务的接口,下面对它进行分析:来看看sys文件系统中驱动之下主要管理哪些实体:从driver_private可见,其中主要的信息是运行中使用该驱动的设备列表。以platform驱动实体为例进行分析:其中定义了总线设备相关的服务接口:从platform驱动注册接口可以看出,抽象层的服务接口都被换为实例化的接口,这样内嵌的driver可以通过设备模型核心提供的标准操作进行管理,也可以通过这些实例化接口进行转换。......
2023-11-22
USB的设计为非对称式的,它是主从式总线,任何USB事务都是由主机引发的。USB总线拓扑如图7-12所示。图7-12引自《USB2.0规范》。USB总线已经成为使用最广泛的设备连接标准。每个USB设备至少有两个端点/管道,分别是进和出两个方向,编号为0,用于控制总线上的设备。总体上来说,系统对USB总线驱动的需求就是要能按规范实现总线的各种功能,并且满足总线的各种无关性的需求。......
2023-11-22
图7-8引自《MMC规范》。需要根据这些控制器的属性值正确地操作MMC设备。图7-9MMC信号传输特点图7-9以单一的读操作为例,可见MMC的信号主要通过CMD传送命令,并且需要响应,通过DAT信号传送数据。另外由于MMC连接的设备可能会以卡的形式存在,这就需要能够支持对设备插入的检测,在系统级别也需要能够对设备插拔进行支持。总体上来说,MMC总线驱动的需求就是要能实现总线的各种功能,并且满足总线的各种无关性需求。......
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 Foundation于2013年9月发布了《Who Writes Linux》报告,公布了最新的不同组织对Linux内核贡献的情况,见表1-1。表1-1不同组织对Linux内核贡献贡献前30名的公司中半导体厂商就有11家,约占三分之一,如果算上硬件相关的公司会超过20家,贡献总量超过了60%。可见硬件厂商对Linux内核的贡献是很大的,对Linux内核的影响也是巨大的。......
2023-11-22
实际音频驱动的分析会以DM 3730的相关驱动为例进行说明。图6-17引自《DM 3730芯片手册》中第3096页框图。下面来看看dai相关的实现细节。4codec模块对codec模块部分,之前在codec的注册函数snd_soc_register_codec定义可见其会将co-dec driver和codec侧的dai同时注册,因为这两者都是与codec相关的。这里以DM3 730板上的twl4030为例,介绍相关的框架。对于codec主要是由codec driver来提供控制接口,而由codec dai来提供数据传输能力。......
2023-11-22
相关推荐