udev 규칙이 새로운 장치 속성을 생성할 수 있습니까?

udev 규칙이 새로운 장치 속성을 생성할 수 있습니까?

속성을 생성하기 위해 udev 규칙을 작성했습니다 /etc/udev/rules.d/99-backlight-scale.rules.

ACTION=="add", \
KERNEL=="amdgpu_bl1", \
SUBSYSTEM=="backlight", \
DEVPATH=="/devices/pci0000:00/0000:00:08.1/0000:03:00.0/drm/card1/card1-eDP-1/amdgpu_bl1", \
ENV{GSD_BACKLIGHT_SCALE}="non-linear"

udevadm test /sys/class/backlight/amdgpu_bl1속성을 만들어야 한다고 말합니다.

DEVPATH=/devices/pci0000:00/0000:00:08.1/0000:03:00.0/drm/card1/card1-eDP-1/amdgpu_bl1
ACTION=add
SUBSYSTEM=backlight
TAGS=:seat:systemd:
CURRENT_TAGS=:seat:systemd:
ID_PATH=pci-0000:03:00.0
ID_PATH_TAG=pci-0000_03_00_0
ID_FOR_SEAT=backlight-pci-0000_03_00_0
GSD_BACKLIGHT_SCALE=non-linear
SYSTEMD_WANTS=systemd-backlight@backlight:amdgpu_bl1.service
USEC_INITIALIZED=23289223
Unload kernel module index.
Unloaded link configuration context.

그러나 다시 시작한 후에는 해당 속성이 출력에 나타나지 않습니다 udevadm info --path=/sys/class/backlight/amdgpu_bl1 --query=property.

DEVPATH=/devices/pci0000:00/0000:00:08.1/0000:03:00.0/drm/card1/card1-eDP-1/amdgpu_bl1
SUBSYSTEM=backlight
USEC_INITIALIZED=23289223
NVME_HOST_IFACE=none
ID_PATH=pci-0000:03:00.0
ID_PATH_TAG=pci-0000_03_00_0
ID_FOR_SEAT=backlight-pci-0000_03_00_0
SYSTEMD_WANTS=systemd-backlight@backlight:amdgpu_bl1.service
TAGS=:systemd:seat:
CURRENT_TAGS=:systemd:seat:

편집: 다음과 같이 devpath 줄을 완전히 제거했습니다.아치 위키의 이 섹션. 현재 규칙은

ACTION=="add", \
KERNEL=="amdgpu_bl1", \
SUBSYSTEM=="backlight", \
ENV{GSD_BACKLIGHT_SCALE}="non-linear"

하지만 여전히 작동하지 않습니다.

다른 udev 규칙을 생성하고 파일에 작성하여 실행 중인지 확인하려고 했습니다. ACTION=="add", KERNEL=="amdgpu_bl1", SUBSYSTEM=="backlight", RUN+="/bin/sh -c 'echo applied > /home/basilmari/udev-debug.log'" "실제로 작동한다.

그러면 udev 규칙이 장치 속성을 먼저 생성할 수 있습니까? 이를 명확하게 설명하는 자료를 찾지 못했습니다.

답변1

DEVPATH 또는 DEVNAME을 신원 확인으로 사용하지 마십시오. 변경될 수 있습니다! - 적어도 - 자신이 무엇을 하고 있는지 정확히 알지 못한다면 말이죠. (비전문가)

편집: BTW, 을 입력하면 udevadm info /sys[DEVPATH]DEVPATH는 환경 변수를 의미하는 접두사 E 아래에 나열됩니다.ENV{DEVPATH}==

실제 DEVPATH로 실행 하면 udevadm test /sys[DEVPATH]환경 속성이 할당된 것으로 표시되지만 재부팅하면 DEVPATH가 변경되어 일치 항목을 얻지 못하고 속성이 할당되지 않습니다. 어쩌면 이것이 당신의 상황일 수도 있습니다. 당신이 보면https://www.linux.org/docs/man7/udev.html, udev 규칙의 $devpath, %p가 실제 DEVPATH로 확장되고 $devnode, %N이 실제 DEVNAME, 장치의 커널 또는 udev 설정으로 확장되는 것을 볼 수 있습니다.

관련 정보