Linux设备模型与Sysfs文件系统.doc

Linux设备模型与Sysfs文件系统Linux设备模型的目的是:为内核建立起一个统一的设备模型,从而有一个对系统结构的一般性抽象描述。现在内核使用设备模型支持多种不同的任务:电源管理和系统关机 :这些需要对系统结构的理解,设备模型使OS能以正确顺序遍历系统硬件。与用户空间的通讯 :sysfs 虚拟文件系统的实现与设备模型的紧密相关, 并向外界展示它所表述的结构。向用户空间提供系统信息、改变操作参数的接口正越来越多地通过 sysfs , 也就是设备模型来完成。热插拔设备 :越来越多的设备可以被动态的热插拔了,也就是说,外围设备可根据用户需求来安装和卸载。设备类型:设备模型包括了将设备分类的机制,在一个更高的功能层上描述这些设备, 并使设备对用户空间可见。对象生命周期:设备模型的实现需要创建一系列机制来处理对象的生命周期、对象间的关系和对象在用户空间的表示。Linux 设备模型是一个复杂的数据结构。但对模型的大部分来说, Linux 设备模型代码会处理好这些关系, 而不是把他们强加于驱动作者。模型隐藏于交互的背后,与设备模型的直接交互通常由总线级的逻辑和其他的内核子系统处理。所以许多驱动作者可完全忽略设备模型, 并相信设备模型能处理好他所负责的事。1. Sysfs文件系统Sysfs文件系统是一个类似于proc文件系统的特殊文件系统,用于将系统中的设备组织成层次结构,并向用户模式程序提供详细的内核数据结构信息。如上图所示其顶层目录主要有:Block目录:包含所有的块设备Devices目录:包含系统所有的设备,并根据设备挂接的总线类型组织成层次结构Bus目录:包含系统中所有的总线类型Drivers目录:包括内核中所有已注册的设备驱动程序Class目录:系统中的设备类型(如网卡设备,声卡设备等)2. 内核对象机制关键数据结构2.1 kobject内核对象kobject是一种数据结构,定义在 。 struct kobject {????const char????* k_name;/*kobject 的名字数组(sysfs 入口使用的名字)指针;如果名字数组大小小于KOBJ_NAME_LEN,它指向本数组的name,否则指向另外分???的一个名字数组空间 */????char????????????name[KOBJ_NAME_LEN];/*kobject 的名字数组,若名字数组大小不小于KOBJ_NAME_LEN,只储存前KOBJ_NAME_LEN个字符*/????struct kref????????kref;/*kobject 的引用计数*/????struct list_head????entry;/*kobject 之间的双向链表,与所属的kset形成环形链表*/????struct kobject????????* parent;/*在sysfs分层结构中定位对象,指向上一级kset中的struct kobject?kobj*/????struct kset????????* kset;/*指向所属的kset*/????struct kobj_type????* ktype;/*负责对该kobject类型进行跟踪的struct kobj_type的指针*/????struct dentry????????* dentry;/*sysfs文件系统中与该对象对应的文件节点路径指针*/????wait_queue_head_t????poll;/*等待队列头*/};kobject 是组成设备模型的基本结构,初始它只被作为一个简单的引用计数, 但随时间的推移,其任务越来越多。现在kobject 所处理的任务和支持代码包括:对象的引用计数 :跟踪对象生命周期的一种方法是使用引用计数。当没有内核代码持有该对象的引用时, 该对象将结束自己的有效生命期并可被删除。sysfs 表述:在 sysfs 中出现的每个对象都对应一个 kobject, 它和内核交互来创建它的可见表述。数据结构关联:整体来看, 设备模型是一个极端复杂的数据结构,通过其间的大量链接而构成一个多层次的体系结构。kobject 实现了该结构并将其聚合在一起。热插拔事件处理 :kobject 子系统将产生的热插拔事件通知用户空间。一个kobject对自身并不感兴趣,它存在的意义在于把高级对象连接到设备模型上。因此内核代码很少(甚至不知道)创建一个单独的 kobject;而kobject 被用来控制对大型域(domain)相关对象的访问,所以kobject 被嵌入到其他结构中。kobject 可被看作一个最顶层的基类,其他类都它的派生产物。 kobject

linux文件系统与sysfs,Linux设备模型与Sysfs文件系统.doc相关推荐

  1. Linux那些事儿之我是Sysfs(3)设备模型上层容器

    §1 bus 系统中总线由struct bus_type描述,定义为: include/linux/device.h struct bus_type { const char *name;总线类型的名 ...

  2. Linux-2.6设备模型与sysfs文件系统

    kobject对象: 它是设备模型的基本结构,对应于sysfs文件系统中的一个目录,它是一个结构体,不过在Linux中引入了面向对象的思想,从某些角度,也可以看成是一个类.kobject对象通常被嵌入 ...

  3. Linux 2.6内核的设备模型

    Linux 2.6 内核的一个重要特色是提供了统一的内核设备模型.随着技术的不断进步,系统的拓扑结构越来越复杂,对智能电源管理.热插拔以及 plug and play的支持要求也越来越高,2.4内核已 ...

  4. Linux 文件系统与设备文件系统 (二)—— sysfs 文件系统与Linux设备模型

    提到 sysfs 文件系统 ,必须先需要了解的是Linux设备模型,什么是Linux设备模型呢? 一.Linux 设备模型 1.设备模型概述 从2.6版本开始,Linux开发团队便为内核建立起一个统一 ...

  5. Linux设备模型剖析系列之二(uevent、sysfs)

    CSDN链接: Linux设备模型剖析系列一(基本概念.kobject.kset.kobj_type) Linux设备模型剖析系列之二(uevent.sysfs) Linux设备模型剖析系列之三(de ...

  6. Linux通常把设备对象抽象为,linux 设备模型(1)

    设备模型(一) 一.概述 从2.6内核引入了sysfs文件系统,与proc, devfs, devpty同类别,属于虚拟的文件系统.目的是展示设备驱动模型中各组件的层次关系,第一层目录:block, ...

  7. Linux设备模型(4)_sysfs

    转载于: http://www.wowotech.net/linux_kenrel/dm_sysfs.html 1. 前言 sysfs是一个基于RAM的文件系统,它和Kobject一起,可以将Kern ...

  8. linux设备驱动程序架构的研究,Linux设备驱动程序学习(12)-Linux设备模型(底层原理简介)...

    Linux设备驱动程序学习(12) -Linux设备模型(底层原理简介) 以<LDD3>的说法:Linux设备模型这部分内容可以认为是高级教材,对于多数程序作者来说是不必要的.但是我个人认 ...

  9. linux设备模型:devtmpfs虚拟文件系统分析

    devtmpfs是一个设备文件系统,它将其所有文件保存在虚拟内存中. devtmpfs中的所有内容都是临时的,因为不会在您的硬盘驱动器上创建任何文件.如果卸载devtmpfs实例,其中存储的所有内容都 ...

  10. linux的层次结构模型,linux 设备模型(1)

    设备模型(一) 一.概述 从2.6内核引入了sysfs文件系统,与proc, devfs, devpty同类别,属于虚拟的文件系统.目的是展示设备驱动模型中各组件的层次关系,第一层目录:block, ...

最新文章

  1. 在一台电脑上使用两个github账号
  2. python 通过title判断_利用Python模拟GitHub登录
  3. class多项式(链表实现)
  4. 在某公司用到一些shell
  5. 帆软报表(finereport)JS实现cpt中详细单元格刷新
  6. sdut 2878 圆圈
  7. 喜马拉雅下载文件名批量修改
  8. 黑塞矩阵 Hessian Matrix
  9. Blast2GO使用方法详解(命令界面)
  10. Java POI输出excel单元格画斜线
  11. dell服务器装系统键盘鼠标动不了,13G 服务器操作系统安装常见问题解答 (FAQ)
  12. 【读书笔记】《引爆点》巴尔科姆•格拉德威尔
  13. 【实时渲染】RTR4 简要问答版
  14. 「每周译Go」Windows 系统的Gopher们久等了!!
  15. kafka面试题知识点整理
  16. java web.xml taglib_web.xml配置文件 taglib
  17. Ubuntu16.04开机后桌面只有壁纸!!!
  18. 物联网(java版本)臻识摄像头+威视显示屏
  19. 呼叫中心系统接入方案
  20. Android 如何实现灰白化换皮肤效果?

热门文章

  1. 使用基于轮询的SQL数据缓存依赖
  2. 郁闷!我的Gmail邮箱的问题!
  3. redis详解_java 从零开始手写 redis(14)redis渐进式rehash详解
  4. 项不会计算为接受 0 个参数的函数_玩转excel函数:详解四种计数函数,从基础到提高...
  5. jsp页面ajax用法,在jsp中使用jquery的ajax
  6. SSH与FTP之间的关系与区别
  7. html ajax请求乱码,关于Ajax请求中传输中文乱码问题的解决方案
  8. 十大排序算法——插入排序法(C语言)
  9. 机器学习算法-异常值检测(outlier),30 亿个雅虎账户被黑客入侵?
  10. java正则过滤小括号,java正则表达式获取大括号小括号内容并判断数字和小数亲测可用...