Linux设备驱动模型

2019-07-13 07:11发布

本文基于嵌入式Linux,谈谈自己对于Linux驱动模型的一些理解(从应用的角度),其中有描述不准确或者不正确的地方,敬请各位网友批评指正。 Linux设备驱动模型理解一 基于ARM的Soc平台,一般集成了很多常用外设接口,如I2C、SPI等。这些接口的特点是:它们的寄存器可以被CPU直接寻址,因此,从本质上讲操作它们的寄存器就和操作普通的内存没有什么区别,除了一些附加的边际效应(也就是操作这些寄存器会引起外设接口的一些动作)。我们可以将这些集成在Soc上的外设接口看作是控制器(这些控制器与具体的平Soc芯片有关),由此可以引出如何控制这个控制器的问题。在基于linux的嵌入式平台上可以简单的理解,这些控制器在Linux上以platform device的形式存在。而控制这些平台设备的驱动用platform driver描述。与platform device相应的platform driver通过platform bus结合在一起(因为Linux设备、驱动分离的缘故,bus能够将两者有机结合起来)。 总结:
platform device:就是平台集成在Soc上的外设接口信息的集合(控制器
platform driver:就是能够驱动平台设备的驱动(控制器驱动
platform bus: Linux设备驱动实现了驱动与设备的分离,而platform bus就是能够将两者从新结合的关键(控制器与控制器驱动通过bus绑定在一起) 注意:platform device与platform driver是描述Soc芯片上外设接口以及怎么运用操作接口的数据结构。以SPI接口为例,在Davinci DM368这款芯片上集成了SPI接口外设,那么platform device与platform driver好比在说,我(特指Soc)身上有个SPI设备(platform device),这个设备应该这么进行收发数据(platform driver)。但是,收发谁的数据、这些数据有什么含义呢?这就涉及到下面我所理解的了 Linux设备驱动模型理解二 假如我们在Davinci DM368的SPI接口上链接了EEPROM,那么通过SPI接口进行数据收发,必须符合EEPROM协议要求。这个地方会有一个问题。
  1. 这些符合EEPROM协议的内容要不要和platform driver分离呢? 答:如果不分离,假如SPI连接的是触摸屏呢,是不是基于SPI接口的 触摸屏驱动程序还得含有与具体平台相关的代码,这会使得驱动程序的可移植性减弱。因此,EEPROM协议(数据的格式)与platform driver(数据收发)分离。
在这里我们可以得出结论:在platform driver基础之上还应该存在一个驱动(驱动的驱动)。这一驱动的目的是与外设接口所连接的特定设备按照约定的协议进行通信。 总结:数据收发流程
协议 (符合特定外设需求的格式化数据,协议由驱动之上的驱动产生)—〉platform driver (平台设备驱动)—〉platform device(平台设备)—〉外设接口所连接的设备 下一篇我将以具体例子结合Linux代码来对自己的理解进行说明