[usb.h] Comment recompiler mon usb.h en libusb (kernel 2.6.9) ?

Comment recompiler mon usb.h en libusb (kernel 2.6.9) ? [usb.h] - Linux et OS Alternatifs

Marsh Posté le 04-01-2005 à 16:01:26    

Bonjour à tous et merci pour ce forum que je découvre avec joie. J'ai effectué une recherche mais je n'ai pas trouvé ma réponse.  Voici mon problème, si certains peuvent m'aider, merci d'avance :
 
Je voudrais programmer un driver de cameras USB. Le truc, c'est que ma machine (au boulot) possède 2 versions de kernels : la 2.4.27 et la 2.6.9 ... et qu'il faut que je code pour le kernel 2.6.9.
 
J'avais dans un premier temps utilisé le fichier usb.h contenu dans /usr/include/ et la librairie libusb contenue dans
/usr/lib/ . Je n'avais pas de problème et je pouvais utiliser ces différentes fonctions :
usb_open(...);
usb_close(...);
usb_bulk_write(...);
usb_bulk_read(...);
usb_control_msg(...);
usb_set_configuration(...);
usb_claim_interface(...);
usb_release_interface(...);
...
usb_init(...);
usb_set_debug(...);
usb_find_busses(...);
usb_find_devices(...);
usb_device(...);
usb_bet_busses(...);
 
 
... mais je réalise que cette librairie est limitée, et vu les dates d'instal, je pense qu'elle correspond au kernel 2.4.27.
 
 
J'ai alors réalisé que dans /usersdel/kernel/linux-2.6.9/inclue/linux/, j'avais aussi un fichier usb.h mais qui lui correspond bien à mon nouveau noyau (2.6.9) et permet des fonctions plus interressantes :
usb_init_urb(...);
usb_submit_urb(...);
usb_unlink_urb(...);
 
Le souci, c'est que j'arrive bien à compiler en incluant ce usb.h dans mes procédures mais l'édition de lien ne marche pas ... car je ne trouve pas la librairie (libusb) sur laquelle pointer ...
 
Savez-vous où elle se trouve ou comment la générer (à partir uniquement du .h , est-ce possible ? ... ou y'a-t-il un moyen ?).
 
Voila voila, j'espère que certains pourront m'aider dans ma recherche. Merci d'avance à tous !!!!

Reply

Marsh Posté le 04-01-2005 à 16:01:26   

Reply

Marsh Posté le 04-01-2005 à 16:53:01    

allawos a écrit :

Bonjour à tous et merci pour ce forum que je découvre avec joie. J'ai effectué une recherche mais je n'ai pas trouvé ma réponse.  Voici mon problème, si certains peuvent m'aider, merci d'avance :
 
Je voudrais programmer un driver de cameras USB. Le truc, c'est que ma machine (au boulot) possède 2 versions de kernels : la 2.4.27 et la 2.6.9 ... et qu'il faut que je code pour le kernel 2.6.9.
 
J'avais dans un premier temps utilisé le fichier usb.h contenu dans /usr/include/ et la librairie libusb contenue dans
/usr/lib/ . Je n'avais pas de problème et je pouvais utiliser ces différentes fonctions :
usb_open(...);
usb_close(...);
usb_bulk_write(...);
usb_bulk_read(...);
usb_control_msg(...);
usb_set_configuration(...);
usb_claim_interface(...);
usb_release_interface(...);
...
usb_init(...);
usb_set_debug(...);
usb_find_busses(...);
usb_find_devices(...);
usb_device(...);
usb_bet_busses(...);
 
 
... mais je réalise que cette librairie est limitée, et vu les dates d'instal, je pense qu'elle correspond au kernel 2.4.27.
 
 
J'ai alors réalisé que dans /usersdel/kernel/linux-2.6.9/inclue/linux/, j'avais aussi un fichier usb.h mais qui lui correspond bien à mon nouveau noyau (2.6.9) et permet des fonctions plus interressantes :
usb_init_urb(...);
usb_submit_urb(...);
usb_unlink_urb(...);
 
Le souci, c'est que j'arrive bien à compiler en incluant ce usb.h dans mes procédures mais l'édition de lien ne marche pas ... car je ne trouve pas la librairie (libusb) sur laquelle pointer ...
 
Savez-vous où elle se trouve ou comment la générer (à partir uniquement du .h , est-ce possible ? ... ou y'a-t-il un moyen ?).
 
Voila voila, j'espère que certains pourront m'aider dans ma recherche. Merci d'avance à tous !!!!


Salut,
la libusb est indépendant de la version du noyau (le header /usr/include/usb.h et la library libusb.so/libusb.a)
le fichier contenu dans le répertoire linux-2.6.9/include/linux correspond aux "besoins" du noyau... i.e. si tu dois développé un driver, tu dois t'appuyer sur ces fichiers. Les différents fonctions définies dans ces fichiers sont implémentés dans les  fichiers du répertoire linux-2.6.9/driver/usb (regard le contenu du fichier usb.c) qui sont soit intégrés au noyau, soit compilés en modules à la compilation du noyau, i.e. tu n'as pas besoin d'une library pour écrire ton driver de la caméra USB, tu dois juste écrire le bon .c, le compiler avec les bonnes options (cf une doc sur l'écriture des drivers) et de charger le .o créé avec insmod

Reply

Marsh Posté le 04-01-2005 à 18:25:49    

Salut et merci pour ta réponse !
 
Bon en fait, je cherche à faire un driver mais pas dans le sens module qui se lance seul et tout et tout. Pour l'instant, je veux juste faire une procédure de tests unitaires des différentes fonctions de la caméra ...  
 
J'ai donc cherché usb.c dans (/usersdel/kernel/linux-2.6.9)/drivers/usb/ et effectivement, il y a différents fichiers .c (core/usb.c, core/urb.c, storage/usb.c, ...) qui définissent les fonctions que je veux utiliser -> décrites dans (/usersdel/kernel/linux-2.6.9)/include/linux/usb.h .
 
Le truc, c'est que je crois savoir que sur ce nouveau noyau (2.6.9), le module usb est intégré, ce n'est plus un module ... j'en déduis donc qu'il faut que lie avec les .o correspondants aux .c trouvés.
 
D'ou mon problème, si je suis toujours sur la bonne voie ?? , comment savoir à quels .o lier ? Dois-je rechercher chacune de mes fonctions et ajouter dans mon makefile le .o correspondant ? N'y a-t-il pas un .o récapitulatif (je vois que dans ()/drivers/usb/ il y a un built-in.o ... ne serait-ce pas ce .o que je cherche ?)
 
Merci en tous cas, ca fait un petit moment que je blocais dans le vent, je commence à voir le bout ... enfin, le bout du linkage ... après, faudra coder !!!

Reply

Marsh Posté le 05-01-2005 à 09:09:30    

allawos a écrit :


Salut et merci pour ta réponse !


Y a pas de quoi...

allawos a écrit :


Bon en fait, je cherche à faire un driver mais pas dans le sens module  


si je comprends bien, tu veux faire un "driver" qui n'est pas un module (dont pas intégré au noyau), par conséquence, tu veux faire une application

allawos a écrit :


qui se lance seul et tout et tout.  


cela confirme: tu veux faire une appli

allawos a écrit :


Pour l'instant, je veux juste faire une procédure de tests unitaires des différentes fonctions de la caméra...
 
J'ai donc cherché usb.c dans (/usersdel/kernel/linux-2.6.9)/drivers/usb/ et effectivement, il y a différents fichiers .c (core/usb.c, core/urb.c, storage/usb.c, ...) qui définissent les fonctions que je veux utiliser -> décrites dans (/usersdel/kernel/linux-2.6.9)/include/linux/usb.h .
 
Le truc, c'est que je crois savoir que sur ce nouveau noyau (2.6.9), le module usb est intégré, ce n'est plus un module ... j'en déduis donc qu'il faut que lie avec les .o correspondants aux .c trouvés.


effectivement, de base, le driver USB est "en dur" dans le noyau mais rien ne t'empeche de recompiler le noyau en choississant USB en modules...

allawos a écrit :


D'ou mon problème, si je suis toujours sur la bonne voie ?? , comment savoir à quels .o lier ? Dois-je rechercher chacune de mes fonctions et ajouter dans mon makefile le .o correspondant ? N'y a-t-il pas un .o récapitulatif (je vois que dans ()/drivers/usb/ il y a un built-in.o ... ne serait-ce pas ce .o que je cherche ?)


à la compilation du noyau, les symboles sont exportés dans System.map (/boot/System.map) mais comment linker... désolé j'ai trou de mémoire

allawos a écrit :


Merci en tous cas, ca fait un petit moment que je blocais dans le vent, je commence à voir le bout ... enfin, le bout du linkage ... après, faudra coder !!!


Bon courage

Reply

Marsh Posté le 05-01-2005 à 10:48:00    

OK OK ... un grand merci à toi Western !!!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed