加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

udev原理分析

发布时间:2020-12-15 18:49:59 所属栏目:百科 来源:网络整理
导读:转自 http://www.turbolinux.com.cn/turbo/wiki/doku.php?id=system:udev%E5%8E%9F%E7%90%86%E5%88%86%E6%9E%90 udev原理分析 一.udev简介 在linux系统中,/dev目录用来保存设备文件的.每个文件指向一个系统设备.用户的程序可以通过使用这些设备文件,对真实的

转自 http://www.turbolinux.com.cn/turbo/wiki/doku.php?id=system:udev%E5%8E%9F%E7%90%86%E5%88%86%E6%9E%90

udev原理分析


一.udev简介

在linux系统中,/dev目录用来保存设备文件的.每个文件指向一个系统设备.用户的程序可以通过使用这些设备文件,对真实的硬件的设备进行操作.如: hda是第1个IDE硬盘,sda是第1个SCSI硬盘.?
在2.4内核时代,在/dev下保存了所有kernel可以支持的硬件设备的设备文件,将近有1万个.而这些设备中,大多数是没有连接的设备.这样就大大的浪费了系统资源,而且/dev目录也显得非常混乱.
udev就是用了解决这些问题的.在2.6内核中,采用udev方式来管理/dev目录.它可以动态的建立/删除设备文件(设备连接到系统时,它会自动建立相应的设备文件,设备断开连接后,它会自动删除相应的设备文件).这样使/dev目录简化了许多.而且,udev还可以允许用户编写命名规则,为不同设备指定设备文件名.这样,对设备的管理也方便了许多.
例如:你有2个U盘,1个容量是1G的,1个容量是2G的.一般情况下,你先接上的U盘会是sdb,后接上的U盘会是sdc.
这样对使用很不方便.每次U盘的设备名可能不一样.但通过udev命名规则,你可以自己指定的设备命名,可以将1G的U盘命名为1g,将2G的U盘命名为2g.设备名不会再变化.使用和管理都会很方便.

二.udev安装

1.Turbolinux发行版
在Turbolinux 10,10.5和11等版本中,都已集成了udev包.你也可以手动安装udev的rpm包.

# rpm -ivh udev-<版本号>.rpm

2.从源码包安装
你可以从官方网站下载源码包:

http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html
我们下载0.39版的udev.然后进行安装:

#tar jxf udev-039.tar.bz2 # cd udev-039 # make # make install

三.udev命名规则

1.查看硬件信息

当你将一个硬件连接到系统时,会在/sys下生成这个设备的相应信息.U盘信息会保存在/sys/block下,USB打印机则会保存在
/sys/class/usb下.使用udevinfo命令可以查看硬件的相关信息.

# udevinfo -a -p /sys/block/sda/sda1
  looking at class device '/sys/block/sda/sda1':
    SYSFS{dev}="8:1"
    SYSFS{size}="2045147"
    SYSFS{start}="61"
    SYSFS{stat}="       0        0        0        0"

follow the class device's "device"
  looking at the device chain at '/sys/devices/pci0000:00/0000:00:1d.7/usb1/1-6/1-6:1.0/host2/target2:0:0/2:0:0:0':
    BUS="scsi"
    ID="2:0:0:0"
    SYSFS{detach_state}="0"
    SYSFS{device_blocked}="0"
    SYSFS{max_sectors}="240"
    SYSFS{model}="Flash Disk      "
    SYSFS{queue_depth}="1"
    SYSFS{rev}="4.00"
    SYSFS{scsi_level}="3"
    SYSFS{state}="running"
    SYSFS{timeout}="30"
    SYSFS{type}="0"
    SYSFS{vendor}="        "


输出信息包括硬件的产品类型,厂商信息,序列号等,依据这些信息,你就可以编写命名规则了.


2.命名规则

udev的命名规则保存在/etc/udev/rules.d中,脚本按照文件的编号顺序,由小到大执行.当规则匹配时,将不再继续向下执行.
下面以Turbolinux 10为例,编写一个U盘命名规则.

# vi /etc/udev/rules.d/05-users.rules

根据硬件的序列号(serial)编写规则.在文件中添加下面内容:

BUS="usb",SYSFS{serial}="033446747503",KERNEL="sd?1",NAME="bruce-%k",SYMLINK="bruce3-%n"

BUS 表示设备使用的总线.
SYSFS 表示指定硬件信息中,我们需要使用的哪一项值,这里我们使用U盘的序列号作为识别.
KERNEL 表示内核对这个设备进行的命名.内核对U盘的命名为sda1,sdb1…,所以这里我们使用”sd?1”.
NAME 设备名,即我们要改变的设备名称.我们使用bruce-%k.%k代表内核对这个设备的命名.
SYMLINK 表示建立一个连接,连接到这个设备上.这个连接的名称是”bruce3-%n”.%n代表kernel号,即设备名后面的数字.

现在将U盘拔出,然后再重新连接到计算机上.

# ls /dev/sd* -hl
brw-rw----  1 root disk 8,0 Aug 17 20:11 /dev/sda

# ls /dev/bruce* -hl
lrwxrwxrwx  1 root root   10 Aug 17 20:11 /dev/bruce3-1 -> bruce-sda1
brw-------  1 root root 8,1 Aug 17 20:11 /dev/bruce-sda1

可以看到,U盘设备名变成了bruce-sda1,并且有一个bruce3-1的连接指向它.

四.udev工作原理

当系统添加设备时,/sys目录下会生成设备的相应信息.udev就是通过读取/sys下的信息来识别硬件设备的.

udev有3部分组成: namedev,libsysfs,udev namedev 负责解析/etc/udev/rules.d中的命名规则,遇到匹配规则后,会返回一个设备名. libsysfs 负责读取/sys下的硬件信息. udev程序负责协调namedev和libsysfs,来完成指定的命名策略. 当有设备添加或移出时,/sbin/hotplug由内核调用.提供相应设备的特征信息.如:设备类型,sysfs中的哪个设备等. udev获得这些信息,然后调用namedev,为设备指定一个名称.如果这是一个已经增加的新设备,则udev使用libsysfs来获得设备的主从设备号,然后在/dev下建立设备文件.如果这个设备已经移出,则将从/dev下删除它的设备文件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读