본문으로 건너뛰기

Linux udev

udev


  • udev(userspace /dev)는 Linux 커널용 장치 관리자입니다.
  • udevd 는 커널 uevent를 감시하다가 들어오는 이벤트를 udev로 전달합니다.
  • 사용자는 커스텀 규칙을 /etc/udev/rules.d/에 등록할 수 있습니다.
  • 디바이스 정보는 udevadm info -ap $(udevadm info -q path -n /dev/<device>) 명령어로 확인할 수 있습니다.
  • 규칙 작성을 위한 연산자
    • ==
    • !=
    • =: 값을 할당합니다.
    • :=: 값을 할당하고 이후 변경을 허용하지 않습니다.
    • +=: 값을 리스트에 추가합니다.
    • -=: 값을 리스트에서 제거합니다.
정보

룰 적용이 되고 있는지 확인하려면 아래 명령어로 로그를 확인해보면 됩니다.

journalctl -ex -u systemd-udevd.service

xx-descriptive-name.rules

Files should be named xx-descriptive-name.rules, the xx should be chosen first according to the following sequence points:

< 60 most user rules; if you want to prevent an assignment being overriden by default rules, use the := operator. These cannot access persistent information such as that from vol_id

< 70 rules that run helpers such as vol_id to populate the udev db

< 90 rules that run other programs (often using information in the udev db)

>=90 rules that should run last

Example

/etc/udev/rules.d/50-gpio.rules

SUBSYSTEM=="i2c-dev", GROUP="i2c", MODE="0660"
SUBSYSTEM=="spidev", GROUP="spi", MODE="0660"
SUBSYSTEM=="input", GROUP="input", MODE="0660"
KERNEL=="ttyS*", GROUP="dialout", MODE="0660"
KERNEL=="ttyAML*", GROUP="dialout", MODE="0660"
KERNEL=="ttySAC*", GROUP="dialout", MODE="0660"

SUBSYSTEM=="gpio", GROUP="gpio", MODE="0660"
# /sys/class/gpio
SUBSYSTEM=="gpio*", PROGRAM="/bin/sh -c 'find -L /sys/class/gpio/ -maxdepth 2 -exec chgrp -HR gpio {} \; -exec chmod -R 770 {} \; || true'"

첫 번째 줄은 i2c-dev 장치가 감지되면(==) 그룹은 i2c로(=), 모드는 0660으로(=) 설정하라는 의미입니다.