Udev

udev 規則的目的是什麼?

  • May 22, 2015

我被要求為我購買的新 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規則

確實,始終將給定設備映射到同一位置是 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 規則的另一個常見目的是控制設備節點上的權限,通常是允許特定的守護程序訪問它。這就是OWNER,GROUP和指令MODESECLABEL用途。

第三類原因是在插入設備時觸發某些操作。例如,您可能需要將韌體上傳到設備,或選擇將使用的模式,或通知系統的某些部分新的網路連接或列印機可用等。

引用自:https://unix.stackexchange.com/questions/204983