USB 장치 식별


15

5 개의 USB 카메라, 동일한 브랜드, 동일한 모델 (Canyon CNR-FWC120H)이 있습니다. 그들은 24/7 다른 장면을 모니터링하는 데 사용됩니다. 어떻게 든 Linux (Debian) 콘솔 또는 프로그래밍 방식 (모든 언어)에서 어떤 카메라인지 식별해야합니다.

의 출력을 보려고 시도했지만 각 카메라마다 다른 lsusb -vvv필드 iSerial가 있지만 불행히도이 제조업체는 귀찮게하지 않기로 결정했으며 모든 카메라는 해당 위치에서 동일한 직렬을 갖습니다.200901010001

불행히도 특정 시나리오에서 동일한 카메라가 항상 동일한 포트에 연결된다는 사실에 의존 할 수 없기 때문에 어떤 카메라가 USB 포트와 독립적으로 어떤 카메라인지 알 수있는 다른 방법이 있습니까?

업데이트 의견에 대해 토론 한 후에는 이것이 불가능하다는 것을 알고 있습니다. 마지막 단락을 잊어 버리거나 독창적 인 아이디어가 있다면 그것을 제시하십시오. 장치가 연결된 USB 포트를 식별 할 수 있는지 관심이 있습니다. 충분한 대역폭의 카메라를 수용하기 위해 마더 보드의 내장 USB 포트와 추가 PCI USB 컨트롤러 카드를 사용합니다. 포트를 고유하게 식별해야하며, 예를 들어 컴퓨터가 재부팅되고 어떤 이유로 USB 컨트롤러가 다른 순서로 초기화되는 경우 포트 번호 / 식별이 변경되지 않아야합니다. 가능합니까?

업데이트 2 카메라 중 하나의 로그에 다음 정보가 표시됩니다.

[Wed Apr 30 18:35:02 2014] uvcvideo: Found UVC 1.00 device FULL HD 1080P Webcam (0bda:58b0)
[Wed Apr 30 18:35:02 2014] input: FULL HD 1080P Webcam as /devices/pci0000:00/0000:00:01.0/0000:01:00.0/usb3/3-2/3-2:1.0/input/input4

이를 사용하여이 명령을 호출했습니다.

udevadm info --query=all --path=/devices/pci0000:00/0000:00:01.0/0000:01:00.0/usb3/3-2/3-2:1.0/input/input4

그리고 이것을 얻었다 :

P: /devices/pci0000:00/0000:00:01.0/0000:01:00.0/usb3/3-2/3-2:1.0/input/input4
E: DEVPATH=/devices/pci0000:00/0000:00:01.0/0000:01:00.0/usb3/3-2/3-2:1.0/input/input4
E: EV=3
E: ID_BUS=usb
E: ID_INPUT=1
E: ID_INPUT_KEY=1
E: ID_MODEL=FULL_HD_1080P_Webcam
E: ID_MODEL_ENC=FULL\x20HD\x201080P\x20Webcam
E: ID_MODEL_ID=58b0
E: ID_PATH=pci-0000:01:00.0-usb-0:2:1.0
E: ID_PATH_TAG=pci-0000_01_00_0-usb-0_2_1_0
E: ID_REVISION=5801
E: ID_SERIAL=Generic_FULL_HD_1080P_Webcam_200901010001
E: ID_SERIAL_SHORT=200901010001
E: ID_TYPE=video
E: ID_USB_DRIVER=uvcvideo
E: ID_USB_INTERFACES=:0e0100:0e0200:010100:010200:
E: ID_USB_INTERFACE_NUM=00
E: ID_VENDOR=Generic
E: ID_VENDOR_ENC=Generic
E: ID_VENDOR_ID=0bda
E: KEY=100000 0 0 0
E: MODALIAS=input:b0003v0BDAp58B0e5801-e0,1,kD4,ramlsfw
E: NAME="FULL HD 1080P Webcam"
E: PHYS="usb-0000:01:00.0-2/button"
E: PRODUCT=3/bda/58b0/5801
E: PROP=0
E: SUBSYSTEM=input
E: UDEV_LOG=3
E: USEC_INITIALIZED=41090223

카메라 사이에 다른 일들은 DEVPATH, ID_PATH, ID_PATH_TAG, PHYS그리고 (가장 흥미로운) USEC_INITIALIZED. 이제 처음 네 가지 요소는 아마도 USB 포트와 관련이 있지만 마지막 요소는 USEC_INITIALIZED일종의 일련 번호처럼 보입니다. 실제로 나타내는 내용에 대한 정보를 찾을 수 없습니다. 누구든지 그것에 대해 알고 있습니까? 나는 초기화 카메라하지만,이 하나가 된 후 초기화하는 카메라 때 어쩌면 마이크로 초 단위의 시간입니다 생각 USEC_INITIALIZED=17919751, 그리고 그 이후의 일이 USEC_INITIALIZED=25609278오히려 무작위 것 같다 있도록. 시스템을 재부팅하고 보려고하지만 편리한 시간을 기다려야합니다.

그리고 누군가 왜 카메라를 다시 연결하려고 시도하지 않는지 궁금해하는 경우 동일하게 유지되는지 확인하십시오. 답은이 PC를 원격으로 운영하고 있으며, 앞으로 일어날 모든 사건에 대해 시스템이 완전히 자율적으로 작동 할 수 있도록이 모든 것을 조사하고 있습니다. 예를 들어 USB 포트에서 카메라를 분리하는 것이 포함될 수 있습니다.


프로그래밍 방식이 아닌 소프트웨어 일 수도 있습니까? 예를 들어 카메라 전면 유리에 마커 (다른 색상)를 표시하면? 하드웨어 및 / 또는 직렬에 차이가 없다면 사용자 정의 다시 프로그래밍하지 않고 이것이 가능할지 의심 스럽지만 릴레이가 다른 허브 / 허브를 통해 카메라를 연결할 수 있습니까?
기즈모

불행히도 마커 아이디어는 아닙니다. 그림 자체에 아무것도 소개해서는 안되기 때문입니다. 카메라 일련 번호를 덮어 쓸 수 있는지 궁금합니다. 아니면 다른 카메라 설정 / 정보 ... 그런 것이 있습니까? 쓰기 가능한 영구 메모리?
Ivan Kovacevic

이 장치의에 대한 고유 정보가 제공되지 특히, 정말 열심히 될 것이 참조되어 stackoverflow.com/questions/14053764/...를 . 메모리 덮어 쓰기에 관해서는 펌웨어 플래싱 유틸리티를 찾고 펌웨어에서 시리얼을 식별하고 원하는대로 HEX-EDIT 할 수 있습니까? 그러나 나는 그것을위한 도구를 찾을 수 없습니다. USB 장치 설명자를 변경하는 방법을 찾을 수 있다면 거기에서 쉽게 찾을 수 있습니다.
기즈모

HID Descriptor 도구를 사용해보십시오.- usb.org / developers / hidpage- 물론 캠이 HID 인 경우에만
Gizmo

젠장. 내가 할 수있는 유일한 일은 각 카메라가 항상 PC의 동일한 포트에 연결되어 있도록 유지하는 것입니다 ... 질문을 수정하겠습니다.
Ivan Kovacevic

답변:


2

카메라가 고정 된 위치에 있습니까? 장면이 다소 일정합니까? 그렇다면 이미지 인식을 사용하여 카메라를보고있는 카메라로 식별 할 수 있습니다.

이 작업을 수행하는 데 도움이되는 적절한 Python 도구가 있습니다.이 답변에는 다음 주제에 대한 좋은 정보가 있습니다.


나는이 솔루션을 염두에 두었지만 더 간단한 것을 원했습니다. 그리고 실제로 바쁜 항구를 바라보고있는 배, 움직이는 배, 파도 등으로 인해 해수면이 일정하지 않기 때문에 문제가 생길 것입니다.
Ivan Kovacevic

2

발견 한대로 장치 자체에서 고유 한 식별 정보를 얻을 수 없으면 문제를 해결할 수 없습니다. 솔루션에 가장 가까운 것은 장치의 물리적 연결에 의존하는 것입니다. (재부팅시 변경되지 않습니다. 실제로 커넥터 위치를 변경 한 경우에만)

프로그래밍 방식으로 sysfs를 사용하여 장치에 대한 커널 정보를 얻을 수 있습니다. Sysfs는 커널이 보는 것처럼 파일 시스템과 같은 장치 표현입니다. (디스크상의 실제 파일이 아닙니다)

이를 통해 다음을 수행 할 수 있습니다.-제품 및 공급 업체 ID로 장치 유형 식별-장치의 일련 번호 (있는 경우)를 읽습니다. -USB 허브에서 물리적 연결 번호를 읽습니다.

/ sys / class에서 장치 유형을 찾아 시작할 수 있습니다. 이 예에서는 USB → LPT 포트를 사용합니다. 그러나 원칙은 동일합니다.

$ ls -l /sys/class/usbmisc
lp1 -> ../../devices/pci0000:00/0000:00:1d.0/usb4/4-1/4-1.5/4-1.5:1.0/usbmisc/lp1
lp2 -> ../../devices/pci0000:00/0000:00:1d.0/usb4/4-1/4-1.6/4-1.6:1.0/usbmisc/lp2

uevent 파일에서 장치 이름을 찾으십시오.

cat /sys/class/usbmisc/lp1/uevent
MAJOR=180
MINOR=1
DEVNAME=__usb/lp1__

장치 이름을 열려면 / dev를 추가하십시오. / dev / usb / lp1

실제 경로를 사용하십시오 : $ cd -P / sys / class / usbmisc / lp1

세 가지를 뒤로 물러서십시오 :

$ cd ../../../
/sys/devices/pci0000:00/0000:00:1d.0/usb4/4-1/4-1.5

이 디렉토리에는 장치에 대한 많은 정보가 들어 있습니다.

idProductidVendor 를 사용하여 장치 유형을 고유하게 식별 할 수 있습니다.

거기 경우 일련 파일은 고유 일련 번호를 포함, 당신이 완료됩니다.

그렇지 않으면 옵션은 물리적 연결을 식별로 사용하는 것입니다.이 디렉토리 이름은 " 4-1.5 "입니다. 물리적 연결에 고유하며 장치를 다른 포트에 연결하면 이미 언급 한대로 변경됩니다.


나는 이것이 최선의 해결책이거나 내 경우에는 타협한다고 생각한다 ... 카메라를 동일한 전용 USB 포트에 고정하십시오. 예를 들어 하드웨어 유지 관리 후 유지 관리 담당자가 카메라를 다른 포트에 연결하는 경우 카메라를 식별해야하기 때문에 타협이라고 말합니다.
Ivan Kovacevic

나는 동의한다. 이것은 완벽하지 않습니다. 프로토콜에 지정된대로 장치에 간단한 일련 번호를 추가하는 것이 공급 업체에게 일반적 이었으면합니다. 더 나은 해결책을 찾으시기 바랍니다!
Simon Rigét

1

간단히 카메라의 플러그를 뽑고 1을 연결 한 다음 lsusb를 수행하십시오. 카메라를 식별하고 사용되는 USB 포트를 적어 둡니다. 캠에 라벨을 붙일 수 있습니다. 그런 다음 다른 카메라에 대해 반복하면 거기에 도착합니다. 불가능한 것은 없습니다.)


이것은 말이됩니다. 한 번에 하나의 카메라를 연결하고 연결된 실제 포트를 확인하십시오. 소프트웨어 내에서 차별화 할 수없는 경우 개별 포트를 켜거나 끌 수도있어 한 번에 하나만 나타납니다. askubuntu.com/questions/342061/…
Ryan Griggs 님이

구성의 목적을 완전히 명확하게 설명하지 않았다는 것을 인정합니다. 장시간 (개월) 시간 경과 기록에 사용되는 원격 위치의 PC입니다. 개입없이 카메라를 자동으로 식별 할 수있는 솔루션을 원했습니다. 이제 정전 후에 실제로 로그인하고 카메라 번호를 수동으로 재구성해야합니다.
Ivan Kovacevic

0

모든 카메라를 식별 할 수 있습니다. 명령

 $ sudo lsusb -v -d 046d:082d | grep -i serial
   iSerial                 1 05C6D16F

카메라의 일련 번호 (로지텍 HD Pro 웹캠, 이전 공급 업체에서 얻은 올바른 공급 업체 : 제품 코드와 함께 예제로 사용됨)를 반환합니다 lsusb. 권한이있는 사용자로이 작업을 수행해야합니다. 권한이없는 사용자는 명령을 통해 사용 가능한 모든 정보에 액세스 할 수 없습니다.

일련 번호는 종종 고유하지는 않지만 종종 고유합니다. 고유하지 않은 경우 (동일한 공급 업체 : 제품 코드가있는 두 장치에 대해 위 명령의 출력을 비교하기 만하면) 고유 하도록 설정할 수 있습니다 . 이를 수행하기위한 Google 전체에 가이드가 있습니다. 여기서는 철저하게하기 위해 몇 가지를 가리 킵니다. 여기여기 .

이제 명령

$ sudo udevadm info --query=all /dev/video1 | grep 'VENDOR_ID\|MODEL_ID\|SERIAL_SHORT'
  E: ID_MODEL_ID=082d
  E: ID_SERIAL_SHORT=05C6D16F
  E: ID_VENDOR_ID=046d

이 특정 카메라에 적합한 코드를 반환합니다. 모든 /dev/videoX장치에 대한 시행 착오를 통해 비둘기 를 모두 볼 수 있습니다.


마치 내 초기 질문 게시물을 끝까지 읽지 않은 것처럼 보입니다. 내 게시물에서 udevadm 사용에 대해 이미 언급했습니다 ... 문제는 모든 카메라의 일련 번호가 동일하므로 해당 정보와 구별 할 수 없다는 것입니다. 일련 번호를 "설정"/ 변경할 수있는 방법이 있습니까?
Ivan Kovacevic 2016 년

-1

부팅하는 동안 장치의 전원 켜기가 순서대로 지연되는 것을 들었습니다. 켜는 순서에 따라 장치를 식별 할 수 있습니다. 개별 USB 포트의 전원을 순서대로 제어 할 수있는 추가 하드웨어가 필요합니다.

각 포트에 대해 개별 전원 스위치가있는 USB 허브를 해킹하여 arduino에 연결하고 전원이 켜진 순서를 트리거 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.