USB connection
Google Coral Board를 실행하는 데 문제가 있습니다 Debian
. USB-C 포트 하드웨어가 연결되어 있는지 시스템이 확인할 수 있는지 확인하려고 합니다. 이를 수행하는 가장 좋은 방법은 무엇입니까? 어떤 도움이나 조언이라도 대단히 감사하겠습니다!
답변1
내 대답은 범용 USB입니다. 하드웨어 부족으로 인해 USB-C를 특별히 테스트하지 않았습니다. 그럼에도 불구하고 USB-C는 USB-1/2/3과 다를 수 있지만 수행해야 할 작업에 대한 대략적인 아이디어를 제공해야 합니다.
귀하의 의견을 토대로 장치가 연결되면 각 포트의 LED가 켜지기를 원한다는 것을 이해했습니다.
첫째, 이벤트 기반 접근 방식이 필요합니다.Udevd이는 장치가 추가되고 제거될 때 실행되는 규칙을 작성할 수 있도록 제공됩니다(시작 시 감지된 모든 장치가 이벤트를 실행하므로 add
시작 시 특별한 처리를 수행할 필요가 없습니다). 언뜻 보면 및 을 필터링 SUBSYSTEM=usb
하고 싶을 수도 있습니다 DEVTYPE=usb_device
. 적절한 규칙을 마련한 후,Udevd이벤트 유형 및 장치 경로와 같은 장치에 대한 일부 정보와 함께 장치가 추가되거나 제거될 때 이를 알려주는 핸들러 스크립트가 트리거됩니다 /sys
.
그런 다음 핸들러 스크립트는 포함된 정보를 검색하여 /sys
장치가 루트 USB 허브 중 하나의 알려진 포트에 연결되어 있는지 확인해야 합니다(참고자료 참조 /sys/bus/usb/devices/usb[0-9]
). 일부 장치는 허브에서 추가/제거될 수 있으므로 모든 장치 추가/제거가 표시등을 토글하는 것은 아닙니다. 이 경우 허브 자체만 표시등을 트리거합니다. 따라서 각 이벤트에 대해 파일의 심볼릭 링크 대상을 확인하세요 port
. 대상 이름에 허브 이름과 포트 번호가 표시됩니다.
예를 들어 내 시스템에서는... 각 USB 버전/속도에 자체 버스가 있는 것 같으므로 루트 허브를 보면 다음과 같습니다.
$ lsusb -t |grep ^/
/: Bus 09.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/4p, 12M
/: Bus 08.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/2p, 12M
/: Bus 07.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/5p, 12M
/: Bus 06.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/5p, 12M
/: Bus 05.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 5000M
/: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 480M
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/4p, 480M
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/5p, 480M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/5p, 480M
버스 1, 2, 3과 6, 7, 9는 동일한 물리적 포트를 공유합니다(동일한 PCI 장치 번호를 공유하지만 기능만 다릅니다). 버스 4 및 5와 동일합니다(PCI 기능도 동일하므로 둘 다 동일한 xhci 드라이버를 사용하는 이유를 설명합니다). 버스 8은 USB1 전용입니다. 온보드 USB2 포트가 4개뿐이므로 이러한 장치 중 일부에는 내부 USB 헤더가 있습니다. 특수 온보드 장치 또는 동일한 칩/PCB를 기반으로 하는 기타 마더보드 모델용으로 예약된 헤더와 같이 일부에는 헤더가 전혀 없을 수도 있습니다.
이 명령은 모든 인터페이스( )를 제외하고 데스크탑에 연결된 모든 장치를 살펴보고 *:*
그 아래에 포트 심볼릭 링크를 인쇄합니다.
$ for f in /sys/bus/usb/devices/+([^:])/*port*; do printf '%-32s: %s\n' $f $(readlink $f); done
/sys/bus/usb/devices/1-2.1/port : ../1-2:1.0/1-2-port1
/sys/bus/usb/devices/1-2.2/port : ../1-2:1.0/1-2-port2
/sys/bus/usb/devices/1-2.4/port : ../1-2:1.0/1-2-port4
/sys/bus/usb/devices/1-2/port : ../1-0:1.0/usb1-port2
/sys/bus/usb/devices/4-1/port : ../4-0:1.0/usb4-port1
/sys/bus/usb/devices/5-1.1/port : ../5-1:1.0/5-1-port1
/sys/bus/usb/devices/5-1.3/port : ../5-1:1.0/5-1-port3
/sys/bus/usb/devices/5-1/port : ../5-0:1.0/usb5-port1
/sys/bus/usb/devices/7-1/port : ../7-0:1.0/usb7-port1
아래의 장치를 보고 있습니다 /sys/bus/usb/devices/
. udev는 전체 경로를 제공합니다 . 이는 실제 장치 경로를 얻는 /sys/devices/
데 사용할 수 있습니다 .udevadm info
이를 보고 기본 장치 정보를 살펴보면 내 모니터 허브에 3개의 장치 usb1-port2
(1-2의 키보드, 마우스, 웹캠)가 버스 4/5에 있고 USB3 허브가 연결되어 있음을 알 수 있습니다. 및 usb4-port1
( usb5-port1
동일한 물리적 포트, EHCI/XHCI) 및 그 아래의 두 개의 USB3 장치(5-1) 및 마지막으로 저속 직렬 장치 usb7-port1
.
보조 허브가 있는 경우이내에장치를 식별하고 해당 포트를 설명하는 방법을 찾아야 합니다. 예를 들어 RPi v3에는 4개의 외부 USB 포트가 있지만 장치를 살펴보면 SoC의 온보드 컨트롤러에는 USB2 포트가 1개만 있고 5개의 포트 허브가 있고 첫 번째 포트는 온보드 USB 이더넷 컨트롤러에 연결되고 나머지 4개의 USB 포트를 사용할 수 있습니다.
마지막으로, 루트 허브가 여러 개인 경우 공급업체/모델 ID를 사용하여 각 관련 허브를 안정적으로 식별할 수 있는 방법이 필요합니다(숫자 값만 사용, 디코딩된 이름은 일반적으로 로컬 데이터베이스에서 가져오며 변경될 수 있음). 동일한 허브가 여러 개 있는 경우 기본 버스 ID(또는 PCI/PCIe 장치의 경우 PCI ID). PCI ID는 기본 하드웨어(마더보드 모델 또는 개정)에 따라 변경될 수 있지만 루트 장치가 항상 동일한 슬롯 번호를 사용하는 경우 최소한 장치 ID 순서를 신뢰할 수 있습니다. 그런 다음 사양에 따라 또는 포트 테스트를 통해 각 허브의 포트 번호를 실제 포트 위치와 일치시킵니다. 외부 허브의 공급업체/모델 ID가 동일한 경우에도 깊이를 확인할 수 있습니다.
구성Udevd, 맨페이지를 참조하세요 man 7 udev
. 이 udevadm
도구는 특히 규칙을 구성하는 데에도 유용합니다.정보그리고감시 장치주문하다.
lsusb
이용 하고 usbview
읽으시면 됩니다시스템 파일 시스템연결된 장치에 대한 정보를 보는 속성입니다.
USB 관련 정보는 다음 위치에 있습니다.시스템 파일 시스템에 기록됨Linux-USB 호스트 APILinux 커널 문서의 일부로 많은 속성이 USB 사양과 직접적으로 관련되어 있습니다.
당신은 찾을 수 있습니다USB 클래스 코드~에서https://www.usb.org, 이는 장치 유형을 식별하는 데 유용합니다. USB 구성 계층 구조에 대한 보다 일반적인 설명은 다음을 참조하세요.USB에 대한 간략한 소개입니다. 5: USB 설명자.