Linux早期,设备文件仅仅是一些带有适当属性集的普通文件。它由mknod命令创建。文件存放在/dev目录下。后来,采用了devfs,一个基于内核的动态设备文件系统,它首次出现在2.3.46内核中。devfs创建的设备文件是动态的。但是又有很多局限性。于是udev取代了它。
udev是一个用户空间程序。(它的优势是那些对设备有极端需求的站点如要控制上千个硬盘,和热插拔设备上解决了几个问题,如下文)。
修改udev配置可以访问外来设备。
主要的udev配置文件:vi /etc/udev/udev.conf
udev_root="/dev"
udev_rules="/etc/udev/rules.d" //表示udev规则存储的目录。里面的每个文件处理一系列规则来帮助 //udev分配名字给设备文件以保证被内核识别。
udev_log="err"
rules.d里面文件各个字符代表的含义:
操作符 匹配或赋值 解释
== 匹配 相等比较
!= 匹配 不等比较
= 赋值 分配一个特定的值给该键
上面的规则可以覆盖之前的赋值。
+= 赋值 追加特定的值给已经存在的键
:= 赋值 分配一个特定的值给该键
下面的规则不能覆盖
有一些键在udev规则文件经常出现。这些值可以使用通配符(*,?,甚至范围【0-9】),举例如下:
键 含义
ACTION 一个时间活动的名字,比如add,当设备增加时使用
KERNEL 在内核里看到的设备名字,比如sd*表示任意SCSI磁盘设备
DEVPATH 内核设备录进,比如/devices/*
SUBSYSTEM 子系统名字,比如sound,net
BUS 总线的名字,比如IDE,USB
DRIVER 设备驱动的名字,比如ide-cdrom
ID 独立于内核名字的设备名字
SYSFS{ value} sysfs属性值,他可以表示任意
ENV{ key} 环境变量,可以表示任意
PROGRAM 可执行的外部程序,如果程序返回0值,该键则认为为真(true)
RESULT 上一个PROGRAM调用返回的标准输出。
NAME 根据这个规则创建的设备文件的文件名。注意:仅仅第一行的NAME描述是 有效的,后面的均忽略。 如果你想使用使用两个以上的名字来访问一个设备 的话,可以考虑SYMLINK键。
SYMLINK 根据规则创建的字符连接名
OWNER 设备文件的属组
GROUP 设备文件所在的组。
MODE 设备文件的权限,采用8进制
RUN 为设备而执行的程序列表
LABEL 在配置文件里为内部控制而采用的名字标签(下下面的GOTO服务)
GOTO 跳到匹配的规则(通过LABEL来标识),有点类似程序语言中的GOTO
IMPORT{ type} 导入一个文件或者一个程序执行后而生成的规则集到当前文件
WAIT_FOR_SYSFS 等待一个特定的设备文件的创建。主要是用作时序和依赖问题。
PTIONS 特定的选项: last_rule 对这类设备终端规则执行; ignore_device
具体见https://blog.csdn.net/zhyjunfov/article/details/30252059