구입한 새 USB 장치에 대한 udev 규칙을 추가하라는 요청을 받았습니다. 이것이 왜 필요하고 가치 있는지에 대한 아주 간단한 설명은 없는 것 같습니다. 항상 장치를 동일한 경로에 매핑하시겠습니까? 예를 들어, 항상 장치를 /dev/ttyUSB1
또는 /dev/sda4
?
존재하다 /etc/udev/rules.d/99-totalphase.rules
:
# This file causes the mode of all Total Phase usb devices to be made
# writable for any user.
# Aardvark I2C/SPI Host Adapter
ACTION=="add", SUBSYSTEM=="usb_device", SYSFS{idVendor}=="0403", SYSFS{idProduct}=="e0d0", MODE="0666"
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="0403", ATTR{idProduct}=="e0d0", MODE="0666"
# Beagle Protocol Analyzers
ACTION=="add", SUBSYSTEM=="usb_device", SYSFS{idVendor}=="1679", SYSFS{idProduct}=="2001", MODE="0666"
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="1679", ATTR{idProduct}=="2001", MODE="0666"
답변1
실제로 특정 장치를 항상 동일한 위치에 매핑하는 것은 udev의 일반적인 용도 중 하나입니다. 장치는 여러 위치에 있을 수도 있습니다. 예를 들어, 디스크 파티션은 /dev/sda1
자동 번호(예:)뿐만 아니라 파일 시스템의 레이블( /dev/disk/by-label/*
), 파일 시스템의 UUID( /dev/disk/by-uuid/*
) 및 디스크 장치의 일련번호 액세스( /dev/disk/by-id/*
). 장치가 언제 연결되어 있는지, 어떤 포트에 연결되어 있는지 신경 쓰지 않고 특정 장치에 액세스하려는 경우 가장 명확한 방법은 해당 특정 하드웨어 장치와 일치하는 udev 규칙을 추가하고 /dev
의미 있는 이름을 가진 항목을 만드는 것입니다.
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="1679", ATTR{idProduct}=="2001", \
SERIAL=="123456", MODE="0666", SYMLINK+="analyzer-foo"
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="1679", ATTR{idProduct}=="2001", \
SERIAL=="123789", MODE="0666", SYMLINK+="analyzer-bar"
udev 규칙의 또 다른 일반적인 목적은 장치 노드에 대한 권한을 제어하여 일반적으로 특정 데몬이 액세스할 수 있도록 허용하는 것입니다. 이것이 바로 OWNER
, GROUP
및 지시어 의 목적 MODE
입니다 SECLABEL
.
세 번째 이유 범주는 장치가 연결될 때 특정 작업을 트리거하는 것입니다. 예를 들어, 장치에 펌웨어를 업로드하거나 장치의 사용 모드를 선택하거나 시스템의 특정 부분에 새 네트워크 연결이나 프린터를 사용할 수 있음을 알려야 할 수 있습니다.