udev는 ID_PATH를 사용하여 영구 명명된 심볼릭 링크를 생성할 수 없습니다.

udev는 ID_PATH를 사용하여 영구 명명된 심볼릭 링크를 생성할 수 없습니다.

연결된 포트에 따라 (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-*이며 역사적인 이유를 제외하면 특별한 것은 없습니다.

내 규칙 파일의 이름을 바꾸면 규칙 번호가 차이를 만든다는 사실이 드러났습니다.

  1. 59-foo.rules: ID_PATH/ID_PATH_TAG가 빈 문자열로 확장됩니다.
  2. 60-foo.rules: ID_PATH/ID_PATH_TAG가 빈 문자열로 확장됩니다.
  3. 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를 환경에 넣는 것 같습니다.

관련 정보