目录

1.设备驱动模型的引入

2.sys文件系统

3.linux设备模型

4.linux设备模型中的核心对象KOBJECT

5.linux设备模型中的对象集合体KSET

6.linux设备模型中的共同特性KTYPE

7.platform平台总线驱动模型

7.1 总述

7.2 platform device

7.3 platform driver

7.4 device driver

7.5 driver_private

7.6 设备与驱动匹配的过程

8.参考资料和思考问题


1.设备驱动模型的引入

为什么要引入设备驱动模型?
由于linux支持世界上所有的不同功能的硬件设备,导致linux中有一般的代码是设备驱动而且随着硬件的快速
升级换代,设备驱动的代码量也快速增长,为了设备多样性带来的linux驱动开发的复杂度以及设备热插拔处理
电源管理等,linux内核提出了设备模型,也成为了driver module的概念.设备驱动模型的引入.
设备模型将硬件设备归纳,分类,然后抽象出一套标准的数据结构和接口,驱动的开发就简化为对内核所规定的
数据结构的填充和实现,因此linux设备驱动模型是一种抽象,为内核建立起统一的设备模型,其目的是提供一个
系统结构的一般性抽象描述,linux设备模型跟踪所有系统所知道的设备,以便让设备驱动模型的核心程序协调
驱动和新设备之间的关系.Linux设备驱动模型引入的目的:
(1)电源管理和系统关机,设备之间大部分情况下都是有依赖和耦合的,因此要实现电源管理就必须对系统的设备结构有清楚的理解,应该知道先关那个,然后再关哪个.
(2)与用户空间通信,因为linux设备驱动程序非常复杂,它提供了一种与用户空间进行通信的机制,即sys文件系统.sys虚拟文件系统的实现与设备模型密切相关,并且向外界展示了它所表述的结构,向用户空间所提供的系统信息以及改变操作参数的接口,要通过sys文件系统来实现,也就是通过设备模型来实现.
(3)热插拔设备,处理与用户空间通信的热插拔设备是通过设备模型来管理的.
(4)设备分类机制,设备模型包括了对设备分类的机制,它在更高的功能层上描述了这些设备,并使得这些设备对用户空间可见,尤其是将命名设备的功能从内核层转移到了用户层,大大提高了设备管理的灵活性;
(5)对象生命周期的管理,设备模型实现一系列机制以及处理对象的生命周期,对象之间的关系以及这些对象在用户空间的表示简化了编程人员创建或者管理对象的工作.

2.sys文件系统

sys文件系统是一个类似于proc文件系统的特殊文件系统,用于将系统中的设备组织成层次结构,
并向用户程序提供详细的内核数据信息,也就是在用户态下可以通过对sys文件系统的信息的访问
来查看内核态的驱动或设备等信息,如图为sys文件系统的目录及子目录信息.

3.linux设备模型

linux设备驱动模型使用一系列抽象(面向对象思想中的类),提供统一的设备管理视图,
这些抽象包括:总线,类,设备和设备驱动.(1)总线BUS,它是CPU和一个或多个设备之间信息交互的通道,为了方便设备模型的抽象,所有的设备都应该连接到总
线上.
(2)分类CLASS,在linux设备模型中,CLASS的概念非常类似面向对象设计中的CLASS,它主要是集合具有相似功能或
属性的设备,这样就可以抽象出一套在多个设备中公用的数据结构或接口函数.因而从属于相同CLASS的设备的
驱动程序就不再需要重新定义这些公共的资源,直接从CLASS中继承即可.
(3)设备DEVICE,抽象系统中所有的硬件设备,描述它的名字,属性,从属的BUS,从属的CLASS等信息.
(4)设备驱动DEVICE DRIVER,linux设备模型用Driver抽象硬件设备的驱动程序,它包括设备的初始化,电源管理相关接
口的实现,linux内核中的驱动开发基本上都是围绕该抽象进行,也就是实现规定的接口函数.

4.linux设备模型中的核心对象KOBJECT

kobject结构体是对设备驱动模型下所有对象抽象出来的共有部分,它提供一些公共的服务,
比如对象的引用计数,维护对象的链表,对象的上锁,对用户空间的表示等,设备驱动模型中各种
对象其内部都会包含一个object,它的地位相当于面向对象思想中的总基类.

5.linux设备模型中的对象集合体KSET

kset是嵌入相同类型结构的kobject的集合,可以将其看做容器,可将所有相关的kobject对象聚集在一起,
比如全部的块设备就是一个kset.kset结构关心的是对象的聚集与集合,它与kobject之间的关系如图所示.

6.linux设备模型中的共同特性KTYPE

7.platform平台总线驱动模型

7.1 总述

为了解决驱动代码与设备信息耦合的问题,linux提出了platform bus,也就是平台总线的概念,
也就是使用虚拟总线将设备信息和驱动程序进行分离,也就是机制与策略分离的一种策略,平台
总线会维护两条链表,分别管理设备和驱动,当一个设备被注册到总线上的时候,总线会根据其名字
搜索对应的驱动,如果找到,就将设备信息导入驱动程序并执行驱动;当一个驱动被注册到平台总线
的时候,总线也会搜索设备,总是,平台总线负责将设备信息与驱动代码进行匹配,这样就可以做到
驱动与设备信息的分离,与传统的bus device driver机制相比,platform平台由内核进行统一管理,
在驱动中使用资源,提高了代码的安全性和可移植性.
当硬件部分的时序变了或者芯片替换了,我们只需要修改硬件的部分代码,还有一部分代码属于内核
的稳定部分,是不需要进行修改的,这就是一种通用的接口,因此,本讲将重点讲解platform模型.platform bus是一条虚拟总线,其中platform device是相应的设备,platform driver是相应的驱动.

7.2 platform device

7.3 platform driver

7.4 device driver

7.5 driver_private

7.6 设备与驱动匹配的过程

实现platform模型的过程就是总线对设备和驱动的匹配过程.
打个比方,就好比相亲,总线是红娘,设备是男方,驱动是女方,
红娘(总线)负责男方(设备)和女方(驱动)的撮合,过程如下:(1)男方(女方)找到红娘,说我来登记一下,看有没有合适的姑娘(汉子)—— 设备或驱动的注册;
(2)红娘这时候就需要看看有没有八字匹配的姑娘(汉子)——match函数进行匹配,基本匹配规则是看name是否相同;如果八字不合,就告诉男方(女方)没有合适的对象,先等着.—— 设备和驱动会等待,直到匹配成功;终于遇到八字匹配的了,那就结婚呗!接完婚,男方就向女方交代,我有多少存款,我的房子在哪,钱放在哪
等等(相对于交代struct resource *resource中的信息),女方说好啊,于是去房子里拿钱去给男方买菜啦,
给自己买衣服、化妆品、首饰啊等等,这个就相当于执行probe函数(匹配成功后驱动执行的第一个函数),
当然如果男的跟小三跑了(设备卸载),女方也不会继续待下去的,女方会执行remove函数将自己卸载.从代码角度上来实际看一下内核中是如何匹配设备和驱动的:
1.实例化struct bus_type,系统为总线定义了一个bus_type的platform_bus_type;
2.执行平台总线驱动注册函数,注册函数中会将相关的函数都挂上去;
3.设备与驱动匹配代码.设备驱动中引入platform这个概念隔离了BSP和驱动,在BSP中定义platform和设备使用的资源,设备具体
匹配的信息,而在驱动中只需要通过API去获取资源或数据,做到了把相关代码和驱动代码的分离,使得驱动
具有更好的扩展性和跨平台性.

8.参考资料和思考问题

【linux内核分析与应用-陈莉君】设备驱动模型相关推荐

  1. 【linux内核分析与应用-陈莉君】动手实践-编写一个文件系统

    目录  0.一些链接 1.一些数据结构 2.编写一个文件系统的过程 3.用到的一些数据结构及函数的原型 3.1 struct file_system_type-文件系统类型 3.2 register_ ...

  2. 【Linux内核分析与应用-陈莉君老师】动手实践-把虚拟内存转换成物理地址

    目录 1.地址转换 2.Linux4级页表 3.64位线性地址 4.实际观察寻页的过程  1.地址转换 进程中不直接对物理地址直接操作,CPU在运行时指定的地址需要经过内存管理单元MMU 转换后才能访 ...

  3. 【linux内核分析与应用-陈莉君】Linux内存管理机制

    目录                   1.内存层次 2.虚拟内存实现机制 3.进程的虚拟地址空间和地址空间布局 4.如何用数据结构描述进程的用户空间 5.mm_struct 6.vm_area_s ...

  4. 【linux内核分析与应用-陈莉君】进程的一生

    目录 1.进程与线程 2.TASK_STRUCT结构的统一性与多样性 3.进程API的实现 4.do_fork()的代码流程 5.进程的生命周期 1.进程与线程 2.TASK_STRUCT结构的统一性 ...

  5. linux 内核驱动模型,linux设备驱动模型架构分析 一

    linux设备驱动模型架构分析 一 发布时间:2018-07-04 15:14, 浏览次数:584 , 标签: linux 概述 LDD3中说:"Linux内核需要一个对系统结构的一般性描述 ...

  6. Linux SPI总线设备驱动模型详解

    随着技术不断进步,系统的拓扑结构越来越复杂,对热插拔.跨平台移植性的要求越来越高,早期的内核难以满足这些要求,从linux2.6内核开始,引入了总线设备驱动模型.其实在linux2.4总线的概念就已经 ...

  7. linux驱动 设备驱动模型

    前言 在早期的Liux内核中并没有为设备驱动提供统一的设备模型.随着内核的不断扩大及系统更加复杂,编写一个驱动程序越来越困难,所以在Liux2.6内核中添加了一个统一的设备模型.这样,写设备驱动程序就 ...

  8. linux一个spi总线挂多个设备,Linux SPI总线设备驱动模型详解

    随着技术不断进步,系统的拓扑结构越来越复杂,对热插拔.跨平台移植性的要求越来越高,早期的内核难以满足这些要求,从linux2.6内核开始,引入了总线设备驱动模型.其实在linux2.4总线的概念就已经 ...

  9. char添加一个字符_LINUX字符设备驱动模型分析(起始篇)

    在前面几个模块的介绍中,我们主要以vfs为起始,完成了sysfs.设备-总线-驱动模型.platform设备驱动模型.i2c设备驱动模型.spi设备驱动模型的分析.在对这些模块进行分析的时候,我们或多 ...

  10. [国嵌攻略][125][总线设备驱动模型]

    总线模型 随着技术的不断进步,系统的拓扑结构也越来越复杂,对热插拔,跨平台移植性的要求越来越高,2.4内核已经难以满足这些需求.为了适应这种形势的需要,从Linux2.6内核开始提供了全新的设备驱动模 ...

最新文章

  1. css3之border-radius理解
  2. node 判断文件夹是否存在
  3. Excel常见错误信息
  4. Map的putAll方法踩坑实记(对象深拷贝浅拷贝)
  5. C/C++中的声明与定义
  6. Qt中视图的缩放对应缩略图中矩形框的缩放
  7. 软件工程 交互设计 信息架构设计是什么
  8. kubernetes NodeIP、PodIP、ClusterIP的区别和联系
  9. 计算机感染病毒正确处理方法,【安徽新华】计算机感染了病毒解决方法
  10. ultraiso刻录linux系统盘,使用UltraISO在Windows 10下刻录Ubuntu 18.04.2 U盘的方法
  11. Unity 网络请求
  12. 人人都能成为闪电网络节点:第7章管理lnd
  13. 湖南c语言程序设计,C语言程序设计
  14. Unity Application Block 1.2 学习笔记(zhuan)
  15. 我的世界刷铁机java版_《我的世界》刷铁机存档
  16. 牛客网前端刷题(二)
  17. 心脏病最新研究进展2021年4月
  18. linux-mariadb
  19. Smart210学习记录------块设备
  20. CAD,怎么修改图纸的比例尺

热门文章

  1. 关于windows自带的两种远程访问方式
  2. 小白学习java第11天多态抽象类接口
  3. 修复SQL2000数据库一致性错误的语句
  4. 中企海外周报 | 传祺GM6将亮相北美车展,锦江都城发力布局全球
  5. python 网络编程 day02
  6. import oracle utility_Oracle DBMS_UTILITY 用法例子
  7. 微信小程序接收后台返回的文件流并打开
  8. dede源码详细分析之--全局变量覆盖漏洞的防御
  9. Boost:宏BOOST_LOG_TRIVIAL的测试
  10. R语言(6)-数据结构之矩阵(matrices)与数组(array)