嵌入式软件开发::驱动开发模板

一、驱动开发模板

 1、字符设备驱动框架(模板1:裸机)

嵌入式软件开发::驱动开发模板_第1张图片

2、面向模板1开发驱动

嵌入式软件开发::驱动开发模板_第2张图片

3、设备树下的自读设备驱动框架(模板2:映射文件)

嵌入式软件开发::驱动开发模板_第3张图片

        没有引入设备树时,相关寄存器物理地址是直接定义在驱动文件中的,通过地址映射成为虚拟地址后,再操作虚拟地址完成GPIO的初始化。设备树的本质也是操作寄存器,只不过寄存器的相关信息放在了设备树中,配置寄存器时使用OF函数从设备树中读取寄存器数据后再进行配置。

4、面向模板2开发设备驱动

嵌入式软件开发::驱动开发模板_第4张图片

二、驱动的分离与分层

1、驱动的分离

        以I2C接口的三轴加速度传感器为例,传统的设备驱动如下图示:每个平台都有一个ADXL345的驱动,因此设备驱动要重复编写三次

嵌入式软件开发::驱动开发模板_第5张图片

         各平台的主机驱动是不同的,但是ADXL345是一样的,因此上图可以精简为一个ADXL345驱动和统一的接口API

嵌入式软件开发::驱动开发模板_第6张图片

 实际上,除了ADXL345还有AT24C02、MPU6050等I2C设备,因此实际的驱动框架图如下示

嵌入式软件开发::驱动开发模板_第7张图片

        驱动的分离即将主机驱动和设备驱动分隔开来,实际开发中,主机驱动一般由半导体厂家提供,设备驱动也会由器件厂家写好,我们只需要提供设备信息即可。也就是将设备信息从设备驱动中剥离开来,设备驱动使用标准方法获取到设备信息,然后根据获取到的设备信息来初始化设备

        因此驱动只负责驱动,设备只负责设备,想办法将两者进行匹配即可。这就是Linux中的总线-驱动-设备模型,也就是常说的驱动分离。

嵌入式软件开发::驱动开发模板_第8张图片

2、驱动的分层

        Linux下的驱动也是分层的,分层的目的是为了在不同的层处理不同的内容。以input输入子系统为例,input子系统负责管理所有跟输入有关的驱动,包括键盘、鼠标、触摸等

嵌入式软件开发::驱动开发模板_第9张图片

  • 驱动层:获取输入设备的原始值,获取到的输入事件上报给核心层
  • 核心层:处理各种IO模型,并且提供file_operations操作集合
  • 事件层:和用户空间进行交互

三、platform平台驱动模型 总线-驱动-设备

(1)实际使用中除了 I2C、 SPI、 USB 等总线外,有的外设并没有总线的概念,但是又要使用总线、驱动和设备模型。因此Linux提出了 platform 虚拟总线,相应的还有 platform 驱动和 platform 设备。
(2)CPU与外部通信的2种方式:地址总线式连接和专用接口式连接。平台总线对应地址总线式连接设备,也就是SoC内部集成的各种内部外设。

(46条消息) linux驱动开发篇(四)—— platform平台设备驱动_Aladdin_KK的博客-CSDN博客

(48条消息) Linux嵌入式驱动开发09——平台总线详解及实战_“逛丢一只鞋”的博客-CSDN博客_eim总线

 

(46条消息) Linux 新字符设备驱动开发模板_安迪西的博客-CSDN博客_linux 字符设备 驱动模板

 点亮 Linux 驱动开发路上的第一个灯_安迪西的博客-CSDN博客_linux 驱动开发

(46条消息) 什么是 Linux 下的 platform 设备驱动_安迪西的博客-CSDN博客_platform_device驱动

 (46条消息) platform平台驱动模型 总线-驱动-设备_monkea123的博客-CSDN博客

你可能感兴趣的:(#,软件开发::驱动开发,驱动开发)