public:it:linux:udev

这是本文档旧的修订版!


UDEV 规则配置

  • KERNEL / SUBSYSTEM / DRIVER / ATTR 只匹配本设备不匹配父设备. 加个S, 就可以在本设备以及父设备整条链上搜索匹配。 KERNELS / SUBSYSTEMS / DRIVERS / ATTRS
  • 字符匹配:
    * - match any character, zero or more times
    ? - match any character exactly once
    [] - match any single character specified in the brackets, ranges are also permitted
  • 替换符
    $kernel, %k:        设备的内核设备名称,例如:sda、cdrom。
    $number, %n:        设备的内核号码,例如:sda3 的内核号码是 3。
    $devpath, %p:       设备的 devpath路径。
    $id, %b:          设备在 devpath里的 ID 号。
    $sysfs{file}, %s{file}:     设备的 sysfs里 file 的内容。其实就是设备的属性值。
    $env{key}, %E{key}:   一个环境变量的值。
    $major, %M:        设备的 major 号。
    $minor %m:        设备的 minor 号。
    $result, %c:        PROGRAM 返回的结果。
    $parent, %P:          父设备的设备文件名。
    $root, %r:          udev_root的值,默认是 /dev/。
    $tempnode, %N:      临时设备名。
    %%:            符号 % 本身。
    $$:             符号 $ 本身。
  • 获取设备信息:
    • udevadm info 指令 取代 udevinfo
    • udevadm info -a -p /sys/block/sda 获取设备ATTRS各项属性
  • last_rule - 到本条规则为止,后续规则不起作用
    • OPTIONS+="last_rule"
  • udevadm test /sys/block/sda 测试规则
  • udevadm control --reload-rules 修改规则后重新加载生效
  • NAME= 只对网路设备起作用
    NAME
        The name to use for a network interface. See
        systemd.link(5) for a higher-level mechanism
        for setting the interface name. The name of a
        device node cannot be changed by udev, only
        additional symlinks can be created.
  • ubuntu默认的usb storage mount 规则 /etc/udev/rules.d/10-usb-storage.rules
    KERNEL!="sd[a-z][0-9]",GOTO="automount_exit"
    ACTION=="add", SUBSYSTEM=="block", RUN+="/bin/mkdir -p /media/%k", RUN+="/usr/bin/mount $devnode /media/%k"
    ACTION=="remove", RUN+="/usr/bin/umount /media/%k",RUN+="/bin/rmdir /media/%k"
    LABEL="automount_exit"
  • 指定类型
    ACTION=="add", KERNEL=="sd*[0-9]", SUBSYSTEMS=="block", SYMLINK+="sd-myself", ATTRS{model}=="Your_Harddisk_Model"`
  • public/it/linux/udev.1701321048.txt.gz
  • 最后更改: 2023/11/30 13:10
  • oakfire