linux驱动开发 - 11_Linux 下的驱动分离与分层


链接: C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂

11. Linux 下的驱动分离与分层

1 驱动的分隔与分离

linux是一个成熟、复杂、庞大的操作系统,代码的重用性很重要,不然会在linux内核存在大量的无意义重复的代码。尤其的驱动程序,占了linux内核代码的大头,所以需要对驱动程序加以管理。

传统的I2C设备驱动

假如有三个平台A、B和C,这三个平台都有MPU6050 这个 I2C接口的六轴传感器。按照I2C驱动的思路,每个平台都有一个 MPU6050的驱动,所以编写出来的最简单的驱动框架如图

在这里插入图片描述

可以看出,每种平台下都有一个主机驱动和设备驱动,左边的主机驱动是必要的,不同平台的控制器不同。但是右边的设备驱动没必要每个平台都写一个,因为不管对于哪一个SOC来说,MPU6050都是一样的,都是通过I2C接口来读写数据,只需要编写一个MPU6050驱动程序就可以。

最好每个平台的I2C控制器都提供一个统一的接口(也叫做主机驱动),每个设备的也只提供一个驱动程序(设备驱动),每个设备通过统一的 I2C接口驱动来访问,这样就可以大大简化驱动文件

在这里插入图片描述

实际的 I2C 驱动设备肯定有很多种,不止 MPU6050 这一个,那么实际的驱动架构如图

在这里插入图片描述

  • 这个就是驱动的分隔,将主机驱动和设备驱动分隔开来,比如 I2C、 SPI 等等都会采用驱动分隔的方式来简化驱动的开发。

  • 在实际的驱动开发中,一般 I2C 主机控制器驱动已经由半导体厂家编写好而设备驱动一般也由设备器件的厂家编写好了只需要提供设备信息即可,比如 I2C 设备的话提供设备连接到了哪个 I2C 接口上, I2C 的速度是多少等等。 (将设备信息从设备驱动中剥离开来,驱动使用标准方法去获取到设备信息(比如从设备树中获取到设备信息),然后根据获取到的设备信息来初始化设备。)

所以相当于驱动只负责驱动,设备只负责设备,想办法将两者进行匹配即可。Linux 中的总线(bus)、驱动(driver)和设备(device)模型,也就是常说的驱动分离。总线就是驱动和设备信息的桥梁,负责给两者牵线搭桥。

在这里插入图片描述

  • 当向系统注册一个驱动的时候,总线就会在右侧的设备中查找,看看有没有与之匹配的设备,如果有的话就将两者联系起来。

  • 当向系统中注册一个设备的时候,总线就会在左侧的驱动中查找看有没有与之匹配的设备,有的话也联系起来。

2 驱动的分层

Linux 下的驱动往往也是分层的,分层的目的也是为了在不同的层处理不同的内容。以input子系统 为例,input 子系统负责管理所有跟输入有关的驱动,包括键盘、鼠标、触摸等,最底层的就是设备原始驱动,负责获取输入设备的原始值,获取到的输入事件上报给 input 核心层。input 核心层会处理各种 IO 模型,并且提
供file_operations 操作集合。在编写输入设备驱动的时候只需要处理好输入事件的上报即可,至于如何处理这些上报的输入事件那是上层去考虑的

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值