金步国index里有4条udev相关的.
[1] udevadm
[2] udev
[3] systemd-udevd.service //udevd守护进程
[4] udev.conf
[1] udevadm
1 udevadm info [options] [devpath|file|unit...]
从udev数据库中提取设备信息。
位置参数用于指定一个或多个设备,它可以是 一个设备名(必须以 /dev/ 开头)、 一个 sys 路径(必须以 /sys/ 开头)、 一个设备单元(必须以 ".device" 结尾)。
udevadm info /dev/sda1
udevadm info /sys/class/block/sda
-q, --query=TYPE
提取特定类型的设备信息。 TYPE 可以是下列值之一: name, symlink, path, property, all(默认值)
-p, --path=DEVPATH
该设备在 /sys 目录下的路径(例如 [/sys]/class/block/sda)。
因为此选项是位置参数以 /sys/ 开头时的替代, 所以通常将 udevadm info --path=/class/block/sda 直接简写为 udevadm info /sys/class/block/sda
-p后面要接/sys下的目录,一般这么用:
udevadm info -a -p $(udevadm info -q path /dev/sdb1)
-n, --name=FILE
设备节点或软连接的名称(例如 [/dev]/sda)。 因为此选项是位置参数以 /dev/ 开头时的替代, 所以通常将 udevadm info --name=sda 直接简写为 udevadm info /dev/sda
-a, --attribute-walk
按照udev规则的格式,显示所有可用于匹配该设备的sysfs属性: 从该设备自身开始,沿着设备树向上回溯(一直到树根), 显示沿途每个设备的sysfs属性。
udevadm info -a /dev/sda1
-d, --device-id-of-file=FILE
显示 FILE 文件所在底层设备的主/次设备号。 如果使用了此选项,那么将忽略所有位置参数。
2 udevadm trigger [options] [devpath|file|unit]
强制内核触发设备事件,主要用于重放内核初始化过程中的冷插(coldplug)设备事件。
udevadm trigger /dev/sda1
3 udevadm settle [options]
监视udev事件队列,并且在所有事件全部处理完成之后退出。
4 udevadm control option
控制udev守护进程(systemd-udevd)的内部状态。
-e, --exit
向 systemd-udevd 发送"退出"信号并等待其退出。因为 systemd-udevd.service 中含有 Restart=always ,所以此选项实际是重启了 systemd-udevd 。
udevadm control -e
systemctl status systemd-udevd.service显示static,原来是可以强制关掉的,需要把相关socket关掉.
如果你想停止 systemd-udevd.service ,那么应该使用:
systemctl stop systemd-udevd-control.socket systemd-udevd-kernel.socket systemd-udevd.service
-l, --log-priority=value
设置 systemd-udevd.service(8) 的内部日志等级。 可以用数字或文本表示: remerg(0), alert(1), crit(2), err(3), warning(4), notice(5), info(6), debug(7)
-s, --stop-exec-queue
向 systemd-udevd 发送"禁止处理事件"信号, 这样所有新发生的事件都将进入等候队列。
-S, --start-exec-queue
向 systemd-udevd 发送"开始处理事件"信号,也就是开始处理事件队列中尚未处理的事件。
-m, --children-max=value
设置最多允许 systemd-udevd 同时处理多少个设备事件。
--ping
向 systemd-udevd 发送一个"ping"消息并等待应答。用于检查 systemd-udevd 守护进程是否仍在正常运行。
5 udevadm monitor [options]
监视内核发出的设备事件(以"KERNEL"标记), 以及udev在处理完udev规则之后发出的事件(以"UDEV"标记),并在控制台上输出事件的设备路径(devpath)。
可用于分析udev处理设备事件所花的时间(比较"KERNEL"与"UDEV"的时间戳)。
udevadm monitor
配合udevadm trigger /dev/sda1测试
-s, --subsystem-match=subsystem[/devtype]
根据 subsystem[/devtype] 对事件(包括 kernel uevent 与 udev event)进行过滤,仅显示与"子系统[/设备类型]"匹配的"UDEV"事件。
如果多次使用此选项,那么表示以 OR 逻辑连接每个匹配规则, 也就是说,所有指定子系统中的设备都会被监视。
-t, --tag-match=string
根据设备标签对事件(仅 udev event)进行过滤,仅显示与"标签"匹配的"UDEV"事件。
如果多次使用此选项,那么表示以 OR 逻辑连接每个匹配规则, 也就是说,拥有任一指定标签的设备都会被监视。
6 udevadm test [options] [devpath]
模拟一个设备事件,并输出调试信息。
udevadm test /sys/class/block/sda1
[2] udev
1 描述
udev 能够处理设备事件、管理设备文件的权限、 在 /dev 目录中创建额外的符号链接、重命名网络接口,等等。
内核通常仅根据设备被发现的先后顺序给设备文件命名, 因此很难在设备文件与物理硬件之间建立稳定的对应关系。
而根据设备的物理属性或配置特征创建有意义的符号链接名称或网络接口名称, 就可以在物理设备与设备文件名称之间建立稳定的对应关系。
udev守护进程(systemd-udevd.service(8)) 直接从内核接收设备的插入、拔出、改变状态等事件, 并根据这些事件的各种属性, 到规则库中进行匹配,以确定触发事件的设备。
被匹配成功的规则有可能提供额外的设备信息,这些信息可能会被记录到udev数据库中, 也可能会被用于创建符号链接。
udev处理的所有设备信息都存储在udev数据库中, 并且会发送给可能的设备事件的订阅者。 可以通过 libudev 库访问udev数据库以及设备事件源。
2 规则文件
规则文件分别位于:
系统规则目录(/usr/lib/udev/rules.d)、 运行时规则目录(/run/udev/rules.d)、 本机规则目录(/etc/udev/rules.d)。 所有的规则文件(无论位于哪个目录中),统一按照文件名的字典顺序处理。
对于不同目录下的同名规则文件,仅以优先级最高的目录中的那一个为准。 具体说来就是: /etc/ 的优先级最高、 /run/ 的优先级居中、 /usr/lib/ 的优先级最低。
如果系统管理员想要屏蔽 /usr/lib/ 目录中的某个规则文件, 那么最佳做法是在 /etc/ 目录中创建一个指向 /dev/null 的同名符号链接, 即可彻底屏蔽 /usr/lib/ 目录中的同名文件。
注意,规则文件必须以 .rules 作为后缀名,否则将被忽略。
每行必须至少包含一个"键-值"对。 "键"有两种类型:匹配与赋值。
如果某条规则的所有匹配键的值都匹配成功,那么就表示此条规则匹配成功, 也就是此条规则中的所有赋值键都会被赋予指定的值。
一条匹配成功的规则可以:重命名网络接口、为某个设备文件添加一个软连接、运行一个指定的程序等等。
":="
(赋值)为键赋予指定的值,并视为最终值,也就是禁止被继续修改。
Linux通过sysfs以树状结构展示设备,例如硬盘是SCSI设备的孩子、SCSI设备又是ATA控制器的孩子、 ATA控制器又是PCI总线的孩子。
而你经常需要从父设备那里引用信息, 比如硬盘的序列号就是通过父设备(SCSI设备)展现的。
DEVPATH
匹配设备的路径(也就是该设备在sysfs文件系统下的相对路径)。
[举例] /dev/sda1 对应的 devpath 是 /block/sda/sda1 (一般对应着 /sys/block/sda/sda1 目录)。
KERNEL
匹配设备的内核名称。"内核名称"是指设备在sysfs里的名称,也就是默认的设备文件名称,例如"sda"。
ATTR{文件}
匹配设备在sysfs中的属性值。属性值中的尾部空白会被忽略,除非指定的值自身就包含尾部空白。
[译者注]大括号中的"文件"是指设备路径(devpath)下的文件。 例如,对于 /dev/sda1 来说,ATTR{size} 的含义其实是指 /sys/block/sda/sda1/size 文件的内容。
SYSCTL{内核参数}
匹配"内核参数"的值。[译者注]所谓"内核参数"其实是指 /proc/sys/ 中的"内核参数"。
例如,可以用 SYSCTL{kernel/hostname} 匹配 /proc/sys/kernel/hostname 的值。
KERNELS
匹配设备及其所有父设备的内核名称
ENV{设备属性}
匹配设备的属性。例如 "DEVTYPE", "ID_PATH", "SYSTEMD_WANTS" 等等。
[提示]可以通过 udevadm info --query=property /dev/sda 命令查看 /dev/sda 的所有属性。
PROGRAM
执行指定的程序并检查返回值, 如果返回值为零,则匹配成功,否则匹配失败。 设备的属性会转化为该程序的环境变量供其使用。 同时该程序的标准输出会被 自动保存在 RESULT 键中。
注意,仅可用于执行时间很短的前台程序。 参见 RUN
下面的键可用于赋值:
NAME
设置网络接口的名称。参见 systemd.link(5) 以了解设置网络接口名称的高级机制。
实际上,udev 并不能直接修改网络接口的设备节点名称, 只是额外创建了一个符号链接而已。
RUN{类型}
对于每一个设备事件来说,在处理完所有udev规则之后, 都可以再接着执行一个由此键设置的程序列表(默认为空)。
不同的"类型"含义如下:
"program"
一个外部程序, 如果是相对路径, 那么视为相对于 /usr/lib/udev 目录。 否则必须使用绝对路径。
如果未明确指定"类型", 那么这是默认值。
"builtin"
与 program 类似, 但是仅用于表示内置的程序。
程序名与其参数之间用空格分隔。 如果参数中含有空格,那么必须使用单引号(')界定。
仅可使用运行时间非常短的前台程序, 切勿设置任何后台守护进程或者长时间运行的程序。
设备事件处理完成之后, 所有派生的进程(无论是否已经分离), 都将会被无条件的杀死。
注意,禁止在 udev 规则中运行访问网络、或挂载/卸载文件系统的程序, 因为在 systemd-udevd.service 中强制使用了默认沙盒机制。
可用的替换标记如下:
$kernel, %k
设备的内核名称
$number, %n
设备在内核中的序号。例如,对于 "sda3" 来说,此值为 "3"
[3] systemd-udevd.service
/usr/lib/systemd/systemd-udevd
systemd-udevd.service
systemd-udevd-control.socket
systemd-udevd-kernel.socket
systemd-udevd 监听内核发出的设备事件, 并根据 udev 规则处理每个事件
内核引导选项
注意,下面以"rd."开头的参数 仅用于 initrd 环境。
udev.log_priority=, rd.udev.log_priority=
设置日志等级
udev.children_max=, rd.udev.children_max=
限制最多同时并行处理多少个设备事件
[4] udev.conf
systemd-udevd 将使用 /etc/udev/udev.conf 作为主配置文件。该文件包含一组允许用户修改的变量( VAR=VALUE 格式),以控制该进程的行为。
udev_log=日志等级。