linux / dev、devfs、udev 和 sysfs 关系

 Linux 下对设备的管理方式主要有 /dev sysfs 两种,前者是将设备注册为设备节点放入 /dev 目录下,而后者是在 linux2.6 内核后引入的新的文件系统。

一、/dev 方式

关于 /dev 的管理方式,也经历了几代,下面介绍 /dev 管理方式的发展:

1、静态 /dev 文件

    在 Linux 中,老的设备管理方式是将设备通过设备节点放入 /dev 目录下,每个设备节点是 /dev根目录下的一个文件,那么。如何区分这些设备节点,为了对这些设备节点进行命名,Linux 通过主次设备号来指定不同的设备节点。

    有了主次设备号,如何指定主次设备号成了一个开发人员必须面临的问题。如果开发人员不打算将设备驱动程序与外界共享,那么指定什么号码都可以,只要她与当前设备内核使用的其他主设备不冲突即可。然而,如果开发人员想让驱动程序与外界共享(大多数 Linux 开发人员常常采用这一方法),那么这样随意指定设备号就不行了,因为用户和其他开发人员并不知道哪个设备号对应于改设备,因此开发人员必须联系 linux 内核开发人员分配一个真实主设备号,这样在整个 linux 世界中,只有这个特定设备号才会被关联到那个特定的设备号(即每一个设备对应一个唯一的设备号),而这个设备号也被汇入 Linux 的发行版本的 /dev 目录中。

基于这样的处理方式,就会产生以下问题。

  • 由于不断涌入的新设备,设备号会慢慢耗尽。
  • 这样的申请分配方式对于设备的管理比较麻烦。
  • 由于“正式”设备好不断汇入 /dev 目录。哪怕该设备在某些硬件上并不存在,这就导致很多设备号指向并存在的一些设备,在后期的 /dev 目录下甚至有上万个设备号。

2、Devfs

    linux kernel 2.4 版本后引入 devfs,devfs 是一个虚拟的文件系统,相比与静态的 /dev 文件主要有两点改进:

  • 允许使用自定的设备名称来注册设备节点,同时它兼容老的设备号,例如我们注册一个设备节点 /dev/mydev 。
  • 所有的设备都由内核在系统启动时期创建并注册到 /dev 目录下,这就意味这 /dev 不在被成百个“无用”的设备节点充斥。

3、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 其他问题是:

  • devfs 代码不灵活,只显示存在的设备列表,而有时候我们希望看到暂时不存在的设备名字
  • major、minor 快被分配光了,我们需要考虑动态分配方法,而 devfs 不能支持。

而当设备较多的时候,不能动态分配节点给设备注册造成很大的麻烦,需要不停尝试不同的设备节点以检查是否冲突。

二、sysfs

    sysfs 是 Linux2.6 引入的一种虚拟文件系统,挂载于 /sys 目录下,这个文件系统把实际链接到系统上的设备,总线及其对应的驱动程序组织成分级的文件。从而将设备的层次结构映射到用户空间中,用户空间可以通过修改 sysfs 中文件属性来修改设备属性值,从而与内核设备交互。

三、udev 和 sysfs 的关系

sysfs 是对 devfs 改进,udev 也是对 devfs 的改进。

两者之间的区别与联系为:

实际上用户的工具 udev 就是利用 sysfs 提供的信息来实现的:

udev 会根据 sysfs 里面的设备信息创建 /dev 目录下的相应设备节点。

转载:dev devfs udev sysfs及关系 - 流浪的Coder - 博客园

(SAW:Game Over!)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值