miércoles, 13 de febrero de 2008

Firewire + Debian + linux 2.6.22

Resulta que por una pataleta de los encargados del kernel de linux en Debian a partir de linux 2.6.22 los "antiguos" modulos para ieee1394 (Firewire) no se van a seguir compilando, solo se compilan los nuevos. El problema es que ninguna de las aplicaciones para capturar video digital desde las cámaras con puerto ieee1394 que se encuentran en el repositorio de Debian funcionan con los nuevos módulos!

P/ Entonces que toca hacer? R/ compilar los módulos e instalarlos a pedal.

Estas son las instrucciones:


1. Instalar linux-headers, linux-source y module-assistant:


# apt-get install linux-headers-$(uname -r) linux-source-2.6.22 module-assistant

1.5 Asegurarse de que tiene todo lo necesario para compilar módulos del kernel:

# m-a prepare

2. Descomprimir los fuentes de linux:

# cd /usr/src
# tar xjf linux-source-2.6.22.tar.bz2

3. Ir a la carpeta donde estan los fuentes de los módulos "viejos":

# cd linux-source-2.6.22/drivers/ieee1394

4. Guardar una copia del Makefile original (uno nunca sabe)

# cp Makefile Makefile-original

5. Editar Makefile para que se vea asi (con nano Makefile):

#
# Makefile for the Linux IEEE 1394 implementation
#

ieee1394-objs := ieee1394_core.o ieee1394_transactions.o hosts.o \
highlevel.o csr.o nodemgr.o dma.o iso.o \
csr1212.o config_roms.o

obj-m += ieee1394.o
obj-m += pcilynx.o
obj-m += ohci1394.o
obj-m += video1394.o
obj-m += raw1394.o
obj-m += sbp2.o
obj-m += dv1394.o
obj-m += eth1394.o

6. Compilar los módulos:

# make -C /lib/modules/$(uname -r)/build M=$(pwd) modules

7. Instalar los módulos:

# mkdir /lib
/modules/$(uname -r)/kernel/drivers/ieee1394
# cp *.ko /lib/modules/$(uname -r)/kernel/drivers/ieee1394
# depmod -a

8. Desactivar los módulos nuevos añadiendo lo siguiente a /etc/modprobe.d/blacklist:

# Mientras esto se estabiliza es mejor usar los drivers viejos
blacklist firewire-ohci
blacklist firewire-sbp2
blacklist firewire-core
blacklist dv1394


9. Arreglar los permisos de acceso a /dev/raw1394. Se abre el archivo /etc/udev/permissions.rules y se busca la la linea que tiene raw1394, debe quedar asi:

KERNEL=="raw1394", GROUP="video"

Listo! despues de reiniciar todos los usuarios que pertenezcan al grupo video podrán accesar camaras con puerto ieee1394 desde programas como los populares Kino y dvgrab.

5 comentarios:

  1. Hola, hace tiempo que venía pegándome con ello, no conseguía que Kino me dejara capturar vídeo, tenía que reiniciar con otro kernel más antiguo para hacerlo.

    Esto me ha venido bastante bien, pero kino y dvgrab me siguen diciendo que falla la captura porque no me reconoce la cámara como conectada. De todos modos, gracias por la solución de arriba ;)

    ResponderEliminar
  2. Sabrias como se haria para el kernel 2.6.25. Es que la solucion no me vale.

    ResponderEliminar
  3. El error viene dado cuando compilo los modulos. Adjunto el log de la consola

    ake: se ingresa al directorio `/usr/src/linux-headers-2.6.25-2-686'
    CC [M] /usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394/ieee1394_core.o
    CC [M] /usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394/ieee1394_transactions.o
    CC [M] /usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394/hosts.o
    CC [M] /usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394/highlevel.o
    CC [M] /usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394/csr.o
    CC [M] /usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394/nodemgr.o
    /usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394/nodemgr.c:198: warning: initialization from incompatible pointer type
    /usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394/nodemgr.c: In function 'nodemgr_uevent':
    /usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394/nodemgr.c:1189: warning: passing argument 1 of 'add_uevent_var' from incompatible pointer type
    /usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394/nodemgr.c:1189: warning: passing argument 2 of 'add_uevent_var' makes pointer from integer without a cast
    /usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394/nodemgr.c:1190: warning: passing argument 1 of 'add_uevent_var' from incompatible pointer type
    /usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394/nodemgr.c:1190: warning: passing argument 2 of 'add_uevent_var' makes pointer from integer without a cast
    /usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394/nodemgr.c:1191: warning: passing argument 1 of 'add_uevent_var' from incompatible pointer type
    /usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394/nodemgr.c:1191: warning: passing argument 2 of 'add_uevent_var' makes pointer from integer without a cast
    /usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394/nodemgr.c:1192: warning: passing argument 1 of 'add_uevent_var' from incompatible pointer type
    /usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394/nodemgr.c:1192: warning: passing argument 2 of 'add_uevent_var' makes pointer from integer without a cast
    /usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394/nodemgr.c:1193: warning: passing argument 1 of 'add_uevent_var' from incompatible pointer type
    /usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394/nodemgr.c:1193: warning: passing argument 2 of 'add_uevent_var' makes pointer from integer without a cast
    /usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394/nodemgr.c:1199: warning: passing argument 1 of 'add_uevent_var' from incompatible pointer type
    /usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394/nodemgr.c:1199: warning: passing argument 2 of 'add_uevent_var' makes pointer from integer without a cast
    CC [M] /usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394/dma.o
    /usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394/dma.c: In function 'dma_region_alloc':
    /usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394/dma.c:114: error: 'struct scatterlist' has no member named 'page'
    make[1]: *** [/usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394/dma.o] Error 1
    make: *** [_module_/usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394] Error 2
    make: se sale del directorio `/usr/src/linux-headers-2.6.25-2-686'

    Espero que entiendas algo. Basicamente el error viene aqui:

    CC [M] /usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394/dma.o
    /usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394/dma.c: In function 'dma_region_alloc':
    /usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394/dma.c:114: error: 'struct scatterlist' has no member named 'page'
    make[1]: *** [/usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394/dma.o] Error 1
    make: *** [_module_/usr/src/linux-source-2.6.22/linux-2.6.22/drivers/ieee1394] Error 2
    make: se sale del directorio `/usr/src/linux-headers-2.6.25-2-686'

    Te agredeceria que me pudieras echar un cable.

    Un saludo.

    ResponderEliminar
  4. Estas usando las fuentes del kernel 2.6.22, debes usar las fuentes de la misma versión de tu kernel, en este caso 2.6.25

    ResponderEliminar