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