compilazione_driver_webcam
==========================
### scompattazione sorgenti
codice:
cacao74@tweety:~/sources$ tar jxf ov511-2.28.tar.bz2
### applicazione patch
codice:
cacao74@tweety:~/sources$ patch -p0 ov511-2.28_kernel-2.6.12.2.patch
### entrare nella directory dei sorgenti
codice:
cacao74@tweety:~/sources$ cd ov511-2.28
### compilare i sorgenti
# NOTA: è stato necessario avere i sorgenti del kernel
# installati e compilato (basta "make && make modules")
# verificare anche l'esistenza del seguente link simbolico
# /lib/modules/$(uname -r)/build -> /dir/sorgenti/kernel/$(uname -r)
codice:
cacao74@tweety:~/sources/ov511-2.28$ make
Building OVCam drivers for 2.6 kernel.
PLEASE IGNORE THE "Overriding SUBDIRS" WARNING
make -C /lib/modules/2.6.12.2-AcerTM800LCi/build SUBDIRS=/home/cacao74/sources/ov511-2.28 modules
make[1]: Entering directory `/usr/src/linux-2.6.12.2'
CC [M] /home/cacao74/sources/ov511-2.28/ov511_core.o
CC [M] /home/cacao74/sources/ov511-2.28/ov511_decomp.o
CC [M] /home/cacao74/sources/ov511-2.28/ov518_decomp.o
CC [M] /home/cacao74/sources/ov511-2.28/ovcamchip_core.o
CC [M] /home/cacao74/sources/ov511-2.28/ov6x20.o
CC [M] /home/cacao74/sources/ov511-2.28/ov6x30.o
CC [M] /home/cacao74/sources/ov511-2.28/ov7x10.o
CC [M] /home/cacao74/sources/ov511-2.28/ov7x20.o
CC [M] /home/cacao74/sources/ov511-2.28/ov76be.o
LD [M] /home/cacao74/sources/ov511-2.28/ovcamchip.o
LD [M] /home/cacao74/sources/ov511-2.28/ov511.o
CC [M] /home/cacao74/sources/ov511-2.28/ovfx2.o
CC [M] /home/cacao74/sources/ov511-2.28/saa7111-new.o
CC [M] /home/cacao74/sources/ov511-2.28/tuner.o
CC [M] /home/cacao74/sources/ov511-2.28/tda7313.o
Building modules, stage 2.
MODPOST
CC /home/cacao74/sources/ov511-2.28/ov511.mod.o
LD [M] /home/cacao74/sources/ov511-2.28/ov511.ko
CC /home/cacao74/sources/ov511-2.28/ovcamchip.mod.o
LD [M] /home/cacao74/sources/ov511-2.28/ovcamchip.ko
CC /home/cacao74/sources/ov511-2.28/ovfx2.mod.o
LD [M] /home/cacao74/sources/ov511-2.28/ovfx2.ko
CC /home/cacao74/sources/ov511-2.28/saa7111-new.mod.o
LD [M] /home/cacao74/sources/ov511-2.28/saa7111-new.ko
CC /home/cacao74/sources/ov511-2.28/tda7313.mod.o
LD [M] /home/cacao74/sources/ov511-2.28/tda7313.ko
CC /home/cacao74/sources/ov511-2.28/tuner.mod.o
LD [M] /home/cacao74/sources/ov511-2.28/tuner.ko
make[1]: Leaving directory `/usr/src/linux-2.6.12.2'
### installazione dei moduli compilati
codice:
cacao74@tweety:~/sources/ov511-2.28$ su -c "make install"
Password:
./do_install.sh *.ko
Detected 2.6 kernel
Creating install path: /lib/modules/2.6.12.2-AcerTM800LCi/kernel/drivers/usb/media/
Installing ov511.ko to /lib/modules/2.6.12.2-AcerTM800LCi/kernel/drivers/usb/media/
Installing ovcamchip.ko to /lib/modules/2.6.12.2-AcerTM800LCi/kernel/drivers/usb/media/
Installing ovfx2.ko to /lib/modules/2.6.12.2-AcerTM800LCi/kernel/drivers/usb/media/
Installing saa7111-new.ko to /lib/modules/2.6.12.2-AcerTM800LCi/kernel/drivers/usb/media/
Installing tda7313.ko to /lib/modules/2.6.12.2-AcerTM800LCi/kernel/drivers/usb/media/
Installing tuner.ko to /lib/modules/2.6.12.2-AcerTM800LCi/kernel/drivers/usb/media/
Finding module dependencies
All done!
### caricamento moduli per la webcam
codice:
cacao74@tweety:~/sources/ov511-2.28$ su -c "modprobe ovcamchip"
Password:
cacao74@tweety:~/sources/ov511-2.28$ su -c "modprobe ovcamchip"
Password:
cacao74@tweety:~/sources/ov511-2.28$ lsmod | grep ov
ov511 97664 0
videodev 7424 1 ov511
v4l2_common 4864 1 ov511
ovcamchip 22408 0
### verifica messaggi del kernel
codice:
cacao74@tweety:~/sources/ov511-2.28$ dmesg
ovcamchip: v2.27 for Linux 2.6 : OV camera chip I2C driver
Linux video capture interface: v1.00
/home/cacao74/sources/ov511-2.28/ov511_core.c: USB OV518 video device found
/home/cacao74/sources/ov511-2.28/ov511_core.c: Device revision 1
/home/cacao74/sources/ov511-2.28/ov511_core.c: Compression required with OV518...enabling
ovcamchip: Camera chip is an OV6630AF
/home/cacao74/sources/ov511-2.28/ov511_core.c: Device at usb-0000:00:1d.1-1 registered to minor 0
usbcore: registered new driver ov511
/home/cacao74/sources/ov511-2.28/ov511_core.c: v2.28 : ov511 USB Camera Driver (V4L2 disabled)
### fine
a questo punto utilizzare il tool preferito per gestire la webcam
@@@ ALLEGATI @@@
ov511_kernel-2.6.12.2.patch
Codice PHP:
diff -c ov511-2.28/ov511_core.c ov511-2.28-patched/ov511_core.c
*** ov511-2.28/ov511_core.c 2004-07-13 13:54:22.000000000 +0200
--- ov511-2.28-patched/ov511_core.c 2005-08-08 02:37:42.000000000 +0200
***************
*** 4881,4886 ****
--- 4881,4891 ----
pos = (unsigned long)ov->fbuf;
while (size > 0) {
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
+ page = vmalloc_to_pfn((void *)pos);
+ if (remap_pfn_range(vma, start, page, PAGE_SIZE,
+ PAGE_SHARED)) {
+ #else
page = kvirt_to_pa(pos);
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 3) || defined(RH9_REMAP)
if (remap_page_range(vma, start, page, PAGE_SIZE,
***************
*** 4888,4893 ****
--- 4893,4899 ----
#else
if (remap_page_range(start, page, PAGE_SIZE, PAGE_SHARED)) {
#endif
+ #endif
up(&ov->lock);
return -EAGAIN;
}
diff -c ov511-2.28/ovcamchip_core.c ov511-2.28-patched/ovcamchip_core.c
*** ov511-2.28/ovcamchip_core.c 2004-07-16 12:58:25.000000000 +0200
--- ov511-2.28-patched/ovcamchip_core.c 2005-08-08 02:20:31.000000000 +0200
***************
*** 582,588 ****
static struct i2c_client client_template = {
I2C_DEVNAME("(unset)"),
! .id = -1,
.driver = &driver,
};
--- 582,588 ----
static struct i2c_client client_template = {
I2C_DEVNAME("(unset)"),
! //.id = -1,
.driver = &driver,
};
diff -c ov511-2.28/ovfx2.c ov511-2.28-patched/ovfx2.c
*** ov511-2.28/ovfx2.c 2004-07-16 01:32:08.000000000 +0200
--- ov511-2.28-patched/ovfx2.c 2005-08-08 02:37:51.000000000 +0200
***************
*** 2502,2507 ****
--- 2502,2512 ----
pos = (unsigned long)ov->fbuf;
while (size > 0) {
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
+ page = vmalloc_to_pfn((void *)pos);
+ if (remap_pfn_range(vma, start, page, PAGE_SIZE,
+ PAGE_SHARED)) {
+ #else
page = kvirt_to_pa(pos);
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 3) || defined(RH9_REMAP)
if (remap_page_range(vma, start, page, PAGE_SIZE,
***************
*** 2509,2514 ****
--- 2514,2520 ----
#else
if (remap_page_range(start, page, PAGE_SIZE, PAGE_SHARED)) {
#endif
+ #endif
up(&ov->lock);
return -EAGAIN;
}
diff -c ov511-2.28/saa7111-new.c ov511-2.28-patched/saa7111-new.c
*** ov511-2.28/saa7111-new.c 2004-07-13 14:04:46.000000000 +0200
--- ov511-2.28-patched/saa7111-new.c 2005-08-08 02:21:41.000000000 +0200
***************
*** 520,526 ****
static struct i2c_client client_template = {
I2C_DEVNAME("(unset)"),
! .id = -1,
.driver = &driver
};
--- 520,526 ----
static struct i2c_client client_template = {
I2C_DEVNAME("(unset)"),
! //.id = -1,
.driver = &driver
};
diff -c ov511-2.28/tda7313.c ov511-2.28-patched/tda7313.c
*** ov511-2.28/tda7313.c 2004-07-15 12:06:44.000000000 +0200
--- ov511-2.28-patched/tda7313.c 2005-08-08 02:22:49.000000000 +0200
***************
*** 202,208 ****
static struct i2c_client client_template = {
I2C_DEVNAME("tda7313"),
! .id = -1,
.driver = &driver,
};
--- 202,208 ----
static struct i2c_client client_template = {
I2C_DEVNAME("tda7313"),
! //.id = -1,
.driver = &driver,
};
ciao