1 设备模型概述

从2.6版本开始,Linux开发团队便为内核建立起一个统一的设备模型。在以前的内核中没有独立的数据结构用来让内核获得系统整体配合的信息。尽管缺乏这些信息,在多数情况下内核还是能正常工作的。然而,随着拓扑结构越来越复杂,以及要支持诸如电源管理等新特性的需求,向新版本的内核明确提出了这样的要求:需要有一个对系统结构的一般性抽象描述,即设备模型。

目的

I     设备、驱动、总线等彼此之间关系错综复杂。如果想让内核运行流畅,那就必须为每个模块编码实现这些功能。如此一来,内核将变得非常臃肿、冗余。而设备模型的理念即是将这些代码抽象成各模块共用的框架,这样不但代码简洁了,也可让设备驱动开发者摆脱这本让人头痛但又必不可少的一劫,将有限的精力放于设备差异性的实现。

II    设备模型用类的思想将具有相似功能的设备放到一起管理,并将相似部分萃取出来,使用一份代码实现。从而使结构更加清晰,简洁。

III   动态分配主从设备号,有效解决设备号的不足。设备模型实现了只有设备在位时才为其分配主从设备号,这与之前版本为每个设备分配一个主从设备号不同,使得有限的资源得到合理利用。

IV   设备模型提供sysfs文件系统,以文件的方式让本是抽象复杂而又无法捉摸的结构清晰可视起来。同时也给用户空间程序配置处于内核空间的设备驱动提供了一个友善的通道。

V   程序具有随意性,同一个功能,不同的人实现的方法和风格各不相同,设备驱动亦是如此。大量的设备亦若实现方法流程均不相同,对以后的管理、重构将是难以想象的工作量。设备模型恰是提供了一个模板,一个被证明过的最优的思路和流程,这减少了开发者设计过程中不必要的错误,也给以后的维护扫除了障碍。

任务

与用户空间通信

sysfs的实现与设备模型密切相关,并且向外界展示了它所表述的结构。向用户空间所提供的系统信息,以及改变操作参数的接口,将越来越多地通过sysfs实现,也就是说,通过设备模型实现。

热插拔设备

越来越多的计算机设备可被动态的热插拔了,也就是说,外围设备可根据用户的需要安装与卸载。内核中的热插拔机制可以处理热插拔设备,特别是能够与用户空间进行关于热插拔设备的通信,而这种机制也是通过设备模型管理的。

设备类型

系统中的许多部分对设备如何连接的信息并不感兴趣,但是它们需要知道哪些类型的设备是可以使用的。设备模型包括了将设备分类的机制,它会在更高的功能层上描述这些设备,并使得这些设备对用户空间可见。

对象生命周期

上述许多功能,包括热插拔支持和sysfs,使得内核中创建和管理对象的工作更为复杂。设备模型的实现需要创建一系列机制以处理对象的生命周期、对象之间的关系,以及这些对象在用户空间中的表示。

电源管理和系统关机

完成这些工作需要一些 对系统结构的理解。比如一个USB宿主适配器,在处理完所有与其连接的设备前是不能被关闭的。设备模型使得操作系统能够以正确的顺序遍历系统硬件。

图例

我们以USB鼠标为例,初识设备模型。如图1-1(来自LDD3)所示。图中以简化方式显示了与USB鼠标相关联的设备模型的一小部分。在图的中央,可以看到核心“Devices”树的一部分,它表明了鼠标是如何连接到系统的。“Buses”树跟踪了连接到每个总线的设备,在“Classes”下的子树更关心设备所提供的功能,而不是设备是如何连接的。

图1-1:设备模型的一小片段

Linux2.6.29设备模型分析-概述相关推荐

  1. Linux设备模型分析之kobject(基于3.10.1内核)

    一.kobject结构定义 kobject是Linux设备模型的最底层数据结构,它代表一个内核对象. kobject结构体定义在include/linux/kobject.h文件中: [cpp] vi ...

  2. Linux设备模型分析之kobject

    一.kobject应用举例 Linux设备模型最基本的组成元素是kobject,我们先来看一个kobject的应用例子,该程序在Ubuntu 10.10, 2.6.32-38-generic-pae内 ...

  3. Linux设备模型分析之kset

    上一篇博客我们分析了Linux设备模型中kobject的注册和使用,在这一篇文章中,我们来看一下kset的用法. 首先我们看一个使用kset的例子,代码如下: [cpp] view plaincopy ...

  4. linux kset subsystem 3.10内核,Linux设备模型分析之kset(基于3.10.1内核)

    作者:刘昊昱 内核版本:3.10.1 一.kset结构定义 kset结构体定义在include/linux/kobject.h文件中,其内容如下: 142/** 143 * struct kset - ...

  5. Linux设备模型分析之kset(基于3.10.1内核)

    一.kset结构定义 kset结构体定义在include/linux/kobject.h文件中,其内容如下: [cpp] view plaincopy 142/** 143 * struct kset ...

  6. linux设备模型之kset/kobj/ktype分析

    1. 概述 今天来聊一下Linux设备模型的基石:kset/kobject/ktype. sysfs文件系统提供了一种用户与内核数据结构进行交互的方式,可以通过mount -t sysfs sysfs ...

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

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

  8. clip许可证设备id与绑定设备不匹配_LINUX SPI通用字符设备模型介绍(SPI模块分析结束篇)...

    在前面几篇文章我们分析了SPI驱动框架模型.SPI总线.SPI MASTER.SPI DEVICE.SPI通信接口等内容,本篇是SPI总线的最后一篇,主要介绍SPI通用字符设备. spi通用字符设备说 ...

  9. linux 内核模型,The Linux Kernel Device Model - Overview -- Linux 内核设备模型概述

    --------------------------------------------------------------------------------------------------- ...

最新文章

  1. 【2020】清华大学《高级机器学习》课件和专家特邀报告(附pdf下载)
  2. 创建并运行HelloWorld Java项目和类
  3. java诡异的String.split()方法
  4. GDB调试——常用命令
  5. 挖矿病毒解决实例(隐藏进程,文章较好)(入侵)
  6. 支付宝也跟上了!免费办理ETC 还提供设备包邮服务
  7. VC++使用ADO开发ACCESS数据库
  8. eclipse svn 忽略 target/.project /.classpath /.settings等 目录
  9. 我的MYSQL学习心得(九) 索引
  10. 绘制grib2格式大气数据(windows下 GrADS wgrib2 g2ctl perl)
  11. 官网下载storage manager方法
  12. docker搭建linux集群,搭建mpi环境,并使用MTT benchmark测试集群性能
  13. u盘数据丢失了怎么恢复?u盘数据恢复,2个方案完成
  14. 一个 将一个无效参数传递给了将无效参数视为严重错误的函数 及写入位置时发生访问冲突的问题的解决
  15. Android系统的VTS测试套件介绍
  16. Mask RCNN -- Mask Scoring R-CNN
  17. 独上高楼望尽天涯路——以博客记录分享学习成长
  18. 微信小程序未读消息右上角红点数字显示
  19. 伊能静晒姐姐旧照 五官精致获赞基因好(图)
  20. Mac分屏小技巧让你使用更加便捷

热门文章

  1. JS 服务器推送技术 WebSocket 入门指北
  2. Java实现牛牛的水杯
  3. 分而治之 (25 分)
  4. 关于含税单价和不含税单价的关系记录
  5. Fiddler抓包软件[一]下载与安装
  6. Discarding record on action DISCARD on error 1403
  7. ACPC2017游记
  8. 现在流行的网络直播都需要什么设备?
  9. gamemaker学习笔记:导入龙骨动画
  10. canvas图片转素描