У меня пять USB-камер той же марки, той же модели (Canyon CNR-FWC120H). Они используются для мониторинга различных сцен 24/7. Мне нужно как-то определить, какая камера какая из консоли Linux (Debian) или программно (любой язык).
Я попытался посмотреть на вывод lsusb -vvv
, есть поле iSerial
которое должно отличаться для каждой камеры, но, к сожалению, этот производитель решил не беспокоиться, и все камеры имеют один и тот же серийный номер в этом месте: 200901010001
Есть ли какой-нибудь другой способ определить, какая камера и какие порты подключены независимо от USB-портов, потому что, к сожалению, в моем конкретном сценарии я не могу полагаться на тот факт, что одна и та же камера всегда будет подключена к одному и тому же порту.
ОБНОВЛЕНИЕ После некоторого обсуждения в комментариях я понимаю, что это миссия невыполнима. Так что забудьте о последнем абзаце или, если у вас есть оригинальная идея, пожалуйста, не стесняйтесь представить ее. Теперь мне интересно, смогу ли я определить, к какому USB-порту подключено устройство; Я использую встроенные порты USB на материнской плате и дополнительные платы контроллера USB 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
поэтому она выглядит довольно случайной. Я попытаюсь перезагрузить систему и посмотреть, но мне нужно подождать подходящего времени, чтобы сделать это.
И если кому-то интересно, почему я просто не пытаюсь снова подключить камеру и посмотреть, остается ли она такой же. Ответ заключается в том, что я управляю этим ПК удаленно и изучаю все это, чтобы подготовить систему к полной автономности к любому потенциальному событию в будущем. К примеру, это может включать отключение камер от USB-портов.