LINUX.ORG.RU

подключение веб-камеры к встраиваемой системе


0

2

Здравствуйте!

У меня для процессорной платы робота собрана buildroot`ом система. Я там добавил поддержку USB и драйвера для веб-камер все, какие смог найти.

При подключении камеры в лог пишется:
usb 1-2: new high speed USB device number 2 using ehci_hcd
usb 1-2: New USB device found, idVendor=0ac8, idProduct=c40a
usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 1-2: Product: A4 TECH USB2.0 PC Camera J
usb 1-2: Manufacturer: A4 TECH

При этом, однако, никаких устройств в /dev не создается.

В чем причина?

Эта же камера, подключенная к хостовой убунте, приводит к появлению файла /dev/video0

а кто должен создавать там устройства?

minakov ★★★★★
()

Модуль ведра-то подгружен? Его обычно udev подгружает (в соответствии с idVendor и idProduct), но если удав не запущен, надо вручную (либо через modules.conf).

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

Где настраивается запуск udev? В том смысле, что это искать в конфиге ядра (make linux-menuconf), в конфиге системы (make menuconf) или это вообще какая-то специфичная штука?

Где почитать про то, как вручную по idVendor и idProduct загрузить нужный модуль?

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

/etc/udev/rules.d - должно быть правило для этой камеры (если она какая-то нестандартная). А lsusb ничего о модуле не говорит?

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

а сам udev запускается всегда, это неотъемлемая часть системы? Это можно как-нибудь проверить? А то я в процессе сборки системы все время сталкиваюсь с тем, что какая-нибудь само собой разумеющаяся вещь (вроде драйвера IDE или там setserial) тупо отсутствует :)

PentagramPro
() автор топика
Ответ на: комментарий от Eddy_Em

есть у билдрута такая особенность что приходится руками

VladimirMalyk ★★★★★
()

Включил в ядре devtmpfs и автомонтирование - все равно не создается video0.
Тогда выполнил mknod /dev/video0 c 81 0 и попробовал читать содержимое в файл (ибо символьное устройство):
/dev/video0 > temp
sh: can't execute '/dev/video0': No such device or address

явно что-то не то

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

явно что-то не то

Угу, понимания нет, как оно всё работает.

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

а сам udev запускается всегда, это неотъемлемая часть системы?

В вашем случае не факт. Можно проверить: pgrep udevd. События можно посмотреть при помощи udevadm monitor.

Eddy_Em ☆☆☆☆☆
()

Ядро пересобери.

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

все правильно сделал, теперь v4l2-compliance пробуй

ну а после всякие ffmpeg -f video4linux2 -s 320x240 -r 30 -i /dev/video0 -f oss -i /dev/dsp -f mp4 /tmp/webcam.mp4

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

Включил devtmpfs, после чего процесс загрузки стал зависать после таких слов:

Trying to unpack rootfs image as initramfs...
rootfs image is not initramfs (junk in compressed archive); looks like an initrd
Freeing initrd memory: 4576k freed

Ну то есть там, где уже устройства определяются.

Еще lsmod`ом проверил и убедился, что модуль видео не загружается:
Module Size Used by Not tainted
8250 13319 -
serial_core 10633 -
nls_cp437 4333 -

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

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

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

ты когда юсб-вебкамеру пихаешь, посмотри появляется ли /sys/dev/char/81:0 или чет в этом духе.

потом убедись что правильно делаешь:
mknod /dev/video0 c 81 0
chmod 666 /dev/video0

Freeing initrd memory: 4576k freed

убедись что у тебя в rootfs каталог /dev не пустой

Еще lsmod`ом проверил и убедился, что модуль видео не загружается

у меня:

# lsmod
Module Size Used by Not tainted
#

при том что все на одноплатнике замечательно работает

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

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

если сделать modprobe uvcvideo, то происходит вот это:
Linux video capture interface: v2.00
uvcvideo: Found UVC 1.00 device A4 TECH USB2.0 PC Camera J (0ac8:c40a)
input: A4 TECH USB2.0 PC Camera J as /devices/pci0000:00/0000:00:0b.1/usb1/1-2/1-2:1.0/input/input1
usbcore: registered new interface driver uvcvideo
USB Video Class driver (v1.0.0)

При этом в /dev совершенно самостоятельно создается файл video0

Теперь осталось найти способ быстро проверить работоспособность. Надеюсь, в билдруте есть среди пакетов ffmpeg

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

гм, ffmpeg есть, но он не компилируется
file included from ./libavutil/internal.h:194,
from ./libavutil/common.h:305,
from ./libavutil/avutil.h:81,
from libavdevice/avdevice.h:22,
from libavdevice/avdevice.c:19:
./libavutil/libm.h:62: error: static declaration of 'lrint' follows non-static declaration
./libavutil/libm.h:69: error: static declaration of 'lrintf' follows non-static declaration
./libavutil/libm.h:76: error: static declaration of 'round' follows non-static declaration
./libavutil/libm.h:83: error: static declaration of 'roundf' follows non-static declaration
./libavutil/libm.h:90: error: static declaration of 'truncf' follows non-static declaration

PentagramPro
() автор топика
Ответ на: комментарий от VladimirMalyk

ни то, ни другое без шаманств не собирается.

в ffmpeg я подправил файл libm.h, но он теперь требует какой-то rusage, а где его взять - непонятно.

mplayer требует некий yasm, а мне уже неохота опять копаться в настройках. Лучше накатаю программу, которая будет читать из video0 с помощью read

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

Все попробовал, узнал много интересного.

Во-первых, modprobe (имя модуля) достаточно, чтобы завести камеру на системе, построенной билдрутом.

Во-вторых, собрать ffmpeg и mplayer сложно, постоянно чего-то не хватает. Скорее всего, их сборку в билдруте реально никто не тестировал.

Далее, свое приложение пишется легко, но проблема в том, что не все камеры (точнее, не все драйверы) поддерживают режим read/write, так что мне пришлось делать memory mapping.

Наконец, самая большая подстава - глючный драйвер uvcvideo. На двух из трех опробованных камер он в конце концов виснет в ioctl, а в dmesg появляется ошибка:
uvcvideo: Failed to resubmit video URB (-27).

Я подобрал камеру от logitech, которая сочетает ряд достоинств:
1. не вызывает глюка в драйвере
2. поддерживает формат YUV (а то камера от ASUS, например, хотя и работает с драйвером, который поддерживает read/write, но ничего кроме JPEG выдавать не умеет)
3. дешевая как весенние няшки

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