博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dev devfs udev sysfs及关系
阅读量:5917 次
发布时间:2019-06-19

本文共 1935 字,大约阅读时间需要 6 分钟。

    Linux 下对
设备的管理方式主要有
/dev和sysfs两种,前者是将设备注册为设备节点放入/dev目录下,而后者是在linux2.6内核后引入的新的文件系统。
/dev方式
关于/dev的管理方式,也经历了几代,下面介绍/dev管理方式的发展:
静态/dev文件:   
    在Linux中,
老的设备管理方式是将设备通过
设备节点放入/dev目录下,每个设备节点是/dev根目录下的一个文件,那么。如何区分这些设备节点,为了对这些设备节点进行命名,Linux通过
主次设备号来指定不同的设备节点。
    有了主次设备号,如何指定主次设备号成了一个开发人员必须面临的问题。如果开发人员不打算将设备驱动程序与外界共享,那么指定什么号码都可以,只要她与当前设备内核使用的其他主设备不冲突即可。然而,如果开发人员想让驱动程序与外界共享(大多数Linux开发人员常常采用这一方法),那么这样随意指定设备号进行了,因为用户和其他开发人员并不知道哪个设备号对应于改设备,因此开发人员必须联系linux内核开发人员分配一个真实主设备好,这样在整个linux世界中,只有这个特定设备号才会被关联到那个特定的设备号(即每一个设备对应一个唯一的设备号),而这个设备号也被汇入Linux的发行版本的/dev目录中。
基于这样的处理方式,就会产生以下问题。
   
由于不断涌入的新设备,设备号会慢慢耗尽。
    
这样的申请分配方式对于设备的管理比较麻烦。
   
由于“正式”设备好不断汇入/dev目录。哪怕该设备在某些硬件上并不存在,这就导致很多设备号指向并存在的一些设备,在后期的/dev目录下甚至有上万个设备号。
Devfs
    linux kernel 2.4版本后引入devfs,devfs是一个虚拟的为念系统个,相比与静态的/dev文件主要有两点改进:
   
允许使用自定的设备名称来注册设备节点,同时它兼容老的设备号,例如我们注册一个设备节点/dev/mydev
   
所有的设备都由内核在系统启动时期创建并注册到/dev目录下,这就意味这/dev不在被成百个“无用”的设备节点充斥。
Udev
    Devfs解决静态/dev管理的很多问题,但是它任然存在一定缺陷,基于此,在linux kernel 2.6.x版本后,Linux引入了udev.从而对devfs进行改进。
udev是一个对/dev下设备节点进行动态管理用户空间程序她通过自身的守护进程自定义的一些列规则来处理设备的加载,移除和热插拔等活动
 
相比与devfs ,它的主要改进如下:
传统的devfs命名不够灵活,设备名称不可预知,而udev支持设备的固定命名。
    
例如如果现在有两个硬盘,在devfs 中,他们们对应的设备节点分别是/dev/sda 和/dev/sdb ,那么我么就不知道硬盘对应于sda哪个又是sdb ,而udev 提供了存储设备的固定命名,任何硬盘根据其唯一的文件系统id ,磁盘名称及硬件链接的物理位置来进行识别。
设备在热插拔的时候,用户态程序应该有办法得到通知。
    udev 运行在用户空间中,设备在热插拔时候,会通过netlink(
linux 中内核空间和用户空间进程之间通信的方式)通知udev ,因此用户空间程序可以得到通知了,同时Udev运行在用户空间还可以减少内存的使用。
devfs代码不灵活,只显示存在的设备列表,而有时候我们希望看到暂时不存在的设备名字
major,minor 快被分配光了,我们需要考虑动态分配方法,而devfs不能支持。
    而当设备较多的时候,不能动态分配节点给设备注册造成很大的麻烦,需要不停尝试不同的设备节点以检查是否冲突。
sysfs
    sysfs是Linux2.6引入的一种虚拟文件系统,挂载于/sys目录下,这个文件系统吧实际链接到系统上的设备,总线及其对应的驱动程序组织成分级的文件。从而将设备的层次结构映射到用户空间中,用户空间可以通过修改sysfs 中文件属性来修改设备属性值,从而与内核设备交互。
udev和sysfs 的关系
    sysfs是对devfs改进,udev也是对devfs的改进。两者之间的区别与联系为:实际上用户的工具udev就是利用sysfs提供的信息来实现的:udev会根据sysfs里面的设备信息创建/dev目录下的相应设备节点。
 
 

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

 
 
 
 

   

转载于:https://www.cnblogs.com/big-devil/p/7625878.html

你可能感兴趣的文章
用户访问网页的流程原理
查看>>
各种链接
查看>>
我的友情链接
查看>>
《Spring实战》第四版读书笔记 第一章 Spring之旅
查看>>
那些年,一起学的Java 2-4
查看>>
RedHat已更改其开源许可规则
查看>>
redis集群搭建
查看>>
LNMP架构 (Ⅱ)——nginx相关配置、nginx代理
查看>>
神级python程序员只需要一个公众号,再也不会错过重要资讯
查看>>
双十一流量洪峰 支撑阿里核心业务的云数据库揭秘
查看>>
OSChina 周一乱弹 ——程序员跟产品经理撕逼必须掌握的套路
查看>>
Linux系统启动流程详解
查看>>
Magento(CE1.X)自带模块解析五
查看>>
Factory Method模式 (一)
查看>>
代码整洁之道-第9章-单元测试-读书笔记
查看>>
C++ ssd5 12 optional exercise2
查看>>
如何调用带返回值类型的函数
查看>>
linux网络编程涉及的函数
查看>>
数据表的相关操作
查看>>
POJ 2594 Treasure Exploration(最小可相交路径覆盖)题解
查看>>