FORUM Tom's Hardware » Le monde de Linux » Utilisation » [Réglé] Inserer un driver dans le kernel tree
 

[Réglé] Inserer un driver dans le kernel tree

Il y a 408 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : [Réglé] Inserer un driver dans le kernel tree
 
Risen From Ashes
Plus d'informations

Salut
Ce que je veux va vous paraître compliqué mais je m'explique. Je veux insérer le driver gspcav pour webcam dans le kernel tree et tout compiler dedans
J'ai récupéré les sources gcspcav-xxxx.tar.gz, puis j'ai copié les sources dans /usr/src/linux-xxx/driver/media/video/gspca
voilà le ls

Code :
  1. [root@nemrod linux-2.6.20.1]# ls /usr/src/linux-2.6.20.1/drivers/media/video/gspca/
  2. cs2102.h        gspca.h         Makefile   sonix.h         spca505.dat     spcagamma.h        zc3xx.h
  3. cx11646.h       hdcs2020.h      mr97311.h  sp5xxfw2.dat    spca505_init.h  spcausb.h
  4. cxlib.h         hv7131b.h       ov7630c.h  sp5xxfw2.h      spca506.h       tas5130c.h
  5. et61xx51.h      hv7131c.h       pac207.h   spca500.dat     spca508.dat     tas5130c_vf0250.h
  6. gspca_core.c    icm105a.h       pas106b.h  spca500_init.h  spca508_init.h  tv8532.h
  7. gspcadecoder.c  jpeg_qtables.h  pb0330.h   spca501.dat     spca561.h       vc032x.h
  8. gspcadecoder.h  Kconfig         sn9cxxx.h  spca501_init.h  spcaCompat.h    vc032x_sensor.h


 
j'ai ensuite crée le Makefile et le Kconfig en s'appuyant ET sur le Makefile orginal des sources et sur les Makefile du kernel
Voilà un extrait de /usr/src/linux-2.6.20.1/drivers/media/video/Makefile que j'ai modifié

Code :
  1. [root@nemrod linux-2.6.20.1]# cat /usr/src/linux-2.6.20.1/drivers/media/video/Makefile
  2. obj-$(CONFIG_USB_ET61X251)      += et61x251/
  3. obj-$(CONFIG_USB_GSPCAV)        += gspca/
  4. obj-$(CONFIG_USB_PWC)           += pwc


 
voilà un extrait de /usr/src/linux-2.6.20.1/drivers/media/video/Kconfig modifié

Code :
  1. [root@nemrod linux-2.6.20.1]# cat /usr/src/linux-2.6.20.1/drivers/media/video/Kconfig
  2. source "drivers/media/video/zc0301/Kconfig"
  3. source "drivers/media/video/pwc/Kconfig"
  4. source "drivers/media/video/gspca/Kconfig"
  5. endmenu # V4L USB devices


 
voilà /usr/src/linux-2.6.20.1/drivers/media/video/gspca/Kconfig que j'ai créé

Code :
  1. [root@nemrod linux-2.6.20.1]# cat /usr/src/linux-2.6.20.1/drivers/media/video/gspca/Kconfig
  2. config USB_GSPCA
  3.         tristate "GSPCA"
  4.         depends on USB && VIDEO_DEV && VIDEO_V4L1_COMPAT
  5.         select VIDEO_USBVIDEO
  6.         help
  7. config USB_GSPCA_DEBUG
  8.         bool "GSPCA debugging"
  9.         depends on USB_GSPCA
  10.         help
  11.           This is an option for use by developers; most people should
  12.           say N here.  This enables GSPCA core and driver debugging.
  13. config USB_GSPCA_REGISTERPLAY
  14.         bool "GSPCA registerplay"
  15.         depends on USB_GSPCA
  16.         help
  17.           Optional: Enable direct register read/write for PAC207 development
  18.           If unsure say n
  19. config USB_GSPCA_COMPRESSION
  20.         bool "GSPCA Compression"
  21.         depends on USB_GSPCA
  22.         help
  23.           Optional: Enable compression


 
voilà /usr/src/linux-2.6.20.1/drivers/media/video/gspca/Makefile que j'ai créé

Code :
  1. [root@nemrod linux-2.6.20.1]# cat /usr/src/linux-2.6.20.1/drivers/media/video/gspca/Makefile
  2. gspca-objs := gspca_core.o gspcadecoder.o gspca.mod.o
  3. obj-$(CONFIG_USB_GSPCA) += gspca.o
  4. ifeq ($(CONFIG_USB_GSPCA_DEBUG),y)
  5. EXTRA_CFLAGS += -DGSPCA_ENABLE_DEBUG=1
  6. else
  7. EXTRA_CFLAGS += -DGSPCA_ENABLE_DEBUG=0
  8. endif
  9. ifeq ($(CONFIG_USB_GSPCA_REGISTERPLAY),y)
  10. EXTRA_CFLAGS += -DGSPCA_ENABLE_REGISTERPLAY=1
  11. else
  12. EXTRA_CFLAGS += -DGSPCA_ENABLE_REGISTERPLAY=0
  13. endif
  14. ifeq ($(CONFIG_USB_GSPCA_COMPRESSION),y)
  15. EXTRA_CFLAGS += -DGSPCA_ENABLE_COMPRESSION=1
  16. else
  17. EXTRA_CFLAGS += -DGSPCA_ENABLE_COMPRESSION=0
  18. endif
  19. EXTRA_CFLAGS += -DCONFIG_USB_GSPCA_MODULE=1 -DMODULE -D__KERNEL__
  20. EXTRA_CFLAGS += -DVID_HARDWARE_GSPCA=0xFF -DGSPCA_VERSION=\"01.00.12\"


 
et enfin (ouuuff) voilà le Make que j'ai trouvé dans les sources

Code :
  1. [root@nemrod linux-2.6.20.1]# cat /home/firebird/tmp/gspcav1-20070110/Makefile
  2. VERSION    = 01.00.12
  3. DEFINES    =
  4. ###
  5. # The following flags enable experimental features.
  6. # By default, these are enabled for development versions of the driver, and
  7. # disabled for release versions.
  8. # Optional: Enable driver debugging
  9. DEFINES   += -DGSPCA_ENABLE_DEBUG
  10. # Optional: Enable direct register read/write for PAC207 development
  11. DEFINES   += -DGSPCA_ENABLE_REGISTERPLAY
  12. ###
  13. # The following flags enable features that aren't yet implemented, and
  14. # therefore are disabled by default.
  15. # Optional: Enable compression
  16. DEFINES   += -DGSPCA_ENABLE_COMPRESSION
  17. ###
  18. # Rest of Makefile follows here. You probably won't need to touch this.
  19. # Setup defines
  20. DEFINES   += -DCONFIG_USB_GSPCA_MODULE=1 -DMODULE -D__KERNEL__
  21. DEFINES   += -DVID_HARDWARE_GSPCA=0xFF -DGSPCA_VERSION=\"$(VERSION)\"
  22. ifneq ($(KERNELRELEASE),)   # We were called by kbuild
  23. CFLAGS += $(DEFINES)
  24. obj-m += gspca.o
  25. gspca-objs := gspca_core.o gspcadecoder.o
  26. else   # We were called from command line
  27. KERNEL_VERSION = `uname -r`
  28. KERNELDIR := /lib/modules/$(KERNEL_VERSION)/build
  29. PWD  := $(shell pwd)
  30. #MODULE_INSTALLDIR = /lib/modules/$(KERNEL_VERSION)/kernel/drivers/usb/media/
  31. MODULE_INSTALLDIR = /lib/modules/$(KERNEL_VERSION)/kernel/drivers/media/video/
  32. default:
  33.         $(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) CC=$(CC) modules
  34. install:
  35.         mkdir -p $(MODULE_INSTALLDIR)
  36.         rm -f $(MODULE_INSTALLDIR)spca5xx.ko
  37.         rm -f $(MODULE_INSTALLDIR)gspca.ko
  38.         install -c -m 0644 gspca.ko $(MODULE_INSTALLDIR)
  39.         /sbin/depmod -ae
  40. uninstall:
  41.         rm -f $(MODULE_INSTALLDIR)gspca.ko
  42.         /sbin/depmod -aq
  43. endif
  44. ##############################################################################
  45. # OTHER TARGETS
  46. ##############################################################################
  47. clean:
  48.         rm -r -f *.o .gspcadecoder.o.cmd \
  49.         .gspca.o.cmd  *.o *.ko *.mod.* .[a-z]* core *.i \
  50.         *.symvers *.err
  51. ##############################################################################


 
quand je compile le noyau y a aucun module dans /usr/src/linux-2.6.20.1/drivers/media/video/gspca
alors que quand je compile le driver à part ça donne ça

Code :
  1. [firebird@nemrod gspcav1-20070110]$ make
  2. make -C /lib/modules/`uname -r`/build SUBDIRS=/home/firebird/tmp/gspcav1-20070110 CC=cc modules
  3. make[1]: entrant dans le répertoire « /usr/src/linux-2.6.20.1 »
  4.   CC [M]  /home/firebird/tmp/gspcav1-20070110/gspca_core.o
  5. /home/firebird/tmp/gspcav1-20070110/gspca_core.c: In function ‘spca5xx_do_ioctl’:
  6. /home/firebird/tmp/gspcav1-20070110/gspca_core.c:2239: attention : ISO C90 forbids mixed declarations and code
  7. /home/firebird/tmp/gspcav1-20070110/gspca_core.c:2243: attention : implicit declaration of function ‘pac207_RegWrite’
  8. /home/firebird/tmp/gspcav1-20070110/gspca_core.c:2255: attention : implicit declaration of function ‘pac207_RegRead’
  9.   CC [M]  /home/firebird/tmp/gspcav1-20070110/gspcadecoder.o
  10.   LD [M]  /home/firebird/tmp/gspcav1-20070110/gspca.o
  11.   Building modules, stage 2.
  12.   MODPOST 1 modules
  13. WARNING: "pac207_RegRead" [/home/firebird/tmp/gspcav1-20070110/gspca.ko] undefined!
  14. WARNING: "pac207_RegWrite" [/home/firebird/tmp/gspcav1-20070110/gspca.ko] undefined!
  15.   CC      /home/firebird/tmp/gspcav1-20070110/gspca.mod.o
  16.   LD [M]  /home/firebird/tmp/gspcav1-20070110/gspca.ko
  17. make[1]: quittant le répertoire « /usr/src/linux-2.6.20.1 »
  18. [firebird@nemrod gspcav1-20070110]$ ls gspca.ko
  19. gspca.ko


 
J'ai déjà fait la meme chose avec le driver uvc et ça marche nickel mais là je comprends pas pourquoi il compile pas :(


Message édité par FireBird le 11-03-2007 à 17:11:03

---------------
No Justice No Peace

 

Risen From Ashes
Plus d'informations

je fais du progrès. ça compile dans /usr/src/linux-xxx/drivers/media/video/gspca.
Je reçois cette erreur

Code :
  1. Building modules, stage 2.
  2.   MODPOST 180 modules
  3. WARNING: "pac207_RegRead" [drivers/media/video/gspca/gspca.ko] undefined!
  4. WARNING: "pac207_RegWrite" [drivers/media/video/gspca/gspca.ko] undefined!
  5. make[1]: *** [__modpost] Erreur 1
  6. make: *** [modules] Erreur 2
  7. [root@nemrod linux-2.6.20.1]#


 
le dossier gspca contient les fichiers .o suivant

Code :
  1. [root@nemrod linux-2.6.20.1]# ls -1 drivers/media/video/gspca/*.o*
  2. drivers/media/video/gspca/built-in.o
  3. drivers/media/video/gspca/gspca_core.o
  4. drivers/media/video/gspca/gspcadecoder.o
  5. drivers/media/video/gspca/gspca.o


 
mais comme l'erreur l'indique il n'y a pas de gspaca.ko :(


---------------
No Justice No Peace

 

Plus d'informations

euh, personnellement je n'ai jamais fait ca et a mon avis personne sur PPC ( apart toi) n'a fait ca.
Tu devrait peut être chercher de l'aide sur un forum genre HFR ou spécialisé Linux.

Risen From Ashes
Plus d'informations

a écrit :

euh, personnellement je n'ai jamais fait ca et a mon avis personne sur PPC ( apart toi) n'a fait ca.
Tu devrait peut être chercher de l'aide sur un forum genre HFR ou spécialisé Linux.


HFR=hardware forum ??
et t'en connais des sites spécialisés ?


---------------
No Justice No Peace

 

Plus d'informations

fidojb a écrit :

HFR=hardware forum ??
et t'en connais des sites spécialisés ?


 
hfr=hardware.fr oui
sinon des forums spécialisé il y en a plein, par exemple sur gentoo.org ou les utilisateurs sont plus expérimentés qu'ici, ou bien linux.org :D

Risen From Ashes
Plus d'informations

a écrit :

hfr=hardware.fr oui
sinon des forums spécialisé il y en a plein, par exemple sur gentoo.org ou les utilisateurs sont plus expérimentés qu'ici, ou bien linux.org :D


ça me fout les jetons linux.org, je vais être le newbie par excellence  :D  
vais voir qd meme et merci...


---------------
No Justice No Peace

 

Risen From Ashes
Plus d'informations

fidojb a écrit :

ça me fout les jetons linux.org, je vais être le newbie par excellence  :D  
vais voir qd meme et merci...


Réglé.
Fallait juste ajouter des CONFIG_ après le -D et modifier en conséquence les fichiers *.c et *.h qui contiennent ces constantes. J'ai trouvé tout seul comme un grand :D

Code :
  1. gspca-objs := gspca_core.o gspcadecoder.o
  2. obj-$(CONFIG_GSPCA) += gspca.o
  3. ifeq ($(CONFIG_GSPCA_DEBUG),y)
  4. EXTRA_CFLAGS += -DCONFIG_GSPCA_ENABLE_DEBUG=1
  5. else
  6. EXTRA_CFLAGS += -DCONFIG_GSPCA_ENABLE_DEBUG=0
  7. endif
  8. ifeq ($(CONFIG_GSPCA_REGISTERPLAY),y)
  9. EXTRA_CFLAGS += -DCONFIG_GSPCA_ENABLE_REGISTERPLAY=1
  10. else
  11. EXTRA_CFLAGS += -DCONFIG_GSPCA_ENABLE_REGISTERPLAY=0
  12. endif
  13. ifeq ($(CONFIG_GSPCA_COMPRESSION),y)
  14. EXTRA_CFLAGS += -DCONFIG_GSPCA_ENABLE_COMPRESSION=1
  15. else
  16. EXTRA_CFLAGS += -DCONFIG_GSPCA_ENABLE_COMPRESSION=0
  17. endif
  18. EXTRA_CFLAGS += -DCONFIG_GSPCA_MODULE=1 -DMODULE -D__KERNEL__
  19. EXTRA_CFLAGS += -DVID_HARDWARE_GSPCA=0xFF -DGSPCA_VERSION=\"01.00.12\"


maintenant ça compile bien le module gspca.ko

Code :
  1. [root@nemrod gspca]# ls gspca*
  2. gspca_core.c  gspcadecoder.c  gspcadecoder.o  gspca.ko     gspca.mod.o
  3. gspca_core.o  gspcadecoder.h  gspca.h         gspca.mod.c  gspca.o


---------------
No Justice No Peace

 


Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Le monde de Linux » Utilisation » [Réglé] Inserer un driver dans le kernel tree
 

Annonces Google
Publicité