参考:https://wangpengcheng.github.io/2019/09/18/change_usb_rules_ubuntu/
原理
根据设备的“供应商ID”和“产品ID”等信息,来绑定指定的设备名称。
配置方法
查看设备信息
udevadm info --name=/dev/video0 --attribute-walk
添加udev rules
规则文件
设备规则文件在Ubuntu中存放在/etc/udev/rules.d/
文件夹下。可以在此文件夹中添加自定义的以.rules
的文件。
udev的规则的匹配关键键内容如下:
关键键 | 含义 |
---|---|
ACTION | 事件 (uevent)的行为,例如:add( 添加设备 )、remove(删除设备 )。 |
KERNEL | 在内核里看到的设备名字,比如sd*表示任意SCSI磁盘设备 |
DEVPATH | 内核设备录进,比如/devices/* |
SUBSYSTEM | 子系统名字,例如:sda的子系统为 block。 |
BUS | 总线的名字,比如IDE,USB |
DRIVER | 设备驱动的名字,比如ide-cdrom |
ID | 独立于内核名字的设备名字 |
SYSFS{value} | sysfs属性值,他可以表示任意 |
ENV{ key} | 环境变量,可以表示任意 |
PROGRAM | 可执行的外部程序,如果程序返回0值,该键则认为为真(true) |
RESULT | 上一个PROGRAM调用返回的标准输出。 |
NAME | 根据这个规则创建的设备文件的文件名。注意:仅仅第一行的NAME描述是有效的,后面的均忽略。如果你想使用使用两个以上的名字来访问一个设备的话,可以考虑SYMLINK键。 |
SYMLINK | 为 /dev/下的设备文件产生符号链接。由于 udev只能为某个设备产生一个设备文件,所以为了不覆盖系统默认的 udev规则所产生的文件,推荐使用符号链接。 |
OWNER | 设备文件的属组 |
GROUP | 设备文件所在的组。 |
MODE | 设备文件的权限,采用8进制 |
RUN | 为设备而执行的程序列表 |
LABEL | 在配置文件里为内部控制而采用的名字标签(下下面的GOTO服务) |
GOTO | 跳到匹配的规则(通过LABEL来标识),有点类似程序语言中的GOTO |
IMPORT{type} | 导入一个文件或者一个程序执行后而生成的规则集到当前文件 |
WAIT_FOR_SYSFS | 等待一个特定的设备文件的创建。主要是用作时序和依赖问题。 |
PTIONS | 特定的选项: |
last_rule | 对这类设备终端规则执行; |
ignore_device | 忽略当前规则; |
ignore_remove | 忽略接下来的并移走请求。 |
all_partitions | 为所有的磁盘分区创建设备文件。 |
在/etc/udev/rules.d 文件夹下创建自定义myVideoDev.rules 文件内容如下 |
ACTION=="add",ATTRS{idVendor}=="32e4",ATTRS{idProduct}=="9422",ATTR{index}=="0",SYMLINK+="rerVideo"
可以自由添加和删减字段,但是ACTION
和SYMLINK+=
不能删减
重启服务查看 对应设备
当添加或者删除udev的rules文件后,都需要使用如下命令,进行设备读取rules的更新
sudo service udev reload
sudo service udev restart
然后重新插拔USB设备,就可以按照新的规则执行了。
注意:两个设备是同种设备时不能由设备芯片进行识别区分,需要找出设备信息的不同之处,比如:ATTR{index}