udev介紹:
1、udev規則文件: /etc/udev/rules.d/ (用戶自定義的規則文件一般放在這)、 /lib/udev/rules.d/
2、udev主配置文件:/etc/udev/udev.conf
3、規則文件前綴數值50爲默認值;數值越小越先被解析。
4、udev工具集包括udevadm、udevcontrol、udevinfo、udevmonitor、udevsettle、udevtest、udevtrigger,都被集成到了udevadm中。
規則說明:
1、udev從頭到尾逐行解析每個規則文件,每行代表一個規則,每個規則由若干"鍵-值"(key-value)對組成。
2、鍵分爲兩種:匹配鍵(match key)、賦值鍵(assignment key)。
3、每個規則必須至少有一個匹配鍵和一個賦值鍵。
4、每個規則一行,不可換行。
5、不可在一行規則中混合匹配兩個不同父設備的屬性。
6、創建的設備節點的mode默認值爲0666。
7、外部程序不會在終端執行,要確保程序爲可執行,且腳本以shebang開頭,終端不會有任何輸出。
8、用於獲取名稱的外部程序運行時,設備節點尚未創建,所以不能訪問設備節點。
規則樣例:
# 如果有設備被內核命名爲hdb,那麼創建設備節點my_disk替代hdb(即用/dev/my_disk取代/dev/hdb)
KERNEL=="hdb", NAME="my_disk"
# 如果匹配到這樣一個設備:內核命名爲hdb且驅動爲ide-disk;那麼維持原設備節點名不變
# 但是爲它創建一個叫sparedisk的符號連接(/dev/sparedisk->/dev/hdb)
KERNEL=="hdb", DRIVER=="ide-disk", SYMLINK+="sparedisk"
# 爲hdc創建兩個符號連接cdrom和cdrom0
KERNEL=="hdc", SYMLINK+="cdrom cdrom0"
# 如果從sysfs匹配到一個塊設備且大小爲234441648則爲它的設備節點創建符號連接my_disk
SUBSYSTEM=="block", ATTR{size}=="234441648", SYMLINK+="my_disk"
# 爲/dev/mice創建符號連接/dev/input/mice
KERNEL=="mice", NAME="input/%k"
# 爲loop0創建設備節點/dev/loop/0,併爲它創建符號連接/dev/loop0
KERNEL=="loop0", NAME="loop/%n", SYMLINK+="%k"
# 爲fd0~fd9創建設備節點/dev/floppy/(0~9),併爲它們創建符號連接/dev/fd(0~9)
KERNEL=="fd[0-9]*", NAME="floppy/%n", SYMLINK+="%k"
# 爲hiddev字符串開頭的設備創建設備節點/dev/usb/diddev*
KERNEL=="hiddev*", NAME="usb/%k"
# 設置設備節點的group、owner、mode
KERNEL=="fb[0-9]*", NAME="fb/%n", SYMLINK+="%k", GROUP="video", OWNER="john", MODE="0666"
# 使用外部程序device_namer(hda爲程序參數)的輸出作爲符號連接名
KERNEL=="hda", PROGRAM="/bin/device_namer %k", SYMLINK+="%c"
# 外部程序輸出必須以單個空格隔開每個單詞; %c{n}表示第n個單詞; %c{n+}表示從第n個到最後的所有單詞;
KERNEL=="hda", PROGRAM="/bin/device_namer %k", NAME="%c{1}", SYMLINK+="%c{2+}"
# 運行外部程序
KERNEL=="sdb", RUN+="/usr/bin/my_program"
# 設置udev環境變量
KERNEL=="fd0", SYMLINK+="floppy", ENV{some_var}="value"
# 附加選項
KERNEL=="sda", GROUP="disk", OPTIONS+="last_rule"
常用匹配鍵:
* KERNEL - 匹配設備在內核中的命名
* SUBSYSTEM - 匹配設備(在sysfs中)的subsystem名
* DRIVER - 匹配設備對應的驅動名
* ATTR - 匹配設備在sysfs中屬性
* KERNELS - 匹配設備及其父親在內核中的命名
* SUBSYSTEMS - 匹配設備及其父親(在sysfs中)的subsystem名
* DRIVERS - 匹配設備及其父親對應的驅動名
* ATTRS - 匹配設備及其父親在sysfs中屬性
注:父親表示直到最上層的所有祖先
常用賦值鍵:
* NAME - 設備節點名
* SYMLINK - 指向設備節點的符號連接列表
附加選項:
* all_partitions - 爲塊設備創建所有可能的分區(設備節點)
* ignore_device - 忽略
* last_rule - 不受後續規則的影響
udev工具使用:
# 查看設備在sysfs中的屬性 $(查看設備的在sysfs中的路徑)
udevadm info -a -p $(udevadm info -q path -n /dev/sda)