27 fevereiro 2006

Configurando sua Webcam no Linux Ubuntu

Se você é um feliz usuário de uma webcam mas não esta conseguindo faze-la funcionar no Linux Ubuntu (ou em qualquer distro), leia esse tópico, se não for leia também (é sempre bom aprender coisas novas :-p). O suporte a webcam ainda é um ponto que precisa ser mais bem visto pelos desenvolvedores de IM (instant messenger), pois com isso muitas pessoas migraram para o Linux com maior facilidade. Vou fazer um relato dos passos a seguir para instalar sua webcam. Verificando o drive certo para sua Webcam Esse é um passo fundamental, errando aqui tenha certeza que você não vai ter êxito nos outros passos. Para poder ver qual o modelo da sua webcam, ou você pode ver diretamente no manual (jeito mais fácil), mas se você é uma pessoa 'relaxada' e perdeu o manual (como eu :-p), não precisar ameaçar a mulher que te vendeu a camera a te dar outro :-p, basta ir ao terminal e digitar: $ lsusb | grep Camera Vai aparecer algo parecido com isso: lnas90@adiltom:~$ lsusb | grep Camera Bus 001 Device 003: ID 2770:9120 NHJ, Ltd Che-ez! Snap / iClick Tiny VGA Digital Camera lnas90@adiltom:~$ Não se assuste não essa minha camera é uma velharia mesmo :-p, feito isso você procura pelo ID do fabricante da placa e pelo modelo especifico dela (quem mandou ser tão cabeça de vento e perder o manual :-p), o google ajuda muito nessas horas, é relativamente fácil descobrir tendo essas informações na mão. Depois de saber o fabricante e o modelo da camera veja no google qual pacote que dá suporte a ela. Vou citar aqui os prováveis: Spca5xx, Sn9c102 (a minha foi essa) é so procurar que vai achar. Preparativos Antes de começar a compilar qualquer coisa vamos precisar de alguns programas instalados, algumas configurações a fazer (supondo que você esteja usando o Ubuntu 5.10) e umas coisas mais, mãos a obra. 1)Precisaremos dos pacotes kernel-source e kernel-headers, vamos instalar com o comando. $ sudo apt-get install linux-headers-2.6.12-10-386 2)Instalando o source do kernel vamos agora instalar os compiladores $ sudo apt-get install build-essential 3)Uma coisa MUITO IMPORTANTE, por causa de problemas com incompatibilidade entre as versões do gcc, so poderemos compilar qualquer drive se estivermos usando a mesma versão que foi compilado o nosso kernel, no caso do Ubuntu 5.10 a versão do gcc foi a 3.4(para saber basta rodar o comando less /proc/version a versão do gcc vai aparecer nas ultimas linhas), vamos ter que instalar. $ sudo apt-get install gcc-3.4 4)Agora vamos definir essa versão como padrão, para que na hora de compilar seja ela usada. $ CC=gcc-3.4 $ export CC 5)Por precaução execute o comando(ele vai criar um link para a fonte do kernel, alguns instaladores usam localizações diferentes). $ sudo ln -s /usr/include/linux /usr/src/linux 6) Pronto nossos preparativos terminaram vamos agora instalar realmente esse drive (antes que você acabe com suas unhas de tanta ansiedade :-p). Spca5xx Esse modelo é como se fosse o coringa, atualmente tem suporte a mais de 170 cameras, você pode baixa-lo em http://mxhaard.free.fr/download.html e para ver a lista de cameras que ele tem suporte é so ir no link http://mxhaard.free.fr/spca5xx.html Baixe o drive e descompacte ele na sua pasta com o comando: $tar -zxvf mais o nome do arquivo Entre na pasta que ele gerou e la dentro execute os comandos. $ make clean $ make $ sudo make install Que são para limpar uma possível instalação anterior, configurar e instalar o drive respectivamente. Por um erro no instalador (creio eu) ele instala o drive no local errado, teremos que concertar agora. $ sudo rm /lib/modules/2.6.12-10-386/kernel/drivers/usb/media/spca5xx/spca5xx.ko $ sudo ln -s /lib/modules/2.6.12-10-386/kernel/drivers/usb/media/spca5xx.ko /lib/modules/2.6.12-10-386/kernel/drivers/usb/media/spca5xx/spca5xx.ko São comandos enormes eu sei, mas não mordem não :-p, o que eles fazem é simplesmente remover o drive antigo (o primeiro) e criar um link para o novo (segundo). Depois de tudo feito so nos resta agora ativar o modulo, isso pode ser feito com o comando: $ modprobe spca5xx Se sua webcam for suportada por esse drive ele funcionará imediantamente (nem se preocupe em ter que reiniciar ;-p). Logitech QuickCam Segundo o desenvolvedor, este driver suporta as câmeras Logitech Quickcam Express (o modelo antigo), Logitech Quickcam Web, LegoCam, Dexxa Webcam, Labtec Webcam e alguns modelos da Logitech QuickCam Notebook. Vamos instala-lo: 1)Baixe o drive no site do desenvolvedor http://qce-ga.sourceforge.net/ 2)Descompacte ele com o comando: $tar -zxvf mais o nome do arquivo 3)Entre na pasta que ele gerou e lá dentro execute o comando para criar o modulo: $ make all 4)Ative o módulo com o comando: # insmod mod_quickcam.ko 5)E para finalizar rode o script, que instalará o resto para você (a final de contas também temos que descansar :-p) # ./quickcam.sh 6)Terminada a instalação entre em algum programa que use a webcam e faça o teste. Sempre olhe a pasta dos módulos Sim isso mesmo, no meu caso eu instalei corretamente o spca5xx e mesmo assim não funcionou(eu pensava que seria esse módulo, mas um reforço para verificar o primeiro item corretamente), fui dar uma 'bisoiada' (olhada ;-p) na pasta /lib/modules/2.6.12-10-386/kernel/drivers/usb/media/ é la que ficam os módulos responsáveis pelas webcans (coitado deles Razz), como já estava sem idéias resolve ir ativando modulo por modulo (pura preguiça de pesquisar Sad ) foi nessas tentativas que achei o modulo ideal para minha webcam, o modulo sn9c102, ativei ele com o comando: $ sudo modprobe sn9c102 force_munmap=1 Para verificar se o sistema reconheceu dei o comando: $ dmesg | grep Camera e o resultado lnas90@adiltom:~$ dmesg | grep Camera [4294838.768000] sn9c102: V4L2 driver for SN9C10x PC Camera Controllers v1:1.24 lnas90@adiltom:~$ O sistema reconheceu a webcam, bom galera é so uma dica para vocês não cairem na mesma pegadinha que eu.

7 comentários:

Anônimo disse...

Olá amigo,

Seu tutorial é muito bom. Fácil de seguir. Só que não consegui fazer minha webcam funcionar, o pc trava quando coloco pra usá-la. Tem algum idéia do seja. Obrigado.

Anônimo disse...

meu e-mail é psico.indie@gmail.com

Paulo Weber disse...

Cara, tenho uma webcam que usa o mesmo driver. No entanto a imagem fica muito escura quando a iluminação não é natural. Sabe se tem algum parâmetro que se passe para o driver e deixar a imagem mais clara?

Anônimo disse...

podes fazer um 'sistema de iluminação' com LED's de IV (infravermelhos)...

Anônimo disse...

eu gostei muito da dica mas essa tb serve p XP SP 2 ?
eu fiquei em duvida e resolvi perguntar antes de fazer , né muito obrigado
LUANA

Anônimo disse...

Opa, fala velhão...

Meu, seguinte, tenho o Debian Etch instalado, kernel 2.6.18-6-486 e uma CAM (Lixo) Aiptek PocketDV...

Segui exatamente os passos descritos por você aqui, adaptando a minha Distro/Kernel e si liga no Erro que me retornou quando Setei o Comando "make":

matrix:/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye# make
Building SPCA5XX driver for 2.5/2.6 kernel.
Remember: you must have read/write access to your kernel source tree.
make -C /lib/modules/`uname -r`/build SUBDIRS=/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye CC=cc modules
make[1]: Entrando no diretório `/usr/src/linux-headers-2.6.18-6-486'
CC [M] /home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.o
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c: In function ‘spca5xx_open’:
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:2394: warning: implicit declaration of function ‘video_devdata’
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:2394: warning: initialization makes pointer from integer without a cast
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:2399: warning: implicit declaration of function ‘video_get_drvdata’
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:2399: warning: initialization makes pointer from integer without a cast
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c: In function ‘spca5xx_close’:
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:2489: warning: initialization makes pointer from integer without a cast
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c: In function ‘spca5xx_do_ioctl’:
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:2549: warning: initialization makes pointer from integer without a cast
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c: In function ‘spca5xx_ioctl’:
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3093: warning: implicit declaration of function ‘video_usercopy’
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c: In function ‘spca5xx_read’:
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3112: warning: initialization makes pointer from integer without a cast
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c: In function ‘spca5xx_mmap’:
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3211: warning: initialization makes pointer from integer without a cast
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c: At top level:
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3263: error: variable ‘spca50x_template’ has initializer but incomplete type
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3264: error: unknown field ‘owner’ specified in initializer
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3264: warning: excess elements in struct initializer
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3264: warning: (near initialization for ‘spca50x_template’)
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3265: error: unknown field ‘name’ specified in initializer
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3265: warning: excess elements in struct initializer
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3265: warning: (near initialization for ‘spca50x_template’)
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3266: error: unknown field ‘type’ specified in initializer
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3266: warning: excess elements in struct initializer
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3266: warning: (near initialization for ‘spca50x_template’)
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3267: error: unknown field ‘hardware’ specified in initializer
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3267: warning: excess elements in struct initializer
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3267: warning: (near initialization for ‘spca50x_template’)
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3268: error: unknown field ‘fops’ specified in initializer
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3268: warning: excess elements in struct initializer
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3268: warning: (near initialization for ‘spca50x_template’)
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3270: error: unknown field ‘release’ specified in initializer
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3270: error: ‘video_device_release’ undeclared here (not in a function)
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3270: warning: excess elements in struct initializer
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3270: warning: (near initialization for ‘spca50x_template’)
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3272: error: unknown field ‘minor’ specified in initializer
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3272: warning: excess elements in struct initializer
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3272: warning: (near initialization for ‘spca50x_template’)
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c: In function ‘cd_to_spca50x’:
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3340: warning: implicit declaration of function ‘to_video_device’
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3340: warning: initialization makes pointer from integer without a cast
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3341: warning: return makes pointer from integer without a cast
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c: In function ‘spca50x_create_sysfs’:
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:3450: warning: implicit declaration of function ‘video_device_create_file’
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c: In function ‘spca5xx_probe’:
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:5509: warning: implicit declaration of function ‘video_device_alloc’
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:5509: warning: assignment makes pointer from integer without a cast
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:5512: error: invalid application of ‘sizeof’ to incomplete type ‘struct video_device’
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:5512: error: invalid application of ‘sizeof’ to incomplete type ‘struct video_device’
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:5512: error: invalid application of ‘sizeof’ to incomplete type ‘struct video_device’
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:5514: error: dereferencing pointer to incomplete type
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:5516: warning: implicit declaration of function ‘video_set_drvdata’
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:5521: warning: implicit declaration of function ‘video_register_device’
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:5521: error: ‘VFL_TYPE_GRABBER’ undeclared (first use in this function)
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:5521: error: (Each undeclared identifier is reported only once
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:5521: error: for each function it appears in.)
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:5550: error: dereferencing pointer to incomplete type
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:5551: warning: implicit declaration of function ‘video_device_release’
/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.c:5553: warning: implicit declaration of function ‘video_unregister_device’
make[2]: ** [/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye/drivers/usb/spca5xx.o] Erro 1
make[1]: ** [_module_/home/alcarrolikis/Drivers/Aiptek/spca5xx-v4l1goodbye] Erro 2
make[1]: Saindo do diretório `/usr/src/linux-headers-2.6.18-6-486'
make: ** [default] Erro 2




Tem idéia de como resolver isso?

ps: Estava fazendo tudo com root pra não ter zica..


Vlw Velhão!!!

Carlinha disse...

Oi Lucas, agradeço a dica.. mas nossa chegou na parte da configuração, me embananei toda... não sei como fazer isso pelo terminal, tem uma outra forma mais fácil?
Agradeço desde já,

deusefielblogk@hotmail.com

Postar um comentário