准备搞一个linux系统下的BPI-BIT(CH340)板子插入检测和自动烧录,开始接触udev,之前也算是接触过,当时板子的串口芯片介入系统,普通用户权限不够,然后自动检测插入后更改读写权限。

关于udev的介绍,我看了一篇文章:Linux┊详解udev

udev 键/值对操作符

操作符匹配或赋值解释
==匹配相等比较
!=匹配不等比较
=赋值分配一个特定的值给该键,他可以覆盖之前的赋值。
+=赋值追加特定的值给已经存在的键
:=赋值分配一个特定的值给该键,后面的规则不可能覆盖它。

这有点类似我们常见的编程语言,比如C语言。只是这里的键一次可以处理多个值。有一些键在udev规则文件里经常出现,这些键的值可以使用通配符(*,?,甚至范围,比如[0-9]),这些常用键列举如下:

常用udev键

含义
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 忽略当前规则; ignore_remove 忽略接下来的并移走请求。all_partitions 为所有的磁盘分区创建设备文件。

这里面比较详细的介绍了udev的由来,也介绍了几种基本用法,但是它里面提到了查看设备信息,以便后面为设备适配做准备。

udevinfo -a -p ...
但是经过尝试和查询,在debian系发行版下面这个命令改为如下形式
udevadm info -a -p

并且-p参数用起来不是很方便,需要提供在/sys/路径下面的地址,所以可以选择使用-n但是,可以省略,直接使用/dev/*这样的设备节点或者软连接的名字。

关于udevadm info的详细信息,可以使用-h参数查看帮助文件,可以看udevadm中文手册

最后修改:2018 年 11 月 03 日
如果觉得我的文章对你有用,请随意赞赏