udevinfo


여러분들이 규칙을 만드는데 가장 쉽게 사용할 수 있는 툴(Tool)이 udevinfo일 것 입니다.  이것을 사용하는데 여러분들이 알아야 하는 것은 우리가 알고 싶어하는 장치의 sysfs 디바이스 경로 입니다. 해당 경로만 안다면 쉽게 툴을 사용할 수 있습니다. 아래는 사용 예시입니다.


# udevinfo -a -p /sys/block/sda

 looking at device '/block/sda':
   KERNEL=="sda"
   SUBSYSTEM=="block"
   ATTR{stat}=="  128535     2246  2788977   766188    73998   317300  3132216   5735004        0   516516  6503316"
   ATTR{size}=="234441648"
   ATTR{removable}=="0"
   ATTR{range}=="16"
   ATTR{dev}=="8:0"

 looking at parent device '/devices/pci0000:00/0000:00:07.0/host0/target0:0:0/0:0:0:0':
   KERNELS=="0:0:0:0"
   SUBSYSTEMS=="scsi"
   DRIVERS=="sd"
   ATTRS{ioerr_cnt}=="0x0"
   ATTRS{iodone_cnt}=="0x31737"
   ATTRS{iorequest_cnt}=="0x31737"
   ATTRS{iocounterbits}=="32"
   ATTRS{timeout}=="30"
   ATTRS{state}=="running"
   ATTRS{rev}=="3.42"
   ATTRS{model}=="ST3120827AS     "
   ATTRS{vendor}=="ATA     "
   ATTRS{scsi_level}=="6"
   ATTRS{type}=="0"
   ATTRS{queue_type}=="none"
   ATTRS{queue_depth}=="1"
   ATTRS{device_blocked}=="0"

 looking at parent device '/devices/pci0000:00/0000:00:07.0':
   KERNELS=="0000:00:07.0"
   SUBSYSTEMS=="pci"
   DRIVERS=="sata_nv"
   ATTRS{vendor}=="0x10de"
   ATTRS{device}=="0x037f"


위 내용을 보면 알 수 있듯이, udevinfo는 단순히 여러분들이 규칙을 작성할 때 있는 그대로  match key들로 사용할 수 있는 속성들을 나열해 줍니다. 위 예시로부터 두 개 정도의 예제 규칙을 만들어 보겠습니다.


SUBSYSTEM=="block", ATTR{size}=="234441648", NAME="my_hard_disk"
SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}=="ST3120827AS", NAME="my_hard_disk"


위 예제 중 파란 글을 주의 깊게 봐주세요. 임의의 장치로부터 속성(attribute)들을 결합한 올바른 문법의 규칙이지만 부모가 오직 하나, 단일 디바이스 일 때만 해당됩니다. 만약 부모 디바이스가 여러 개라면 대한 속성에는 사용할 수 없고 여러분의 규칙은 제대로 동작하지 않을 수 있습니다.


아래 규칙을 보면 두 개의 부모 디바이스로부터는 속성(attribute)을 매치 하지 못합니다.


SUBSYSTEM=="block", ATTRS{model}=="ST3120827AS", DRIVERS=="sata_nv", NAME="my_hard_disk"


여러분들은 많은 속성(attribute)을 사용할 수 있으며 그 중 몇 가지를 선택하여 규칙을 작성해야 합니다. 많은 사람들이 규칙을 작성할 때 지속적이고 인간이 인식 할 수 있는 방식으로 디바이스를 식별하는 속성들을 선택합니다. 위에 예제에서는 내 디스크의 크기와 모델번호를 속성으로 선택하였습니다. ATTRS{iodone}==“0x31373”과 같은 의미없는 속성을 사용하지는 않았습니다.


udevinfo 출력을 확인해 보세요. 임의의 장치에 대해 녹색 부분은 KERNEL과 ATTR 같은 표준 match key들입니다. 파랑과 빨강 부분은 SUBSYSTEMS와 ATTRS와 같은 속성들로 부모 디바이스와 연결되어 사용될 수 있습니다. udevinfo의 출력, 즉 계층적인 구조의 복잡함은 udevinfo에서 제공하는 값들을 정확하게 다룰 줄 안다면 매우 쉽게 사용할 수 있습니다.


주목해야 할 또 다른 점은(udevinfo 출력리스트 중  ST31208027AS(굵은 글씨) 참조) udevinfo 출력에서 나타난 속성들을 표시하는 텍스트 중 공백으로 이뤄진 부분입니다. 여러분들의 규칙에서 여분의 공간을 지정하거나 아니면 바로 위의 예시처럼 공백을 없앤 후 작성할 수 있습니다.


udevinfo를 사용할 때 유일한 문제는 여러분들이 알고자 하는 장치의 최상위 디바이스 경로를 알아야 한다는 것입니다.(ex. /sys/block/sda) 하지만 여러분들은 이미 존재하는 디바이스 노드에 대해 규칙을 작성하는거나 해당 디바이스의 경로를 찾기 위해서도 udevinfo를 사용할 수 있습니다.


# udevinfo -a -p $(udevinfo -q path -n /dev/sda)