Linux udev规则简介

转载:https://www.cnblogs.com/fah936861121/p/6496608.html

 

1. udev简介

1.1 什么是udev?

udev是Linux(linux2.6内核之后)默认的设备管理工具。udev 以守护进程的形式运行,通过侦听内核发出来的 uevent 来管理 /dev目录下的设备文件。

如何理解udev是守护进程呢?即系统内核启动后init进程(比如busybox的init程序、sysinit、Upstart或systemd)根据runlevel运行等级进入某种模式,然后解析开启哪些服务进程。其中udev就是哪些服务进程中的一个,服务进程是在后台运行的。可以通过命令ps -aux来获取,比如在ubuntu终端中ps -aux | grep udev

root       328  0.0  0.0  52220   852 ?        Ss    2月23   0:00 /lib/systemd/systemd-udevd --daemon

所以只要有设备插入或删除,守护进程udev就会管理它。

也就是说使用了udev,所有的设备都能在/dev/目录下找到对应的设备文件。

1.2 使用udev的好处

动态管理:当设备添加 / 删除时,udev 的守护进程侦听来自内核的 uevent,以此添加或者删除 /dev下的设备文件,所以 udev 只为已经连接的设备产生设备文件,而不会在 /dev下产生大量虚无的设备文件。

自定义命名规则:通过 Linux 默认的规则文件,udev 在 /dev/ 里为所有的设备定义了内核设备名称,比如 /dev/sda、/dev/hda、/dev/fd等等。由于 udev 是在用户空间 (user space) 运行,Linux 用户可以通过自定义的规则文件,灵活地产生标识性强的设备文件名,比如 /dev/boot_disk、/dev/root_disk、/dev/color_printer等等。

设定设备的权限和所有者 / 组:udev 可以按一定的条件来设置设备文件的权限和设备文件所有者 / 组

1.3 udev工作流程

 

2. udev主要作用

  • 重命名设备节点的缺省名字为其他名字
  • 通过创建符号链接到缺省设备节点来提供一个可选的固定的设备节点名字
  • 基于程序的输出命名设备节点
  • 改变设备节点的权限和所有权
  • 在设备节点被创建或删除时(通常是添加设备或拔出设备时)执行一个脚本
  • 重命名网络接口

2.1 重命名设备节点的缺省名字为其他名字

此时使用NAME赋值键,例子如下:

一个硬盘,它的设备属性KERNEL是hdb,在/dev/目录下是/dev/hdb,那么我们可以给他重命名为

KERNEL=="hdb", NAME="my_spare_disk"

规则意思是:匹配一个设备命名为hdb的设备,把它重新命名为my_spare_disk. 设备节点出现在/dev/my_spare_disk

执行以下命令:ls /dev/my_spare_disk -l

/dev/my_spare_disk ---> /dev/hdb产生一个符号链接指向/dev/hdb

注意:仅仅第一行的NAME描述是有效的,后面的均忽略。即udev按顺序解析udev规则文件时,第一个NAME赋值键的名字有用,假如后面对同一个设备还有NAME赋值键,那么那个赋值的名称将被忽略。如果你想使用使用两个以上的名字来访问一个设备的话,可以考虑SYMLINK键

如果你想你命名的名字得到实现,你必须把你的规则文件命名顺序在前面。

 

2.2 通过创建符号链接到缺省设备节点来提供一个可选的固定的设备节点名字

例子如下:

KERNEL=="hdb", DRIVER=="ide-disk", SYMLINK+="sparedisk"

规则意思是:匹配一个内核命名为hdb以及驱动为ide-disk的设备,命名设备节点为缺省名字并创建一个指向它的sparedisk符号链接,设备节点出现在/dev/sparedisk

注意:符号链接可以是多个,这些符号链接都指向/dev/hdb

 

2.3 基于程序的输出命名设备节点

某些情况下你可能要求比udev标准规则提供的更多弹性, 这种情况下你可以请求udev运行一个程序并运用程序的标准输出来提供设备命名.

要使用这个功能,你只需简单的在PROGRAM赋值中指定要运行程序(以及任何阐述)的完整路径, 然后在NAME/SYMLINK赋值中使用一些%c替换.

例子如下:

引用一个位于/bin/device_namer的虚构程序. device_namer带一个表示内核名字的命令行参数, 基于内核名device_namer做一些变化然后输出

KERNEL=="hda", PROGRAM="/bin/device_namer %k", SYMLINK+="%c"

规则意思是:匹配一个内核命名为hdb的设备,然后运行一个/bin/device_name程序,这个程序需要带一个表示内核名字的命令行参数即%k。然后这个程序运行的结果(即输出)把它赋值给SYMLINK,这样就可以满足要求(使用外部程序来命名设备)

 

2.4 改变设备节点的权限和所有权

udev允许你在规则中使用另外的赋值来控制每个设备的所有权和权限属性.

例子如下:

KERNEL=="fb[0-9]*", NAME="fb/%n", SYMLINK+="%k", GROUP="video", MODE="0666"

规则意思是:匹配一个内核命名为fb[0-9]的设备,然后给它命名为fb/%n,符号链接为%k, 属于video组, 权限为0666

比如有一个fb3设备,匹配成功后那么久有一个名为fb/3,符号链接为fb3,属组为video,权限为0666

 

2.5 在设备节点被创建或删除时(通常是添加设备或拔出设备时)执行一个脚本

特别针对热插拔的设备,目的是为了在设备连接或者断开时运行一个特定程序. 例如, 你可能想在你的数码相机连到系统时执行一个脚本来自动下载相机里面的所有照片.

例子如下:

KERNEL=="sdb", ACTION=="add", RUN+="/usr/bin/my_program"

规则意思是:匹配一个内核名为sdb的设备,当插入时,执行程序/usr/bin/my_program

 

2.6 重命名网络接口

在规则中简单的匹配网卡MAC地址是有意义的,因为它们是唯一的. 
# udevadm info -a -p /sys/class/net/eth0
looking at class device '/sys/class/net/eth0':
KERNEL=="eth0"
ATTR{address}=="00:52:8b:d5:04:48"
规则如下:
KERNEL=="eth*", ATTR{address}=="00:52:8b:d5:04:48", NAME="lan"

这样就重命名了eth*为lan

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值