Rootop 服务器运维与web架构

udev自定义设备名称

测试环境 almalinux9.3

规则配置文件必须以 .rules 为后缀名
udev按照配置文件名的字母顺序来查询全部规则文件,匹配到后会继续匹配其他规则文件。

在规则文件里,除了#开头的行,所有的非空行都为一条规则,一条规则不能扩展到多行。
规则由多个键值对组成,并由逗号隔开,键值对可以分为"条件匹配键值对"(以下简称 "匹配键" )和"赋值键值对"(以下简称 "赋值键"),一条规则可以有多条匹配键和多条赋值键。
匹配键是匹配一个设备属性的所有条件,当一个设备的属性匹配了该规则里所有的匹配键,就认为这条规则生效,然后按照赋值键的内容,执行该规则的赋值。


匹配键:
ACTION          事件(uevent)的行为,例如:add(添加设备)、remove(删除设备),udev守护进程帧听来自内核的uevent
KERNEL          内核设备名称,例如:sda,cdrom;
DEVPATH         设备的 devpath 路径;
SUBSYSTEM       设备的子系统名称,例如:sda 的系统为 block;
BUS             设备在 devpath 里的总线名称,例如:usb;
DRIVER          设备在 devpath 的设备驱动名称,例如:ide-cdrom;
ID              设备在 devpath 里的识别号;
SYSFS{filename} 设备的 devpath 路径下,设备的属性文件 "filename" 里的内容;
ENV{key}        环境变量。在一条规则中,可以设定最多五条环境变量的 匹配键;
PROGRAM         调用外部命令;
RESULT          外部命令 PROGRAM 的返回结果。

操作符:
==  比较键、值,若等于,则该条件满足;
!=  比较键、值,若不等于,则该条件满足;
=   对一个键赋值;
+=  为一个表示多个条目的键赋值;
:=  对一个键赋值,并拒绝之后所有对该键的改动。目的是防止后面的规则文件对该键赋值。

赋值键:
NAME     在 /dev 下产生的设备文件名。只有第一个对某个设备的 NAME 的赋值行为生效,之后匹配的规则再对设备的 NAME 赋值行为将被忽略。如果没有任何规则对设备的 NAME 赋值,udev 将使用内核设备名称来产生设备文件;
SYMLINK  为 /dev/ 下的设备文件产生符号链接。由于 udev 只能为某个设备产生一个设备文件,所以为了不覆盖系统默认的 udev 规则所产生的文件,推荐使用符号链接。
OWNER,GROUP,MODE 为设备设定权限;
ENV{key} 导入一个环境变量。



1、查看usb设备的厂商id和设备id
[root@localhost rules.d]# lsusb
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 005: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port / Mobile Action MA-8910P
Bus 001 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 001 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

ID   067b:2303
VENDOR_ID:MODEL_ID

2、根据厂商id或设备id去udev里匹配
[root@localhost rules.d]# udevadm info /dev/* | grep -C 20 2303

找到 DEVNAME|ID_VENDOR_ID|ID_MODEL_ID|SUBSYSTEM|ID_PATH 这几个字段用于配置自定义设备名称

规则配置文件路径 /etc/udev/rules.d

# 根据ID_PATH作为匹配条件
[root@localhost rules.d]# cat usb2console.rules 
SUBSYSTEM=="tty", ENV{ID_PATH}=="pci-0000:02:00.0-usb-0:2.1:1.0",SYMLINK+="usb2consoleline"

# 根据厂商设备id作为匹配条件
[root@localhost rules.d]# cat usb.rules 
SUBSYSTEM=="tty", ENV{ID_VENDOR_ID}=="239a", ENV{ID_MODEL_ID}=="80f4",SYMLINK+="usb-pi"
SUBSYSTEM=="tty", ENV{ID_VENDOR_ID}=="067b", ENV{ID_MODEL_ID}=="2303",SYMLINK+="usb-consoleline"

取子系统SUBSYSTEM等于tty,且变量ID_VENDOR_ID等于xxx,且变量ID_MODEL_ID等于xxx时,设置赋值键symbol link等于xxx

重插拔usb测试,查看/dev/usb-*的自定义名称

参考:https://blog.csdn.net/u014674293/article/details/121627305

原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/5436.html

作者:Venus

服务器运维与性能优化

评论已关闭。