Linux: udev 介紹

在談論udev之前,先要知道/dev這目錄. /dev在linux用途是存放device node(file-like device nodes). 程式可以透過device node來與系統上的裝置溝通.
e.g. /dev/input/mice 為滑鼠

那誰負責管理/dev底下的device node? 沒錯,那就是udev最主要的工作.
kernel會把裝置相關的events(add/remove/etc.)傳送至udev(藉由netlink). udev根據寫好的rules,在/dev底下建立對應的device node. 而這些rules會根據裝置的屬性去撰寫相關設定條件. 針對符合規則的裝置做對應的處理

到這時候應該會好奇要怎麼去得知道裝置的屬性呢? 而這邊就要談到 /sys (file type: sysfs), 這個是由kernel所維護的device資訊, kernel會把連接上的裝置資訊給放在這邊. udev在建立device node的時候也會參考這邊相關的屬性
e.g.
udevadm info -a --name /dev/input/mice
or
udevadm info -a --path $(udevadm info --query=path --name=/dev/input/mice)

接下來談的部分是udev rules. 基本上rule是由match keysassignment keys這兩個部分構成.
match key主要是作為條件判斷用. assignment keys則是用來設定數值與執行相關操作. 每一條rule至少都要有一個 match key 和 assignment key. 在 rule 中的這些keys則使用逗號(,)來做隔離, 並不允許由多行的keys來成一條rule. 這意味著udev rule file中的每一行就是一條rule.

KERNEL=="sda", ATTR{size}=="234441648", NAME="sda", SYMLINK+=disk/by-id/ata-VBOX_HARDDISK_VBa2440069-7fdbc2ad
這一個例子是判斷KERNEL是否符合sda和ATTR{size}是否符合對應大小. 條件成立就建立device node以及一個指向device node的soft link.

以下是另一個範例, 針對usb的裝置建立一個對應的symlink

KERNEL=="sd*", SUBSYSTEM=="block", ACTION=="add", SYMLINK+="test/usbhd%n"

這邊再額外補充rule的限制一下. 下方是經由udevadm指令抓出關於device的屬性. 而在參考attr撰寫規則有一點需要特別注意. 只允許混合device本身屬性和某一層parent的屬性而已. 也是只允許 '黑, 黑 或 黑'' 的組合.


looking at device '.../target2:0:0/2:0:0:0/block/sda':
    KERNEL=="sda"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{alignment_offset}=="0"
    ...
looking at parent device '.../target2:0:0/2:0:0:0':
    KERNELS=="2:0:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS=="sd"
    ATTRS{device_blocked}=="0"
    ...
looking at parent device '.../target2:0:0':
    KERNELS=="target2:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS==""

以下為match keys與assignment keys的列表

Key TypeKey Name
match keyKERNEL/SUBSYSTEM/DRIVER/ATTR{key}/ENV{key}/ACTION/TEST
assigment keyNAME/GROUP/MODE/OPTIONS/OWNER/OWN/RUN/SYMLINK/ENV{key}/IMPORT{type}/ATTR{key}/GOTO/LABEL/WAIT_FOR

Reference

  1. Writing udev rules
  2. Device Management
  3. Oracle® Linux Administrator's Guide for Release 6 : About Udev Rules

留言

這個網誌中的熱門文章

yocto recipe : (1) 撰寫 recipe

yocto recipe : (2) 撰寫 bbappend

yocto recipe : (3) 使用 External Source 來編譯軟體