Linux中的udev

Linux中的udev

在服务器上安装sentaurus需要更改网卡名称,涉及到了更改/etc/udev目录下的配置文件. 参考一些资料实践学习一下.

daemon与udev

系统为了某些功能必须提供一些服务,这个服务被称为service. service的提供总是依赖于后台运行的某个程序,我们称完成这个service的程序为daemon (守护进程). 由于系统会提供各种各样的服务,因此也就由着各种各样的daemon运行在系统中. 这些daemon的命名通常是在其对应的服务后面加上一个d,代表daemon.

udev是一个设备管理工具,以守护进程的形式运行,通过侦听内核发出的uevent来管理/dev目录下的设备文件. 虽然设备的底层支持是在内核层面处理的,但是它们相关的事件管理是在用户空间通过udev来管理的,即由udevd守护进程完成的. 通过对udev的规则文件进行编写,它可以实现根据系统中的硬件设备的状态来动态更新设备文件,执行相应操作等等,比如当某个硬盘驱动器插入时,触发某个事件,执行某个任务.

其工作流程如下图所示

udev的规则文件

udev的规则定义在一个以.rules为扩展名的文件中。这些文件主要放在两个位置:/usr/lib/udev/rules.d/etc/udev/rules.d. 前一个目录用于存放系统安装的规则,后一个目录保留给自定义规则。

usr是Unix Software Resource的缩写,也就是Unix操作系统软件资源所放置的目录,类似于Windows系统下的C:\Program Files\. etc就是etc. ,代表用于放置一堆零碎的配置文件的目录.

使用udevadm monitor

每一个软件下面大致都有bin, include, src, lib等目录,分别放置着这个软件的可执行文件、头文件、源文件以及库文件,/usr下面也是同样的目录结构,只不过相当于把很多个系统级软件放在一起,即/usr/bin下面有多个不同系统软件的可执行文件,/usr/lib下面放置着多个对应的对应系统软件的库文件.

数字越小就表示规则越优先. udev配置文件编写非常直观,每个配置文件由多条配置规则组成,每条配置规则包含若干个用逗号隔开的键值对. 键分为匹配键和赋值键,当条件满足所有匹配键的要求后,udev执行赋值键的操作.

比如我们可以创建一个/usr/local/bin/trigger.sh脚本:

1
echo Hello, world! 

/etc/udev/rules.d目录中新建一个80-local.rules脚本

1
SUBSYSTEM=="block", ACTION=="add", RUN+="/usr/local/bin/trigger.sh"

这条规则表示一旦插入了一个块设备,就运行trigger.sh脚本.

修改网卡名称

参考

  • 鸟哥的Linux私房菜
  • 在 Linux 中如何编写基本的 udev 规则
  • udev 入门:管理设备事件的 Linux 子系统
  • linux下udev详解