Udev- 장치가 어떤 서브 시스템에 속하는지 어떻게 알 수 있습니까?


19

예를 들어 / dev / sdb 장치가 있습니다. udev 하위 시스템인지 어떻게 알 수 있습니까?

답변:


12
$ udevadm info -q all -a /dev/sdb

참고 : 위의 장치 정보에 대해 UDEV 데이터베이스를 info쿼리합니다. 모든 정보를 쿼리 -q all하고 있습니다 /sys.이 장치 레이블과 관련된 모든 속성을 사용하고 있습니다.

발췌

   --attribute-walk|-a
       Print all sysfs properties of the specified device that can be used 
       in udev rules to match the specified device. It prints all devices
       along the chain, up to the root of sysfs that can be used in udev 
       rules.

여기 내 /dev/sda장치가 있습니다.

$ udevadm info -q all -a /dev/sda | grep parent
walks up the chain of parent devices. It prints for every device
and the attributes from one single parent device.
  looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0':
  looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0':
  looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1/host0':
  looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1':
  looking at parent device '/devices/pci0000:00/0000:00:1f.2':
  looking at parent device '/devices/pci0000:00':

이 두 명령의 차이점

@sepero의 답변은 리프 노드의 UDEV 장치와 관련된 정보를 보여줍니다.

Sepero의 답변

$ udevadm info -q all -n /dev/sda > udevadm_info_1.txt

slm의 답변

내 대답은 /sys장치 의 전체 체인 계층 구조를 걷는 속성을 보여줍니다 .

$ udevadm info -q all -a /dev/sda > udevadm_info_2.txt

이 둘의 차이점을 볼 수 있습니다.

$ diff -y udevadm_info_1.txt udevadm_info_2.txt  \
    > udevadm_info_diff.txt

참고 : 저는 Fedora 19에서 204 버전을 사용하고 있습니다 udevadm.

$ udevadm --version
204

왜이 복잡한 명령이 아닌 udevadm info -a -n /dev/sdb?
질 'SO-정지 존재 악마'

@Gilles-모든 상위 노드에 대한 모든 ATTRS를 덤프합니다.
slm

출력도 동일합니다.
Gilles 'SO- 악한 중지'

Gilles-데비안에 있습니까? udevadm의 버전은 무엇입니까? 위의 두 명령을 실행하면이 두 파일을 얻습니다. 단일 udevadm 출력중첩 된 udevadm 출력 . 출력을 볼 때 단일 명령은 모든 부모의 모든 출력을 결합하는 반면 내 버전에는 ATTRS가 파생되는 부모가 표시됩니다.
slm

pastebin.com/NHg9pydA 는의 출력이 udevadm info -q all아닌 의 출력 입니다 udevadm info -a. -a에 대한 지름길 이라고 생각 합니다 -q all --attribute-walk. 아니면 버전과 다른가요? 나는이 변화를 기억하지 못하지만 몇 년 동안 Fedora를 사용해 본 적이 없다 (그러나 왜 배포판이 이것을 패치 할 것인가?).
Gilles 'SO- 악한 중지'

5

udevadm info 이런 종류의 정보를 제공합니다.

서브 시스템을 구체적으로 원하는 경우 :

udevadm info -n /dev/sdb -q property | sed -n 's/SUBSYSTEM=//p'

udev 규칙을 작성할 때 가장 유용한 명령은

udevadm info -a -n /dev/sdb

이것은 udev 규칙에서 장치를 일치시키는 데 사용할 수있는 규칙을 인쇄합니다. 첫 번째 블록은 장치 자체에 관한 것이고 후속 블록은 장치 트리의 조상에 관한 것입니다. 유일한 경고는 다른 조상에 해당하는 키를 혼합 할 수 없다는 것입니다. 예를 들어,이 발췌 부분에서

KERNEL=="sdb"
SUBSYSTEM=="block"
…
KERNELS=="5:0:0:0"
SUBSYSTEMS=="scsi"
DRIVERS=="sd"
ATTRS{model}=="Yoyodyne Diskinator"
…
KERNELS=="0000:00:1f.2"
SUBSYSTEMS=="pci"
DRIVERS=="ahci"

그런 다음이 장치와 일치 SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}="Yoyodyne Diskinator"하거나 일치 SUBSYSTEM=="block", SUBSYSTEMS=="pci", DRIVERS="ahci"하지 않을 수 있습니다 SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}="Yoyodyne Diskinator", DRIVERS="ahci".

규칙에 사용할 정보를 얻는 또 다른 방법은

udevadm info -q property -n /dev/sdb --export

이것은 udev 규칙에서 사용할 수 있는 형식의 장치 속성 값을 인쇄합니다 .KEY=VALUEENV{KEY}=="VALUE"

장치에 /dev항목 이없는 경우 /sys대신 경로를 사용 하여 장치 를 참조 할 수 있습니다 ( 예 :

udevadm info -a -p /sys/block/sdb

(이 경우 유용한 예는 아닙니다. 이것은 범주가 일반적이지 않고 /dev아직 항목이없는 장치에 유용합니다 ).

udev 규칙을 변경하면 자동으로 읽습니다. 그러나 나중에 시스템에 연결된 장치에만 적용됩니다. 이미 연결된 장치에 새 규칙을 적용하려면 udevadm trigger(옵션을 사용 하여 응용 프로그램을 특정 장치로 제한)을 사용하십시오.


4
$ udevadm info -q all -n /dev/sdb

차분은 B / W 및이 방법 광산은이 프로그램이 단지 리프 노드 /sys에 대한 /dev/sdb. 다른 접근 방식은 분기와 함께 리프 노드의 전체 트리 계층 구조를 보여줍니다.
slm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.