연결된 포트에 따라 (USB) 장치의 이름을 지속적으로 지정하고 싶습니다.
udevadmin을 사용하여 다음 정보를 찾았습니다.
# udevadm info --name=input/event3 | grep ID_PATH
E: ID_PATH=platform-ci_hdrc.1-usb-0:1.1.4:1.0
E: ID_PATH_TAG=platform-ci_hdrc_1-usb-0_1_1_4_1_0
그래서 장치에는 내가 원하는 것과 비슷한 ID_PATH 및 ID_PATH_TAG 속성이 있는 것 같습니다.
udev.rule과 일치하도록 추가했습니다.
SYMLINK+="foo-%E{ID_PATH_TAG} foo1-$env{ID_PATH} foo2-$env{ID_PATH_TAG}"
(이 3가지 변형은 필사적으로 노력하고 있는 것뿐입니다... 작동하면 하나만으로 충분합니다.)
규칙이 실행되고 로그에 오류가 없습니다(로그 수준 = 디버그).
그러나 생성된 심볼릭 링크는
/dev/foo-
/dev/foo1-
/dev/foo2-
따라서 내 규칙이 실행될 때 ID_PATH 및 ID_PATH_TAG 속성이 설정되지 않은 것 같습니다. 주문 시 알아야 할 사항이 있나요?
답변1
장치의 속성 목록을 얻으려면 먼저 이 명령을 실행하십시오.
udevadm info -a -p $(udevadm info -q path -n <devpath>)
그러면 다음과 같이 할 수 있습니다
... SYMLINK+=”device_$attr{serial}”, ...
아래와 같이 필수 데이터로 환경 변수를 설정해야 하는 경우도 있습니다.
... ENV{SERIAL_NUMBER}="$attr{serial_number}"
나중에 이렇게 사용해보세요.
... SYMLINK+="device_$env{SERIAL_NUMBER}"
답변2
ID_PATH를 사용하여 확인한 기존 규칙은 모두 60-* 이상입니다. 내 평점은 45-*이며 역사적인 이유를 제외하면 특별한 것은 없습니다.
내 규칙 파일의 이름을 바꾸면 규칙 번호가 차이를 만든다는 사실이 드러났습니다.
59-foo.rules
: ID_PATH/ID_PATH_TAG가 빈 문자열로 확장됩니다.60-foo.rules
: ID_PATH/ID_PATH_TAG가 빈 문자열로 확장됩니다.61-foo.rules
: ID_PATH/ID_PATH_TAG가 올바르게 확장되었습니다.
설명은 다음과 60-persistent-input.rules
같습니다.
SUBSYSTEMS=="pci|usb|platform|acpi", IMPORT{builtin}="path_id"
내장 함수에 대한 문서를 찾을 수 없지만 내장 path_id가 ID_PATH/ID_PATH_TAG를 환경에 넣는 것 같습니다.