Уважаемые форумчане, с Новым годом всех! :)
Прошу помощи в решении одной проблемы, на которую напоролся на работе. Имеется промышленное оборудование, в которое встроен модуль для оцифровки видео с камеры, подключаемый к компьютеру по USB. В lsusb он представляется следующим образом:
Bus 002 Device 006: ID eb1a:2821 eMPIA Technology, Inc.Однозначно определить, что-же это за устройство, не получилось. В документации последней версии ядра для модуля em28xx оно числится как «Unknown EM2750/28xx video grabber».
Методом проб и ошибок удалось подобрать параметр card=9 для этого модуля, при указании которого на рабочем ноутбуке (3-5-3-gentoo) появилась картинка и звук с микрофона (встроенного в пульт управления камерой).
При подключении в dmesg теперь появляется следующее (без параметра card были сообщения о невозможности определить устройство и выводился полный перечень поддерживаемых устройств):
Jan 3 23:02:16 pc2 kernel: [10129.895088] usb 1-3: new high-speed USB device number 2 using ehci_hcd Jan 3 23:02:16 pc2 kernel: [10130.012535] usb 1-3: New USB device found, idVendor=eb1a, idProduct=2821 Jan 3 23:02:16 pc2 kernel: [10130.012540] usb 1-3: New USB device strings: Mfr=0, Product=1, SerialNumber=0 Jan 3 23:02:16 pc2 kernel: [10130.012542] usb 1-3: Product: USB 2821 Device Jan 3 23:02:16 pc2 kernel: [10130.012947] em28xx: New device USB 2821 Device @ 480 Mbps (eb1a:2821, interface 0, class 0) Jan 3 23:02:16 pc2 kernel: [10130.012949] em28xx: Video interface 0 found Jan 3 23:02:16 pc2 kernel: [10130.013025] em28xx #0: chip ID is em2820 (or em2710) Jan 3 23:02:17 pc2 kernel: [10130.113530] em28xx #0: i2c eeprom 00: 1a eb 67 95 1a eb 21 28 90 00 11 03 6a 22 00 00 Jan 3 23:02:17 pc2 kernel: [10130.113540] em28xx #0: i2c eeprom 10: 00 00 04 57 06 21 01 00 00 00 00 00 00 00 00 00 Jan 3 23:02:17 pc2 kernel: [10130.113549] em28xx #0: i2c eeprom 20: 02 00 01 01 f0 10 00 00 00 00 00 00 5b 00 00 00 Jan 3 23:02:17 pc2 kernel: [10130.113558] em28xx #0: i2c eeprom 30: 00 00 20 40 20 80 02 20 10 01 03 01 00 00 00 00 Jan 3 23:02:17 pc2 kernel: [10130.113566] em28xx #0: i2c eeprom 40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Jan 3 23:02:17 pc2 kernel: [10130.113574] em28xx #0: i2c eeprom 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Jan 3 23:02:17 pc2 kernel: [10130.113583] em28xx #0: i2c eeprom 60: 00 00 00 00 00 00 00 00 00 00 22 03 55 00 53 00 Jan 3 23:02:17 pc2 kernel: [10130.113591] em28xx #0: i2c eeprom 70: 42 00 20 00 32 00 38 00 32 00 31 00 20 00 44 00 Jan 3 23:02:17 pc2 kernel: [10130.113599] em28xx #0: i2c eeprom 80: 65 00 76 00 69 00 63 00 65 00 00 00 00 00 00 00 Jan 3 23:02:17 pc2 kernel: [10130.113608] em28xx #0: i2c eeprom 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Jan 3 23:02:17 pc2 kernel: [10130.113616] em28xx #0: i2c eeprom a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Jan 3 23:02:17 pc2 kernel: [10130.113624] em28xx #0: i2c eeprom b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Jan 3 23:02:17 pc2 kernel: [10130.113633] em28xx #0: i2c eeprom c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Jan 3 23:02:17 pc2 kernel: [10130.113641] em28xx #0: i2c eeprom d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Jan 3 23:02:17 pc2 kernel: [10130.113649] em28xx #0: i2c eeprom e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Jan 3 23:02:17 pc2 kernel: [10130.113658] em28xx #0: i2c eeprom f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Jan 3 23:02:17 pc2 kernel: [10130.113667] em28xx #0: EEPROM ID= 0x9567eb1a, EEPROM hash = 0x37da7b8a Jan 3 23:02:17 pc2 kernel: [10130.113669] em28xx #0: EEPROM info: Jan 3 23:02:17 pc2 kernel: [10130.113671] em28xx #0: AC97 audio (5 sample rates) Jan 3 23:02:17 pc2 kernel: [10130.113672] em28xx #0: 500mA max power Jan 3 23:02:17 pc2 kernel: [10130.113674] em28xx #0: Table at 0x04, strings=0x226a, 0x0000, 0x0000 Jan 3 23:02:17 pc2 kernel: [10130.113677] em28xx #0: Identified as Pinnacle Dazzle DVC 90/100/101/107 / Kaiser Baas Video to DVD maker / Kworld DVD Maker 2 / Plextor ConvertX PX-AV100U (card=9) Jan 3 23:02:17 pc2 kernel: [10130.296535] saa7115 7-0025: saa7113 found (1f7113d0e100000) @ 0x4a (em28xx #0) Jan 3 23:02:17 pc2 kernel: [10130.680277] em28xx #0: Config register raw data: 0x90 Jan 3 23:02:17 pc2 kernel: [10130.692149] em28xx #0: AC97 vendor ID = 0x83847650 Jan 3 23:02:17 pc2 kernel: [10130.698158] em28xx #0: AC97 features = 0x6a90 Jan 3 23:02:17 pc2 kernel: [10130.698161] em28xx #0: Empia 202 AC97 audio processor detected Jan 3 23:02:17 pc2 kernel: [10130.931154] em28xx #0: v4l2 driver version 0.1.3 Jan 3 23:02:18 pc2 kernel: [10131.398097] em28xx #0: V4L2 video device registered as video0 Jan 3 23:02:18 pc2 kernel: [10131.401910] ALSA mixer.c:887 2:1: cannot get min/max values for control 2 (id 2) Jan 3 23:02:18 pc2 mtp-probe: checking bus 1, device 2: «/sys/devices/pci0000:00/0000:00:1a.7/usb1/1-3» Jan 3 23:02:18 pc2 mtp-probe: bus: 1, device: 2 was not an MTP device
Однако при подключении к настольному компьютеру (HP Compaq 8000 desktop) с OpenSUSE 12.2 и ядром 3.6.9-pf-1-postfactum (пробовалось так-же и родное для этой версии дистрибутива ядро 3.4-11-2.16.1-desktop) ситуация резко изменилась. На изображении появились искажения, битые кадры. Выглядят они вот так и так, появляются примерно через каждые 2-5 секунд. Вот 10-секундный видеоролик (1.1 мб), демонстрирующий проблему.
Решил изучить параметры модуля на предмет того, что могло-бы помочь в диагностике или исправлении ошибки. Нашёл параметр isoc_debug, при указании которого в dmesg в процессе захвата видео пишется вот что:
Jan 3 21:50:46 pc2 kernel: [ 5839.479541] em28xx #0 buffer_filled :[ffff88007601a100/31] wakeup Jan 3 21:50:46 pc2 kernel: [ 5839.495567] em28xx #0 em28xx_copy_video :Overflow of 4 bytes past buffer end(2) Jan 3 21:50:46 pc2 kernel: [ 5839.495572] em28xx #0 em28xx_isoc_copy :Video frame 131, length=2576, odd Jan 3 21:50:46 pc2 kernel: [ 5839.511538] em28xx #0 print_err_status :URB packet 5, status -71 [Bit-stuff error (bad cable?)]. Jan 3 21:50:46 pc2 kernel: [ 5839.511544] em28xx #0 print_err_status :URB packet 7, status -71 [Bit-stuff error (bad cable?)]. Jan 3 21:50:46 pc2 kernel: [ 5839.511546] em28xx #0 print_err_status :URB packet 8, status -71 [Bit-stuff error (bad cable?)]. Jan 3 21:50:46 pc2 kernel: [ 5839.519537] em28xx #0 em28xx_isoc_copy :Video frame 132, length=2576, even Jan 3 21:50:46 pc2 kernel: [ 5839.519540] em28xx #0 buffer_filled :[ffff8800388b9700/0] wakeup Jan 3 21:50:46 pc2 kernel: [ 5839.535595] em28xx #0 em28xx_copy_video :Overflow of 4 bytes past buffer end(2) Jan 3 21:50:46 pc2 kernel: [ 5839.535601] em28xx #0 em28xx_isoc_copy :Video frame 133, length=2576, odd Jan 3 21:50:46 pc2 kernel: [ 5839.559527] em28xx #0 em28xx_copy_video :Overflow of 1284 bytes past buffer end(2) Jan 3 21:50:46 pc2 kernel: [ 5839.559531] em28xx #0 em28xx_isoc_copy :Video frame 134, length=2576, even Jan 3 21:50:46 pc2 kernel: [ 5839.559534] em28xx #0 buffer_filled :[ffff8800388b9300/1] wakeup Jan 3 21:50:46 pc2 kernel: [ 5839.575562] em28xx #0 print_err_status :URB packet 17, status -71 [Bit-stuff error (bad cable?)]. Jan 3 21:50:46 pc2 kernel: [ 5839.575567] em28xx #0 print_err_status :URB packet 18, status -71 [Bit-stuff error (bad cable?)]. Jan 3 21:50:46 pc2 kernel: [ 5839.575573] em28xx #0 print_err_status :URB packet 21, status -71 [Bit-stuff error (bad cable?)]. Jan 3 21:50:46 pc2 kernel: [ 5839.575575] em28xx #0 print_err_status :URB packet 22, status -71 [Bit-stuff error (bad cable?)]. Jan 3 21:50:46 pc2 kernel: [ 5839.575599] em28xx #0 em28xx_isoc_copy :Video frame 135, length=2576, odd Jan 3 21:50:46 pc2 kernel: [ 5839.599537] em28xx #0 em28xx_copy_video :Overflow of 1284 bytes past buffer end(2) Jan 3 21:50:46 pc2 kernel: [ 5839.599541] em28xx #0 em28xx_isoc_copy :Video frame 136, length=2576, even Jan 3 21:50:46 pc2 kernel: [ 5839.599544] em28xx #0 buffer_filled :[ffff8800388b9500/2] wakeup
Строчки URB packet 7, status -71 как раз совпадают по времени появления с битыми кадрами. Поверхностный поиск по ним результатов не принёс, попадаются лишь фрагменты исходного кода драйверов.
Быть может кто-то сталкивался с аналогичной проблемой. Сообщите, какую ещё информацию нужно предоставить. Буду благодарен за любую помощь!