UDEV 규칙, "NAME" 변수가 작동하지 않음

UDEV 규칙, "NAME" 변수가 작동하지 않음

개념 이해를 돕기 위해 간단한 udev 규칙을 작성했습니다.

#SUBSYSTEM=="block", ATTR{size}=="3913727", SYMLINK="AlphaUSB"
SUBSYSTEM=="block", ATTR{size}=="3913727", NAME="HelloUSB"

UDEV 규칙의 심볼릭 링크 부분은 작동하지만(주석 처리됨) UDEV 규칙의 이름 부분은 작동하지 않습니다. 내가 뭘 잘못했는지 모르겠나요?

질문의 두 번째 부분은 심볼릭 링크를 만들 때 무엇을 해야 하느냐는 것입니다. 나는 그것이 장치 파일을 가리키고 있다는 것을 이해하지만 그것은 쓸모가 없습니다. USB에 들어가기 위한 바로가기로 사용할 수 있도록 마운트 지점을 가리키고 싶습니다. 어떻게 할 수 있는지에 대한 아이디어가 있습니까?

답변1

NAMEudev 규칙의 키 에 할당하여 장치 노드의 이름을 바꿀 수 없습니다 . 적어도 systemd udev에는 없습니다. 네트워크 장치 이름만 변경할 수 있습니다. udev 매뉴얼에서:

   NAME
       The name to use for a network interface. See
       systemd.link(5) for a higher-level mechanism
       for setting the interface name. The name of a
       device node cannot be changed by udev, only
       additional symlinks can be created.

장치에 대한 udev 심볼릭 링크는 그 자체로는 특별하지 않습니다. 이는 장치 노드에 대한 파일 시스템 심볼릭 링크일 뿐입니다. 그러나 udev 심볼릭 링크 규칙의 유용한 사용 예는 장치 이름이 커널이 장치를 검색하는 순서에 따라 달라지기 때문에 특정 파일 시스템이 있는 장치 이름을 예측할 수 없다는 것입니다. 한 번은 썸 드라이브가 장치 이름을 얻을 수도 있고 /dev/sdf, 또 다른 때는 얻을 수도 있습니다 /dev/sdg. /dev/disk/by-uuid/디스크에 있는 파일 시스템의 uuid가 커널 장치 이름을 가리키는 심볼릭 링크인 Ubuntu 랩탑에서 수행되는 것처럼 예측 가능한 심볼릭 링크 이름을 추가하는 Udev 규칙이 일반적으로 설치됩니다 .

마지막 질문에 관해서는 udev 심볼릭 링크가 장치 노드 이외의 다른 항목을 가리킬 수 없으므로 마운트 지점을 가리킬 수 없습니다.

   SYMLINK
       The name of a symlink targeting the node. Every
       matching rule adds this value to the list of
       symlinks to be created.

원하는 작업을 수행하려면 파일 시스템에 레이블을 지정하고 파일 시스템을 마운트하는 데 사용하는 프로그램(udisks2?)에서 마운트 지점 이름에 레이블을 사용하도록 할 수 있습니다.

답변2

여러 USB 장치가 동일한 컴퓨터에 연결되어 있을 때 USB 장치 이름을 알 수 없는 문제를 해결하는 방법은 무엇입니까? 가장 쉬운 방법은 /dev 폴더의 장치 이름을 사용하는 것입니다. USB 어댑터를 연결하면 아래와 같이 /dev/serial/by-id에서 찾을 수 있는 일련 이름이 자동으로 생성됩니다.

  /dev/serial/by-id/usb-US_Digital_USB__-__QSB_81658-if00-port0

QSB_81658은 결국 해당 USB 장치의 고유한 이름이 됩니다.

위에 표시된 것처럼 모든 장치에는 고유한 상수 이름이 있기 때문에 중복되는 개발 규칙을 작성하려고 했습니다. 또한 개발 규칙을 적용할 때와 같은 몇 가지 문제를 발견했습니다.

개인에게 이름을 할당하는 개발 규칙을 작성합니다. 우리가 알고 있듯이 모든 QSB 어댑터에는 고유한 일련 번호가 있으며, 이 일련 번호는 검은색 어댑터의 전면 부분에서 찾을 수 있습니다. 내 경우에는 두 개의 QSB0 어댑터가 있습니다. 하나의 일련 번호는 81830이고 다른 하나의 일련 번호는 81658입니다. 이 속성(ATTRS{serial})을 사용하여 이 두 어댑터에 이름을 할당하겠습니다.

먼저 udevadm을 실행하여 USB 장치 세부 정보를 살펴보세요.

$ udevadm 정보 -a -n /dev/ttyUSB0

  Udevadm info starts with the device specified by the devpath and then
  walks up the chain of parent devices. It prints for every device
  found, all possible attributes in the udev rules key format.
  A rule to match, can be composed by the attributes of the device
  and the attributes from one single parent device.

    looking at device '':
      KERNEL=="ttyUSB0"
      SUBSYSTEM=="tty"
      DRIVER==""

    looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/ttyUSB0':
      KERNELS=="ttyUSB0"
      SUBSYSTEMS=="usb-serial"
      DRIVERS=="ftdi_sio"
      ATTRS{latency_timer}=="16"
      ATTRS{port_number}=="0"

    looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0':
      KERNELS=="1-8:1.0"
      SUBSYSTEMS=="usb"
      DRIVERS=="ftdi_sio"
      ATTRS{authorized}=="1"
      ATTRS{bAlternateSetting}==" 0"
      ATTRS{bInterfaceClass}=="ff"
      ATTRS{bInterfaceNumber}=="00"
      ATTRS{bInterfaceProtocol}=="ff"
      ATTRS{bInterfaceSubClass}=="ff"
      ATTRS{bNumEndpoints}=="02"
      ATTRS{interface}=="USB <-> QSB"
      ATTRS{supports_autosuspend}=="1"

    looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-8':
      KERNELS=="1-8"
      SUBSYSTEMS=="usb"
      DRIVERS=="usb"
      ATTRS{authorized}=="1"
      ATTRS{avoid_reset_quirk}=="0"
      ATTRS{bConfigurationValue}=="1"
      ATTRS{bDeviceClass}=="00"
      ATTRS{bDeviceProtocol}=="00"
      ATTRS{bDeviceSubClass}=="00"
      ATTRS{bMaxPacketSize0}=="8"
      ATTRS{bMaxPower}=="500mA"
      ATTRS{bNumConfigurations}=="1"
      ATTRS{bNumInterfaces}==" 1"
      ATTRS{bcdDevice}=="0600"
      ATTRS{bmAttributes}=="80"
      ATTRS{busnum}=="1"
      ATTRS{configuration}==""
      ATTRS{devnum}=="5"
      ATTRS{devpath}=="8"
      ATTRS{idProduct}=="6001"
      ATTRS{idVendor}=="0403"
      ATTRS{ltm_capable}=="no"
      ATTRS{manufacturer}=="US Digital"
      ATTRS{maxchild}=="0"
      ATTRS{product}=="USB <-> QSB"
      ATTRS{quirks}=="0x0"
      ATTRS{removable}=="unknown"
      ATTRS{serial}=="81830"
      ATTRS{speed}=="12"
      ATTRS{urbnum}=="72190"
      ATTRS{version}==" 2.00"

    looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1':
      KERNELS=="usb1"
      SUBSYSTEMS=="usb"
      DRIVERS=="usb"
      ATTRS{authorized}=="1"
      ATTRS{authorized_default}=="1"
      ATTRS{avoid_reset_quirk}=="0"
      ATTRS{bConfigurationValue}=="1"
      ATTRS{bDeviceClass}=="09"
      ATTRS{bDeviceProtocol}=="01"
      ATTRS{bDeviceSubClass}=="00"
      ATTRS{bMaxPacketSize0}=="64"
      ATTRS{bMaxPower}=="0mA"
      ATTRS{bNumConfigurations}=="1"
      ATTRS{bNumInterfaces}==" 1"
      ATTRS{bcdDevice}=="0404"
      ATTRS{bmAttributes}=="e0"
      ATTRS{busnum}=="1"
      ATTRS{configuration}==""
      ATTRS{devnum}=="1"
      ATTRS{devpath}=="0"
      ATTRS{idProduct}=="0002"
      ATTRS{idVendor}=="1d6b"
      ATTRS{interface_authorized_default}=="1"
      ATTRS{ltm_capable}=="no"
      ATTRS{manufacturer}=="Linux 4.4.0-128-generic xhci-hcd"
      ATTRS{maxchild}=="16"
      ATTRS{product}=="xHCI Host Controller"
      ATTRS{quirks}=="0x0"
      ATTRS{removable}=="unknown"
      ATTRS{serial}=="0000:00:14.0"
      ATTRS{speed}=="480"
      ATTRS{urbnum}=="129"
      ATTRS{version}==" 2.00"

    looking at parent device '/devices/pci0000:00/0000:00:14.0':
      KERNELS=="0000:00:14.0"
      SUBSYSTEMS=="pci"
      DRIVERS=="xhci_hcd"
      ATTRS{broken_parity_status}=="0"
      ATTRS{class}=="0x0c0330"
      ATTRS{consistent_dma_mask_bits}=="64"
      ATTRS{d3cold_allowed}=="1"
      ATTRS{device}=="0xa12f"
      ATTRS{dma_mask_bits}=="64"
      ATTRS{driver_override}=="(null)"
      ATTRS{enable}=="1"
      ATTRS{irq}=="120"
      ATTRS{local_cpulist}=="0-3"
      ATTRS{local_cpus}=="f"
      ATTRS{msi_bus}=="1"
      ATTRS{numa_node}=="-1"
      ATTRS{subsystem_device}=="0x8694"
      ATTRS{subsystem_vendor}=="0x1043"
      ATTRS{vendor}=="0x8086"

    looking at parent device '/devices/pci0000:00':
      KERNELS=="pci0000:00"
      SUBSYSTEMS==""
      DRIVERS==""

그러면 인쇄된 결과에서 아래 한 줄이 표시됩니다.

            ATTRS{serial}=="81830"

/etc/udev/rules.d/ 디렉토리로 이동합니다.

명령을 사용하여 990-usdigital-qsbadapter.rules를 추가합니다.

  sudo nano 990-usdigital-qsbadapter.rules

그런 다음 파일에 다음을 넣으십시오.

  #This rule file is used to assign names for qsb adapter from USdigital 
  KERNELS=="1-8",SUBSYSTEMS=="usb",ATTRS{serial}=="81830",NAME="qsb81830"
  KERNELS=="1-8",SUBSYSTEMS=="usb",ATTRS{serial}=="81658",NAME="qsb81658"

규칙을 테스트하고 실행할 수 있습니다.

  udevadm control --reload-rules
  udevadm test /dev/serial/by-id/usb-US_Digital_USB__-__QSB_81658-if00-port0

권한 문제로 인해 NAME을 변경할 수 없습니다. 대신 SYMLINK를 사용합니다.

(UDEV 규칙, "NAME" 변수가 작동하지 않음) udev 규칙의 NAME 키에 할당하여 장치 노드의 이름을 바꿀 수 없습니다. 적어도 systemd udev에는 없습니다. 네트워크 장치 이름만 변경할 수 있습니다. udev 매뉴얼에서:

  NAME
         The name to use for a network interface. See
         systemd.link(5) for a higher-level mechanism
         for setting the interface name. The name of a
         device node cannot be changed by udev, only
         additional symlinks can be created.

따라서 규칙 파일 내용을 #이 규칙 파일은 USdigital의 qsb 어댑터 이름을 할당하는 데 사용됩니다.

  ATTRS{serial}=="81830",SYMLINK+="QSB830"
  ATTRS{serial}=="81658",SYMLINK+="QSB658"

아래 사진을 클릭하시면 결과를 확인하실 수 있습니다. 결과 인쇄

관련 정보