udev 규칙에서 변수 호출

udev 규칙에서 변수 호출

ATTRS{name}=="abc123"이 존재하는지 확인하고 장치가 존재하는 경우 다양한 기능을 호출하는 여러 udev 규칙이 있습니다. 이러한 udev 규칙은 사용자 정의 임베디드 운영 체제용 bitbake에서 생성되었기 때문에 여러 위치에 있습니다. 이제 다른 하드웨어를 테스트하기 위해 이 장치를 변경하려는 경우 매번 각 ATTR{name} 호출을 변경하는 것은 너무 많은 시간이 소요됩니다.

내 솔루션은 $UDEVVAR="[device_name]"(보류 중)과 같은 일부 conf 파일에 var를 정의한 다음 각 ATTR{name} 호출을 ATTR{name}=="${UDEVVAR }"과 같은 것으로 변경하는 것이었습니다.

나는 규칙이 호출되지는 않았지만 개념 증명으로 작성한 로컬 규칙에서 이 접근 방식을 테스트했습니다. 동일한 개념을 따르더라도 현지 규칙은 약간 다릅니다. 제가 가지고 있는 플래시 드라이브가 무엇이든 ATTR{name}이 정의되지 않았기 때문에 USB 마우스와 해당 플래시 드라이브를 사용했습니다. udev 규칙은 다음과 같습니다.

SUBSYSTEM=="${UDEVVAR}", ACTION=="add", RUN+="/usr/local/bin/trigger.sh"

Trigger.sh는 로그 파일에 날짜 타임스탬프를 기록합니다. SUBSYSTEM이 =="block"으로 하드코딩되면 규칙이 성공적으로 호출되지만 UDEVVAR="block"이 정의되면 규칙이 호출되지 않습니다. 내 생각은 그것이 작동한다면 UDEVVAR="hidraw"를 정의하여 마우스를 테스트하는 것입니다.

이와 같은 작업을 시도하는 사람에 대한 많은 문서를 찾을 수 없는 것 같습니다. 제 생각에는 일종의 구문 오류가 발생하고 있거나 udev 규칙이 그러한 것을 허용하지 않는 것 같습니다.

도움을 주시면 감사하겠습니다!

답변1

문제를 해결하는 한 가지 방법은 템플릿에서 파일을 생성하는 것입니다.

개발 환경과 다른 디렉터리 트리에서 파일 복사본을 생성하되 변경하려는 값을 바꾸세요.

ATTRS{name}="%%NAME%%"

그런 다음 "def456"이 필요할 때 다음을 통해 파일을 실행하십시오.

sed -e 's/%%NAME%%/def456/' 

이를 위해서는 매크로 m4전처리기( man m4;info m4)가 편리합니다.

또한보십시오 man -k template.

관련 정보