Instalación de WebCam USB para Openwrt Chaos Calmer

Instalación de WebCam USB para Openwrt Chaos Calmer

Aunque ya lo tenía previsto, hoy me ha solicitado jj JJ que explique la manera de instalar una webcam usb a nuestro Openwrt.

     Lo primero que debemos hacer es comprobar que tenemos el soporte mínimo correspondiente, (en mis compilaciones si las tienes), buscando entre los mensajes de kernel al inicio encontramos:

     #dmesg | less
    [ 9.496000] usbcore: registered new interface driver usbfs
    [ 9.500000] usbcore: registered new interface driver hub
    [ 9.508000] usbcore: registered new device driver usb
    [ 9.760000] SCSI subsystem initialized
    [ 9.780000] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
    [ 9.792000] ehci-platform: EHCI generic platform driver
    [ 9.796000] ehci-platform ehci-platform: EHCI Host Controller
    [ 9.804000] ehci-platform ehci-platform: new USB bus registered, assigned bus number 1
    [ 9.812000] ehci-platform ehci-platform: irq 18, io mem 0xfffe1300
    [ 9.828000] ehci-platform ehci-platform: USB 2.0 started, EHCI 1.00, overcurrent ignored
    [ 9.836000] hub 1-0:1.0: USB hub found
    [ 9.840000] hub 1-0:1.0: 2 ports detected
    [ 9.856000] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
    [ 9.864000] ohci-platform: OHCI generic platform driver
    [ 9.868000] ohci-platform ohci-platform: Generic Platform OHCI controller
    [ 9.876000] ohci-platform ohci-platform: new USB bus registered, assigned bus number 2
    [ 9.884000] ohci-platform ohci-platform: irq 13, io mem 0xfffe1400
    [ 9.952000] hub 2-0:1.0: USB hub found
    [ 9.956000] hub 2-0:1.0: 2 ports detected
    [ 9.968000] uhci_hcd: USB Universal Host Controller Interface driver
    [ 9.984000] usbcore: registered new interface driver usb-storage
    [ 10.164000] usb 1-1: new high-speed USB device number 2 using ehci-platform
    [ 10.300000] hub 1-1:1.0: USB hub found
    [ 10.304000] hub 1-1:1.0: 2 ports detected

Tenemos soporte de EHCI y OHCI para USB.

     Insertamos nuestra webcam y vemos que nos dice openwrt:

#dmesg
43.724000] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
[ 51.820000] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
[ 456.052000] usb 1-1.1: new high-speed USB device number 3 using ehci-platform

Bien, hemos conectado en realidad una Webcam de la marca Trust, modelo Megapixel USB2 Webcam Live, Item number:15007, pero vamos a comprobar que reconoce nuestro OpenWRT:

     #lsusb
    root@OpenWrt:~# lsusb
    Bus 001 Device 003: ID 0c45:624e Microdia PC Camera (SN9C201 + SOI968)
    Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 001 Device 002: ID 0424:2502 Standard Microsystems Corp.
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bien, ya tenemos con lo que empezar a trabajar, Openwrt nos a detectado:
    Bus 001 Device 003: ID 0c45:624e Microdia PC Camera (SN9C201 + SOI968)

Nos detecta realmente su chip interno, así que vamos a comprobar a través de su ID, el driver que corresponde, desde esta lista:

 
https://www.linuxtv.org/wiki/index.php/Gspca_devices

     En nuestro caso:
sn9c20x 0c45:624e PC Camera (SN9C201 + SOI968)

     En el caso de nuestro amigo jjJJ:
spca561 046d:092e Logitech QC Elch2

 
Vamos a instalar los drivers correspondientes a nuestra cam:
# opkg update
# opkg install kmod-video-core kmod-video-gspca-sn9c20x

 En el caso de jjJJ:

# opkg update
# opkg install kmod-video-core kmod-video-gspca-spca561

Vamos a comprobar nuestra cam:

#dmesg
[ 2587.760000] i2c /dev entries driver
[ 2588.044000] Linux video capture interface: v2.00
[ 2588.448000] gspca_main: v2.14.0 registered
[ 2588.656000] gspca_main: gspca_sn9c20x-2.14.0 probing 0c45:624e
[ 2589.404000] gspca_sn9c20x: SOI968 sensor detected
[ 2589.408000] input: gspca_sn9c20x as /devices/platform/ehci-platform/usb1/1-1/1-1.1/input/input0
[ 2589.420000] usbcore: registered new interface driver gspca_sn9c20x
Una vez instalado el driver y reconocida nuestra cámara, ya podemos instalar el sofware de captura de nuestra elección, ya sea mjpg-streamer o el famoso motion.
 
     Espero os sirva de ayuda.

27 comentarios

  1. Gracias didac por tu gran ayuda… Ahora tengo una duda… Como se le asigna un puerto al dispositivo para entrar desde el navegador o VLC..

    Gracias..
    Gran trabajo… No tengo muy claro de cómo se hace….
    El imaginó que son retos que te pones….

  2. Hola jjJJ!

    Por ejemplo, al instalar motion en nuestro OpenWrt, se le asignan dos puertos IP, en mi caso 8888 para control y configuración, y otro puerto el 8001 para visualización.

    Como la IP de mi OpenWrt es la 192.168.1.2, solamente tengo que abrir un explorador apuntando a http://192.168.1.2:8001 y sale una página web mostrando el streaming de la cámara, de la misma manera, si lo haces desde VLC, des menu medio –>abrir ubicación de red –> http://192.168.1.2:8001 y voilà, ya tienes tu cámara ip sobre VLC, ademas, tendrías una página de control en el puerto 8888 para correguir y mejorar la imagen en casi real-time.

    Si no te aclaras con la config de motion, házmelo saber, y puedo hacer una entrada explicándolo.

    Espero te sea de ayuda, y ánimo.

    Didac

  3. Rubencito.

    Hola, hay posibilidad de hacer lo mismo con un Eye Toy de una PS3.
    Las veces que intenté conectarlo a un portatil con windows 8.1, no me dejaba ni de broma.

    Saludos.

  4. motion, que tiene muchas más funcionalidades

    root@OpenWrt:~# opkg update; opkg install motion
    root@OpenWrt:~# mkdir -p /mnt/snapshot
    Configuramos el programa:

    root@OpenWrt:~# nano /etc/motion/motion.conf

    #Solo toco estos parámetros, el resto los quedo igual de momento:

    daemon on
    width 352
    height 288
    framerate 5
    snapshot_interval 10
    target_dir /mnt/snapshot
    snapshot_filename %Y-%m-%d-%H:%M:%S-snapshot-%v
    picture_filename %d%m%Y-%H%M%S-%q
    stream_port 8081
    stream_maxrate 5
    stream_localhost off

    Lo ejecutamos con:

    root@OpenWrt:~# motion -c /etc/motion.conf

    Si abrimos un navegador con http://ip-router:8081 veremos el flujo de vídeo de la cámara. Simultáneamente se graban 5 frames por segundo en /mnt/snapshot cuando la cámara detecte movimiento. Si no hay movimiento se grabará una imagen cada 10 segundos (llamada *snapshot.jpg). Esto tiene mejor pinta. Si queremos matar el proceso, que se está ejecutando como demonio, haremos

    root@OpenWrt:~# killall motion

    Didac esto lo recorte de una web… pero seguro que puedes mejorarlo…

    Gracias…

  5. didac

    motion.conf

    como hacer que motion NO guarde las imagenes?

    me llena la memoria del ruter y tengo que andar borrando manualmente…

  6. Hola jj JJ:

    Monta un usb que apunte a /mnt/snapshot aquí es donde grabará los snapshots.
    Si tu compilación te lo permite por espacio, instala ffmpeg, que es el conversor a mpeg.
    Recuerda, que el paquete motion, va a buscar su config por defecto al directorio /etc/motion, créalo y guarda allí tu motion.conf
    Un fichero de ejemplo, descomprimelos y guárdalos en /etc/motion
    https://mega.nz/#!EstmyIpA
    Revisa puertos de hhtp, 8001 visualización y 8888 config, apunta snapshots a /mnt/penmotion.

    Espero te sea de ayuda.

    Didac.

  7. Hola Rubencito:
    El único proyecto que conozco que funcione la Eye Toy de PS3 en PC es:
    https://codelaboratories.com/downloads/

    En cuanto a openwrt, tengo entendido que responde al siguiente driver:
    kmod-video-gspca-ov534 – 3.18.20-1 – The OV534 USB Camera Driver (ov534) kernel module
    Por lo que haciendo:
    # opkg install kmod-input-core kmod-video-gspca-core kmod-video-gspca-ov534

    Debería funcionarte.

    Espero tus noticias.

    Didac.

  8. didac gracias por pronta respuesta….

    He editado el config original del motion.conf y hace referencias a dvb-tuner… es posible añadir un usb-tdt2 a openWRT?

    :p

  9. Hola jj JJ!!

    El paquete motion, debería ser el mismo en Debian que en OpenWrt, por lo que el soporte de dispositivos también.

    Puede ser interesante, pero ten en cuenta, la memoría y CPU/SOC que utilice el router, tiene unas limitaciones evidentes.

    En cuanto al enlace, lo primero que leo, es que solamente da soporte a Openwrt con kernel 2.6, con lo que en principio, sin más pruebas, solamente funcionaría con versiones antiguas de OpenWrt.

    Espero haberte ayudado.

    Didac.

  10. Gracias pronta respuesta….
    La práctica de inyectar la cámara USB funciona bien tal como tu cuentas…aunque la cam es de baja calidad….

    Tengo un wintv nova tdt USB que utilizo con hackinthos aquí aparcado … Lo conecte al ruter y openwrt lo reconoce perfectamente … Ahora no se como inyectarlo en kernel….para probar como va aunque en tu última compilación la flash esta muy justa para instalar más visitas… Pero siempre puedo recurrir a extroot.. . todo se andará …

  11. A .. Que he vistto en la última compilación que bine preinstalado NODOGSPLASH…. fantástico… En la última ver. De este plugin para openwrt tenía el problema de control QoS en el fichero de configuración d NODOGSPLASH no administra el tema del control d ancho de banda dowload y upload para los usuariosi aquí no funcionaba…
    Saludos.

  12. Hola jjJJ!

    El projecto es interesante, aunque no puedo seguirlo por que no tengo un usb-dvb.
    Recuerda, que en ambas páginas hablan de versiones de Kernel 3.x y 2.6, que podrían ser incompatibles con la distribución actual.

    En estos momentos estoy acabando el proyecto de bluetooth y holux 236 GPSlim, luego intentaré conseguir un usb-dbv a ver si tengo suerte.

    Didac.

  13. Gracias… Por hechale un vistazo…
    De todos modos sigo recopilando info….
    Eso d bluetooch suena bueno…lo sigo igualmente…

    Saludos

  14. Gracias… Por hechale un vistazo…
    De todos modos sigo recopilando info….
    Eso d bluetooch suena bueno…lo sigo igualmente…

    Saludos

  15. Hola jj JJ:

    He mirado la página y por lo que veo, hace referencia a la versión OpenWrt Attitude Adjustment y a la plataforma ar71xx.
    De todas maneras, he encontrado la página de MuMuDVB, que contiene todas las sources incluido los drivers.
    A ver si hago un hueco, y compilaré una versión multidriver para DVB y ya de paso, explico como hacerlo.

    Didac.

  16. esperó a esto que comentas….pero sigo buscando.
    Que ya me pordria a compilarlo yo mismo.

    Me pongo en stanby.

  17. Hola jj JJ:
    Ya he publicado nueva entrada con los drivers para DVB, Tuners y capturadoras de video para Chaos Calmer.

    Espero te sea de ayuda.

    Didac

  18. Sergio

    Hola Didac !! Lo primero gracias por compartir conocimientos. Quiero instalar una camara de fotos a modo de webcam, pero no consigo encontrar los drivers. Creo que el link que proporcionas, (https://www.kernel.org/doc/Documentation/video4linux/gspca.txt) no funciona..
    Cuando escribo el comando lsusb me aparece lo siguiente:
    root@OpenWrt:/# lsusb
    Bus 001 Device 005: ID 04cb:0118 Fuji Photo Film Co., Ltd FinePix A303 Zoom (DSC)
    Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 001 Device 002: ID 05e3:0608 Genesys Logic, Inc. USB-2.0 4-Port HUB
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

    Necesito un poquito de ayuda ya que me quedo pillado al no poder encontrar el driver para esta cámara. Gracias de antemano !

    • Hola Sergio:
      Lamento el retraso en la respuesta, como puedes imaginar estaba de vacaciones y sin cobertura de ningún tipo.
      Por lo que me dices, este es el driver que necesitas:
      Description
      The Fujifilm FinePix USB V4L2 driver (finepix) kernel module.

      Name
      kmod-video-gspca-finepix

      Depends
      kmod-video-gspca-core

      Espero te sea de ayuda.

  19. Marco

    ciao DIdac sono sempre io ti leggo sempre 😉
    quale modulo richiede questa webcam?
    Bus 001 Device 003: ID 1e4e:0102 Cubeternet GL-UPC822 UVC WebCam
    ho fatto diverse ricerche ma nulla

    • Ciao Marco:
      Bus 001 Dispositivo 003: ID 1e4e: 0102 Cubeternet GL-UPC822 UVC WebCam

      Si tratta di una generica webcam USB 2.0, USB Video Class Driver.

      autista:
      kmod-video-UVC

      Per catturare l’immagine mjpg-streamer
      Per il controllo della luminosità, contrasto, uvcdynctrl

      Test: v4l-utils

      LEDE per HG-553, pacchetti e firmware.
      Controlla il manifest, troverai anche il tema vpnc.

      https://mega.nz/#F!4HYRDYYb!mRGoxNi3K-1v_F3iHCVMkQ

      Un saluto:

      Didac

  20. ciao Didac
    kmod-video-uvc è installato ho installato v4al-utils
    ti posto qualcosa io non ci capisco granchè
    root@R00ter:~# v4l2-compliance
    Driver Info:
    Driver name : uvcvideo
    Card type : USB2.0 Camera
    Bus info : usb-ehci-platform-2
    Driver version: 4.9.120
    Capabilities : 0x84200001
    Video Capture
    Streaming
    Extended Pix Format
    Device Capabilities
    Device Caps : 0x04200001
    Video Capture
    Streaming
    Extended Pix Format

    Compliance test for device /dev/video0 (not using libv4l2):

    Required ioctls:
    test VIDIOC_QUERYCAP: OK

    Allow for multiple opens:
    test second video open: OK
    test VIDIOC_QUERYCAP: OK
    test VIDIOC_G/S_PRIORITY: OK

    Debug ioctls:
    test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
    test VIDIOC_LOG_STATUS: OK (Not Supported)

    Input ioctls:
    test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
    test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
    test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
    test VIDIOC_ENUMAUDIO: OK (Not Supported)
    fail: v4l2-test-input-output.cpp(445): could not set input to 0
    test VIDIOC_G/S/ENUMINPUT: FAIL
    test VIDIOC_G/S_AUDIO: OK (Not Supported)
    Inputs: 0 Audio Inputs: 0 Tuners: 0

    Output ioctls:
    test VIDIOC_G/S_MODULATOR: OK (Not Supported)
    test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
    test VIDIOC_ENUMAUDOUT: OK (Not Supported)
    test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
    test VIDIOC_G/S_AUDOUT: OK (Not Supported)
    Outputs: 0 Audio Outputs: 0 Modulators: 0

    Input/Output configuration ioctls:
    test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
    test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
    test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
    test VIDIOC_G/S_EDID: OK (Not Supported)

    Control ioctls:
    fail: v4l2-test-controls.cpp(212): missing control class for cla ss 00980000
    fail: v4l2-test-controls.cpp(241): missing control class for cla ss 009a0000
    test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: FAIL
    test VIDIOC_QUERYCTRL: OK
    warn: v4l2-test-controls.cpp(421): s_ctrl returned EIO
    warn: v4l2-test-controls.cpp(421): s_ctrl returned EIO
    test VIDIOC_G/S_CTRL: OK
    warn: v4l2-test-controls.cpp(662): s_ext_ctrls returned EIO
    warn: v4l2-test-controls.cpp(662): s_ext_ctrls returned EIO
    warn: v4l2-test-controls.cpp(684): g_ext_ctrls(0) invalid error_ idx 0
    warn: v4l2-test-controls.cpp(729): s_ext_ctrls returned EIO
    warn: v4l2-test-controls.cpp(742): error_idx should be equal to count
    warn: v4l2-test-controls.cpp(760): error_idx should be equal to count
    test VIDIOC_G/S/TRY_EXT_CTRLS: OK
    test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK
    test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
    Standard Controls: 12 Private Controls: 0

    Format ioctls:
    test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
    fail: v4l2-test-formats.cpp(1125): got error 16 when setting par ms for buftype 1
    test VIDIOC_G/S_PARM: FAIL
    test VIDIOC_G_FBUF: OK (Not Supported)
    test VIDIOC_G_FMT: OK
    test VIDIOC_TRY_FMT: OK
    fail: v4l2-test-formats.cpp(418): expected EINVAL, but got 16 wh en getting format for buftype 1
    fail: v4l2-test-formats.cpp(952): Video Capture is valid, but no S_FMT was implemented
    test VIDIOC_S_FMT: FAIL
    test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
    test Cropping: OK (Not Supported)
    test Composing: OK (Not Supported)
    fail: v4l2-test-formats.cpp(1406): doioctl(node, VIDIOC_S_FMT, & fmt)
    fail: v4l2-test-formats.cpp(1503): doioctl(node, VIDIOC_S_FMT, & fmt)
    test Scaling: FAIL

    Codec ioctls:
    test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
    test VIDIOC_G_ENC_INDEX: OK (Not Supported)
    test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)

    Buffer ioctls:
    fail: v4l2-test-buffers.cpp(446): ret && ret != EINVAL
    test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: FAIL
    fail: v4l2-test-buffers.cpp(571): q.has_expbuf(node)
    test VIDIOC_EXPBUF: FAIL

    Test input 0:

    Total: 42, Succeeded: 35, Failed: 7, Warnings: 8

Los comentarios están cerrados