设备驱动模型与sysfs
Linux在2.6版本引入了设备驱动模型,设备驱动模型负责统一实现和维护一些特性,诸如:热插拔、对象生命周期、用户空间和驱动空间的交互等基础设施

1.设备驱动模型基本概念
设备驱动模型主要包含:类(class)、总线(bus)、设备(device)、驱动(driver),它们的本质都是内核中的几种数据结构的“实例”

类的本质是class结构体类型,各种不同的类其实就是class的各种实例
总线的本质是bus_type结构体类型,各种不同的总线其实就是bus_type的各种实例
设备的本质是device结构体类型,各种不同的设备其实就是device的各种实例
驱动的本质是device_driver结构体类型,各种不同的驱动其实就是device_driver的各种实例
2.sysfs基本概念
sysfs其实就是/sys目录,其主要作用就是:展示设备驱动模型中各组件的层次关系,并将各组件的本体——内核中的数据结构以文件形式呈现,方便用户层查看及操作

3./sys目录结构与设备驱动模型
/sys目录结构很好的展示了驱动设备模型,如图:

注意:同一个设备可能在/sys中存在多个设备文件,比如一颗led的设备文件可能在/sys/bus/platform/devices/led1,同时还有一个在/sys/class/leds/led1。虽然他们都是同一颗led的设备文件,但是他们的来源、机制、原理都是不同的,不能混为一谈
4.各组件的特性与联系
kobject:设备驱动模型各实例的最基本单元,提供一些公用型服务如: 提供该实例在sysfs中的操作方法(show和store);提供在sysfs中以文件形式存在的属性,其实就是应用接口;提供各个实例的层次架构,让sysfs中弄出目录结构。设备驱动模型中每个实例内部都会包含一个kobject
总线、设备、驱动,这三者有着密切的联系。在内核中,设备和驱动是分开注册的,注册 设备的时候,并不需要驱动已经存在,而驱动被注册的时候,也不需要对应的设备已经被注册。而总线就是连接设备和驱动之间的纽带,如图:

5.为什么要让总线匹配驱动和设备?
这么做是为了让算法和数据分离,驱动源码中不携带数据,只负责算法(对硬件的操作方法);而设备则负责携带硬件信息。这样最大程度保持驱动的独立性和适应性,并且可以实现一个驱动对应多个设备

设备驱动模型与sysfs相关推荐

  1. 设备驱动,字符设备驱动、(总线)设备驱动模型、sysfs文件系统、平台设备驱动

    以下内容转载于微信公众号:嵌入式企鹅圈.如有侵权,请告知删除. 学习Linux设备驱动开发的过程中自然会遇到字符设备驱动.平台设备驱动.设备驱动模型和sysfs等相关概念和技术. 对于初学者来说会非常 ...

  2. Linux设备驱动模型一 sysfs

    Linux设备驱动模型一 sysfs 1 Linux设备模型 Linux 2.5的内核引入了一种新的设备模型,目的是对计算机上的所有设备进行统一的管理. 它包含以下基础结构: 类型 说明 设备Devi ...

  3. 字符设备驱动、平台设备驱动、设备驱动模型、sysfs的比较和关联

    参考原文:https://www.kancloud.cn/yueqian_scut/emlinux/106829 对原文笔误地方做了修改.重新排版 目录 字符设备驱动.平台设备驱动.设备驱动模型.sy ...

  4. Linux中kobject的作用,Linux设备驱动模型-- 数据结构Kset/KObject

    前言 Kset和kobject是Linux设备驱动模型中的核心数据结构,其主要作用是将系统中的设备抽象出来,以树状结构组织,方便系统统一管理. 而这个统一管理的地方,就是sysfs,先放一张示例图,阐 ...

  5. linux 统一设备模型 pci,Linux设备驱动模型摘抄

    Linux设备驱动模型摘抄Linux设备驱动模型摘抄Linux设备驱动模型摘抄Linux设备驱动模型摘抄Linux设备驱动模型摘抄 Linux设备驱动模型摘抄(1) Linux统一设备模型 简介 Li ...

  6. linux内核组件分析之--设备驱动模型之bus

    前面我们分析了设备驱动模型中的device和driver,device和driver本来是不相关的东西,只因为bus的存在,才被联系到了一起.本节就来看看设备驱动模型中起枢纽作用的bus.本节的头文件 ...

  7. linux内核部件分析之——设备驱动模型之class

    前面看过了设备驱动模型中的bus.device.driver,这三种都是有迹可循的.其中bus代表实际的总线,device代表实际的设备和接口,而driver则对应存在的驱动.但本节要介绍的class ...

  8. 设备驱动模型之device-driver

    前面我们分析了device.driver.bus三种类型,主要是三者的注册与注销,在sysfs中的目录与属性文件创建等内容.本节就来详细分析下,在设备注册到总线上时,总线是如何为其寻找对应的驱动的:在 ...

  9. linux i2c adapter 增加设备_LINUX设备驱动模型分析之四 设备模块相关(DEVICE)接口分析...

    本系列前几篇文章链接如下: <LINUX设备驱动模型分析之一 总体概念说明> <LINUX设备驱动模型分析之二 总线(BUS)接口分析> <LINUX设备驱动模型分析之三 ...

最新文章

  1. 通过Navicat for MySQL远程连接的时候报错mysql 1130的解决方法
  2. java读取本地文件下载_java 读取本地的json文件
  3. redis有几种数据类型
  4. 八. 输入输出(IO)操作3.面向字符的输出流
  5. 全球及中国天然气市场产销规模及十四五投资价值分析报告2021年版
  6. 【NLP】竞赛中的文本相似性!
  7. python中add_Python add()函数是如何使用呢?
  8. python花萼长度表_python描述性统计实践
  9. VS2013+VSVIM
  10. pkcs1转pkcs8 php,openssl RSA密钥格式PKCS1和PKCS8相互转换
  11. 生信宝典被分享最多的15篇文章
  12. 安装node.js,CoffeeScript,Express.js,mysql,jade
  13. Spring Boot 之注解@Component @ConfigurationProperties(prefix = sms)
  14. 教你给视频画面打马赛克
  15. java调用webservice接口 几种方法
  16. html egg mac os 10.7,10.7、10.8 MAC OS原版通用安装教程
  17. 小米10周年发布会后,我路转粉了!
  18. origin画图---学习时遇到的画图记录
  19. c语言iota怎么用,IOTA(埃欧塔)钱包使用教程
  20. 如何下载沪深300历史数据

热门文章

  1. phinx数据库脚本迁移工具
  2. 京东金融创新”ABS云平台” 大数据提升直接融资效率
  3. LSTM网络(Long Short-Term Memory )
  4. webkit内核的浏览器
  5. myeclipse/eclipse方法和类的自动注解
  6. MySQL 死锁专题问题处理
  7. c++11新特性的使用---可变模板参数、type_traits、function综合使用
  8. python匿名函数就是没有名字的函数_python 之 匿名函数
  9. 向上造型和向下造型_动漫美少年漫画造型-仰视、俯视、情感表现
  10. java后台返回html_SpringMvc返回html页面字符串