udev是一个设备管理工具,并以守护进程的方式运行,它能够根据内核的uevent管理/dev/下面的设备文件。因为工作在用户层的缘故,所以能够很好地接收内核层的消息动态和管理设备文件,比单一的在内核层静态注册设备文件方便得多。
接下来我们以启扬IAC-IMX8MP-Kit开发板中的udev为例,对其进行简单的了解。
udev一般会有一个配置文件—— udev.conf,如下图所示:
其中,udev_log表示日志等级,显示可能为err(3),info(6),debug(7);
children_max表示允许同时执行的最大设备数量;
exec_delay表示延迟多少秒之后再执行RUN指令;
event_timeout表示等待设备事件完成的超时秒数,超时后,设备事件将会被终止,默认为180s;
timeout_signal表示超时发出的信号;
resolve_names设置systemd-udevd 在何时解析用户与组的名称。此时显示默认值 early 表示在规则的解析阶段;显示late时表示在每个设备事件发生的时候;显示never时表示不解析(所有设备都归 root 用户拥有)。
udev主要根据/etc/udev/rules.d/下面的匹配规则进行指定动作,如下图所示:
前面的数字代表着优先级,数字越低表示优先级越高。
这里我们打开automount规则文件,显示如下图
其中,SUBSYSTEM如字面意思,是子系统的名称,这里是块儿设备所以是block;
ACTION表示事件的行为,add是添加,remove是移除,change是改变;
ENV{key}是环境变量,在一条规则中,最多设置五条环境变量的匹配键;
RUN就是所执行的内容,一般以脚本为主;
而这里整体的意思就是,当有一个块儿设备添加进来,就执行/etc/udev/scripts/mount.sh这个脚本,块儿设备的卸载包括变更也都是执行这个脚本。
接下来我们再看这个脚本的内容,如下图
脚本的内容有点儿长,大致的内容就是通过判断插入块儿设备的文件系统类型进行不同的操作,一般都是将其挂载到某一个指定的目录下。
这里我们将U盘插入,看看udev规则下它会挂载到哪里。
插入U盘显示如下图:
识别到U盘,并且根据上面脚本的规则,将其挂载到/run/media/sda1下面,如图所示,表明规则执行成功。
通过上面的操作,可以看出我们能够根据udev规则做一些设备的固定匹配工作,这会为一些需要根据硬件动作做出相应脚本执行的工作带来的极大的方便。