udev 规则的目的是什么?

udev 规则的目的是什么?

我被要求为我购买的新 USB 设备添加 udev 规则。对于为什么这样做是必要的或有价值的,似乎没有一个非常简单的解释。始终将设备映射到同一路径?例如,始终将设备安装为/dev/ttyUSB1/dev/sda4

/etc/udev/rules.d/99-totalphase.rules

# This file causes the mode of all Total Phase usb devices to be made
# writable for any user.

# Aardvark I2C/SPI Host Adapter
ACTION=="add", SUBSYSTEM=="usb_device", SYSFS{idVendor}=="0403", SYSFS{idProduct}=="e0d0", MODE="0666"
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="0403", ATTR{idProduct}=="e0d0", MODE="0666"

# Beagle Protocol Analyzers
ACTION=="add", SUBSYSTEM=="usb_device", SYSFS{idVendor}=="1679", SYSFS{idProduct}=="2001", MODE="0666"
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="1679", ATTR{idProduct}=="2001", MODE="0666"

如何编写udev规则

答案1

事实上,始终将给定设备映射到同一位置是 udev 的常见用途之一。设备甚至可以有多个位置,例如,磁盘分区可以通过自动编号(例如/dev/sda1)进行访问,还可以通过其文件系统上的标签 ( /dev/disk/by-label/*)、通过其文件系统上的 UUID ( /dev/disk/by-uuid/*) 以及磁盘设备的序列号进行访问( /dev/disk/by-id/*)。如果您想访问特定设备,而不必关心它何时插入或在哪个端口上,最清晰的方法是添加与该特定硬件设备匹配的 udev 规则,并/dev使用有意义的名称创建一个条目,例如

ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="1679", ATTR{idProduct}=="2001", \
  SERIAL=="123456", MODE="0666", SYMLINK+="analyzer-foo"
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="1679", ATTR{idProduct}=="2001", \
  SERIAL=="123789", MODE="0666", SYMLINK+="analyzer-bar"

udev 规则的另一个常见目的是控制设备节点上的权限,通常是允许特定的守护进程访问它。这就是OWNERGROUP和指令MODESECLABEL用途。

第三类原因是在设备插入时触发某些操作。例如,您可能需要将固件上传到设备,或者选择设备的使用模式,或者通知系统的某些部分新的网络连接或打印机可用等。

相关内容