udev規則說明

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)


發佈了30 篇原創文章 · 獲贊 6 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章