Comment recompiler mon usb.h en libusb (kernel 2.6.9) ? [usb.h] - Linux et OS Alternatifs
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 : |
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
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 !!!
Marsh Posté le 05-01-2005 à 09:09:30
allawos a écrit : |
Y a pas de quoi...
allawos a écrit : |
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 : |
cela confirme: tu veux faire une appli
allawos a écrit : |
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 : |
à 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 : |
Bon courage
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 !!!!