LINUX.ORG.RU

Перевести usb-устройство в режим ohci

 , , ,


0

1

Что делаю: Делаю «систему видеонаблюдения» на основе motion, пучка копеечных вебок и pci-usb адаптеров. Дистр - дебиан. Всё свежее, распоследнее.

Что прошло не так: Где-то пол года у меня была одна единственная камера и всё было отлично, я обрадовался, купил пучок вебок от ноутбуков на разборе и тут оказалось что больше одной камеры подключить почти нельзя. Работают они по принципу кто первый встал того и тапки, поскольку одна камера каким-то немыслимым образом забивает usb2.0 шину. Разрешение 640х480. Если снизить разрешение в два раза, то можно поставить аж две камеры. Фрэймрэйт менять пробовал, но это не влияет почти или совсем, видимо с камеры всё забирается с той скоростью, с которой она отдаёт.

Покупать айпи-камеры с алика конечно можно, но для начала я бы хотел исчерпать потенциал существующего подхода, тем более что я уже начал и всё куплено.

Проблема освещена в факе первым же пунктом:

http://www.lavrsen.dk/foswiki/bin/view/Motion/FrequentlyAskedQuestions

видать это первейшие грабли наступаемые наивным энтузиастом

Как я решал проблему:

Там прямо в факе написано что делать - купить больше юсб-хостов на pci. Купил - оказалось что действительно помогает, теперь я могу подключить столько камер, сколько у меня 2.0 хостов - аж три. Для этого пришлось купить две платы + один контроллер в компе уже был. Это всё еще дешевле самой дешевой айпи-камеры, так что я пока не почувствовал себя неудачником, но всё же хотелось бы достигнуть большего числа подключённых камер теми же средствами.

В факе упоминались чудо-адаптеры с отдельными хостами на каждый порт. Таких мне, конечно, найти не удалось, но я старался искать контроллеры с количеством хостов хотя бы на 1 большим чем минимальное и даже нашёл, но есть нюанс:

# lspci | grep USB
00:03.0 USB controller: Silicon Integrated Systems [SiS] USB 1.1 Controller (rev 0f)
00:03.1 USB controller: Silicon Integrated Systems [SiS] USB 1.1 Controller (rev 0f)
00:03.2 USB controller: Silicon Integrated Systems [SiS] USB 1.1 Controller (rev 0f)
00:03.3 USB controller: Silicon Integrated Systems [SiS] USB 2.0 Controller
00:0b.0 USB controller: ULi Electronics Inc. USB 1.1 Controller (rev 03)
00:0b.1 USB controller: ULi Electronics Inc. USB 1.1 Controller (rev 03)
00:0b.2 USB controller: ULi Electronics Inc. USB 1.1 Controller (rev 03)
00:0b.3 USB controller: ULi Electronics Inc. USB 2.0 Controller (rev 01)
00:0c.0 USB controller: NEC Corporation OHCI USB Controller (rev 43)
00:0c.1 USB controller: NEC Corporation OHCI USB Controller (rev 43)
00:0c.2 USB controller: NEC Corporation uPD72010x USB 2.0 Controller (rev 04)
много usb1.1 хостов, а usb2.0 хоста - три(на всю систему), по количеству физических устройств.

Остаётся открытым вопрос - каким образом такая камерка съедает 480 мегабит полосы?

Кроме этого вопроса, есть другой вопрос - если она всё-таки съедает, то логично предположить, что на usb1.1 она вообще работать не будет или всё-таки будет по какой-то причине?

Что бы это проверить я решил принудительно перевести камеры в режим usb1.1. Много гуглил, много чего пробовал, например:

https://bbs.archlinux.org/viewtopic.php?id=172005

солюшн отсюда понятен, но он не работает - файл есть, но при попытке записать в него то что сказано - говорит что файла нет. Но я внимательно проверил, прошёл по симлинкам и увидел - файл всё-таки есть. Мистика. Возможно устройству не нравится моя идея и оно таким странным образом отказывается.

Более радикальное решение заключается в полном запрете usb2.0 на системе, что в общем-то вполне приемлемо, поскольку ничего кроме камер я к этому компу не подключаю. То есть я предполагаю, что если каким-то чудом камеры заработают на usb1.1, то в общей сложности у меня таких контроллеров 8, а число 8 намного больше чем число 3, но у меня решительно ничего не вышло. https://wiki.debian.org/KernelModuleBlacklisting я пробовал блэклист, я пробовал фэйк-инсталл, я даже нашёл как люди делают в точности то же самое: http://unix.stackexchange.com/questions/106716/wheezy-how-to-actually-blackli... и у меня снова не получилось - модуль по прежнему загружен в результате наличия зависимости, камеры по прежнему отображаются вот так:

# lsusb -t
/:  Bus 11.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/2p, 12M
/:  Bus 10.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/3p, 12M
/:  Bus 09.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/2p, 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/2p, 12M
/:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/2p, 12M
/:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/2p, 12M
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/2p, 12M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/5p, 480M
    |__ Port 5: Dev 2, If 0, Class=Video, Driver=uvcvideo, 480M
    |__ Port 5: Dev 2, If 1, Class=Video, Driver=uvcvideo, 480M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M
    |__ Port 6: Dev 2, If 0, Class=Video, Driver=uvcvideo, 480M
    |__ Port 6: Dev 2, If 1, Class=Video, Driver=uvcvideo, 480M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M
    |__ Port 2: Dev 2, If 0, Class=Video, Driver=uvcvideo, 480M
    |__ Port 2: Dev 2, If 1, Class=Video, Driver=uvcvideo, 480M
    |__ Port 2: Dev 2, If 2, Class=Audio, Driver=snd-usb-audio, 480M
    |__ Port 2: Dev 2, If 3, Class=Audio, Driver=snd-usb-audio, 480M

Вопрос: что делать и как жить дальше?(в рамках текущего бюджета, конечно)


Проще

Проще юзать ip камепы и не знать боли

anonymous ()

Motion, mjpg_streamer, 4 web камеры c270 - расстояние 5 метров до самой дальней и меньше без всяких дополнительных usb разветвителей, правда захват один кадр в секунду, 640x480 - картинки, детекция движения, нагрузка около 20% и всё это на Calculate Linux. Мне этого хватает. Уже года 2 наверное прошло, даже перепилил web морду за это время под себя.

Frost ★★★ ()
Ответ на: комментарий от n0153

Для одной камеры так:

mjpg_streamer -i 'input_uvc.so -y -f 1 -q 100 -l off -d /dev/video0 -r 640x480' -o 'output_http.so -p 8081'

и потом забираешь motion-ом с 8081 порта, и т.д. для других камер.

Frost ★★★ ()
Последнее исправление: Frost (всего исправлений: 2)

Остаётся открытым вопрос - каким образом такая камерка съедает 480 мегабит полосы?

Кто-нибудь сниффил usb поток для таких ситуаций, если они даже в faq попали?

panzerito ()
Ответ на: комментарий от n0153

и еще, питание на камеры у меня отдельно идут на каждую дополнительным блоком т.к. подумал что не потянет, соответственно питание от usb я отрезал

Frost ★★★ ()
Ответ на: комментарий от Frost

ну это уже по ситуации. меня больше беспокоит что будет при грозе - попалю же комп, наверное. мне метров 20 надо. супрессоры может напаять?

n0153 ()
Ответ на: комментарий от Frost

ты видать не застал эпоху районных локалок и не собирал урожай горелых свичей после каждой грозы. эзернет защищён плохо, а юсб вообще никак не защищён и не предназначен для этого.

прямой удар молнии не нужен - радиус поражения сотни метров, а механизмы такого поражения различны. супрессоры надо полюбому ставить - на эзернете помогало, но и сигнал гасило, как будет на юсб - не знаю.

n0153 ()
Ответ на: комментарий от n0153

Нет, такого не видел. В 20 метрах от дома долбануло по дереву помню, ничего, видно повезло. Но при прямом попадании по антенне думаю ничего не спасло бы. Поставь, они копейки стоят.

Frost ★★★ ()
Ответ на: комментарий от Frost

тут дело не в цене, а в том, что они с сигналом делают. мне же еще и дальнобойность нужна, в этом то вся и проблема.

n0153 ()
Ответ на: комментарий от Frost

увы - не работает mjpg_streamer какой форк, какой дистр? у меня один собирается, запускается но картинку не даёт(который для распберри), а другой не собирается. для начала хочется определится с тем, какую проблему будем воспроизводить, потому что решать одновременно все - трудно.

n0153 ()

https://sourceforge.net/projects/mjpg-streamer/ последней версии без года 10 лет - наверное это нормально что она не собирается. стало быть необходимо заставить работать вот эту? https://github.com/jacksonliam/mjpg-streamer

но она не работает, запускается относительно чисто:

 mjpg_streamer -i 'input_uvc.so -n -f 1 -d /dev/video0 -r 640x480' -o 'output_http.so -p 8081'
MJPG Streamer Version.: 2.0
 i: Using V4L2 device.: /dev/video0
 i: Desired Resolution: 640 x 480
 i: Frames Per Second.: 1
 i: Format............: JPEG
 i: TV-Norm...........: DEFAULT
 i: Could not obtain the requested pixelformat: MJPG , driver gave us: YUYV
    ... will try to handle this by checking against supported formats. 
    ... Falling back to YUV mode (consider using -yuv option). Note that this requires much more CPU power
 i: FPS coerced ......: from 1 to 30
 i: Frame period time ......: 1000 ms
 o: www-folder-path......: disabled
 o: HTTP TCP port........: 8081
 o: HTTP Listen Address..: (null)
 o: username:password....: disabled
 o: commands.............: enabled

но если скормить ссылку бразуеру он просто подключается и ждёт

к слову input-плагин не любит опцию y а так же u, причём реагирует странно, а именно: показывает хелп на оба модуля, после чего добавляет следующее:

input_init() return value signals to exit

n0153 ()

Ухцы, ехцы, охцы, ахцы!

anonymous ()
Ответ на: комментарий от n0153

mjpg-streamer из реп

Installed versions: 0_pre20120621-r1(08:54:56 PM 01/27/2016)(input_control input_file input_testpicture input_uvc output_autofocus output_file output_http output_rtsp output_udp v4l www)

Linux calculate 4.4.14-calculate #1 SMP PREEMPT Wed Jul 6 18:39:40 UTC 2016 x86_64 Intel(R) Core(TM)2 CPU 6600 @ 2.40GHz GenuineIntel GNU/Linux

Frost ★★★ ()
Ответ на: комментарий от Frost

можно поставить виртуалку:) у меня дебиан. существует способ узнать что там в репе calculate?

а ссылку да - именно такую я использовал. не думаю что дело в этом. а в чём дело - непонятно.

n0153 ()
Ответ на: комментарий от n0153

вот ссылка на эту репу, но сопоставить версии я не смог однозначно: http://www.calculate-linux.org/packages/media-video/mjpg-streamer

она собрана в 2012 году, надо думать это и есть версия от 2008 года которая тут лежит: https://sourceforge.net/projects/mjpg-streamer/

под raspberry есть кстати форк: https://github.com/jacksonliam/mjpg-streamer ты его пробовал собрать?

Frost ★★★ ()
Ответ на: комментарий от Frost

вот форк как раз и собрался, но не работает. сейчас ковыряю исходник, пытаюсь понять почему.

n0153 ()
Ответ на: комментарий от Frost

нашёл почему оно часть опций не ело, в том числе -y. оказывается у меня нужного libjpeg не было, cmake это узнавал, выставлял константу препроцессора, а директива потом завидев эту константу дофига чего исключала из кода, в том числе и обработку данной опции.

нужно вот это:

apt-get install libjpeg-dev

но работать оно всё равно не начало. запускается идеально чисто, даже веб-сервер со страничками красивыми работает, но при запросе стрима просто висит соединение и картинку не показывает. я так понимаю надо любой ценой собрать оригинальную версию, а этот форк оставить в покое.

n0153 ()
Ответ на: комментарий от Frost

eeeeeeee! собрал! всего то надо было.. сейчас расскажу!

сначала получаем ошибку которую все получают:

mjpg-streamer-r63# make
gcc -O2 -DLINUX -D_GNU_SOURCE -Wall   -c -o mjpg_streamer.o mjpg_streamer.c
mjpg_streamer.c:27:28: fatal error: linux/videodev.h: No such file or directory
 #include <linux/videodev.h>
                            ^
compilation terminated.
<builtin>: recipe for target 'mjpg_streamer.o' failed
make: *** [mjpg_streamer.o] Error 1

лечим её так, как её все лечат:

# ln -s /usr/include/linux/videodev2.h /usr/include/linux/videodev.h

после этого происходит долгая и грязная компиляция, которая мучительно умирает с огромной непонятной ошибкой. там что-то насчёт input_gspcav1. что это вообще даже знать не хочу, лезем в мэйк и выкашиваем:

#plugins: input_uvc.so output_file.so output_http.so input_testpicture.so output_autofocus.so input_gspcav1.so
plugins: input_uvc.so output_http.so

первая строка - это как было, а вторая - как надо. после этого собирается и, о чудо, - показывает!

n0153 ()

купи себе pci xhci контроллер, он же USB 3.0 и втыкай туда камеры, там все порты обычно usb 2 и 3 держат

dimon555 ★★★★★ ()
Ответ на: комментарий от dimon555

а как это решит проблему? пропускная способность шины usb2.0 на которой работают камеры от этого не изменится. вопрос решается увеличением количества контроллеров.

n0153 ()
Ответ на: комментарий от Frost

короче нет, увы, даже так - не больше трёх камер на три контроллера. в чём секрет? было бы здорово включать камеры в цикле по очереди, но средств для реализации этого я пока не вижу. неужели придётся заказывать эти ужасно дорогие айпи камеры по 20 долларов?

n0153 ()
Ответ на: комментарий от n0153

вопрос решается увеличением количества контроллеров.

там на каждый рут порт полноценные 480 мбит/c

покупаешь xhci с 4 портами и вот тебе как 4 usb 2.0 контроллера

dimon555 ★★★★★ ()
Ответ на: комментарий от dimon555

хм. а они бывают в pci не экспресс? подскажешь конкретную модель что бы не вышло дороже айпи камеры?

n0153 ()
Ответ на: комментарий от dimon555

Это вообще ты/кто переводил читал и не понял. Uhci это лицензированный штеудом стандарт, ohci открытый основаный на firewire но никакого более отношения к нему не имеющий.

anonymous ()

Остаётся открытым вопрос - каким образом такая камерка съедает 480 мегабит полосы?

(640*480*3*30)/1024./1024.*8 = X

High-speed до 480 Мбит/с USB 2.0

в usb 1.1 не влезет

что делать и как жить дальше?(в рамках текущего бюджета, конечно)

no way

hizel ★★★★★ ()
Ответ на: комментарий от anonymous

Это вообще ты/кто переводил читал и не понял.

ну я уже понял что я не понял. торопился просто, да и сейчас тороплюсь.

no way

ладно, хорошо. пока вижу два варианта - usb3.0 и айпи камеры.

usb3.0 я пока не нахожу на старый pci, а нового у меня в плате нет, тем более что они уже не такие дешевые.

айпи камеры еще дороже, но есть один вариант: купить orange pi, добавить туда имеющуюся вебку, в консервную банку это всё на термоклей и получится всё та же айпи камера, причём дешевле и с вай-фаем и разобрать её потом можно на полезные составляющие.

наверное исчерпаю возможности по наращиванию usb2.0, после чего сделаю по второму варианту, тем более что там уже будет крайне желательна дальность.

n0153 ()

Vot tebe na zametku: ORIENT NC-3U4PE derjit 4 usb kameri c270, stoit kopeiki, no vse eto cherez mjpg-streamer i nikakogo raspbery-pi tak kak eto PCI plata. Nedavno ee zapill na rabote. No toje bili problemi, pomogli soveti iz google:

rmmod uvcvideo
modprobe uvcvideo quirks=128

Frost ★★★ ()
Последнее исправление: Frost (всего исправлений: 2)
Ответ на: комментарий от n0153

в любом случае, у меня пока даже руки не дошли развесить те камеры, которые в принципе работают. нищебродство, депрессия и вынужденный переезд. всё плохо, но решения мне теперь известны, соответственно в будущем применю.

n0153 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.