Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1998 connectés 

  FORUM HardWare.fr
  Programmation

  [Linux C++]Programmation de drivers sous linux en C++

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Linux C++]Programmation de drivers sous linux en C++

n°104829
hebussss
Posté le 26-02-2002 à 09:06:28  profilanswer
 

Je cherche la commande pour compiler un driver sous linux avec gcc, ou un site expliquant clairement la programmation des drivers sous linux.
Je dois réaliser un driver pour une carte PCI tout ou rien
 
Merci


---------------
Hey you hummy, we are coming for ya!
mood
Publicité
Posté le 26-02-2002 à 09:06:28  profilanswer
 

n°104880
kadreg
profil: Utilisateur
Posté le 26-02-2002 à 10:47:58  profilanswer
 

Houba houba hop :  
 
CE livre est le compagnon indispensable du développeur de driver sous linux  :
 
http://www.oreilly.com/catalog/linuxdrive2/
 
Il est intégralement dispo en ligne, mais un conseil, achete le, parceque lorsque l'on écrit un driver, on reboote pas mal (fs journalisé TRES fortement conseillé) :)
 
J'oubliais, il existe aussi en français : http://www.oreilly.fr/catalogue/pi [...] x-2ed.html

 

[jfdsdjhfuetppo]--Message édité par kadreg--[/jfdsdjhfuetppo]


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°163463
scorpio
Posté le 21-06-2002 à 15:26:54  profilanswer
 

Ou je peux consulter en ligne le livre d'O'reilly sur la conception de drivers linux ?
Cette ouvrage m'interesse grave


Message édité par scorpio le 21-06-2002 à 15:27:16
n°163476
kadreg
profil: Utilisateur
Posté le 21-06-2002 à 15:39:38  profilanswer
 

Ou je peux consulter en ligne le livre d'O'reilly sur la conception de drivers linux ?
 
http://www.xml.com/ldd/chapter/book/index.html
 
Cette ouvrage m'interesse grave
 
Achete le, lire sur écran, ça fait mal aux yeux.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°163483
scorpio
Posté le 21-06-2002 à 15:47:51  profilanswer
 

oui mais ca me permet d'avoir une idée de ce qu'il y a dans le livre
 
tiens ca existe pas en fr (on ligne)
 
En fait je voudrais réaliser un driver pour mon scanner canon n676u usb


Message édité par scorpio le 21-06-2002 à 15:51:07
n°163617
Jar Jar
Intaigriste
Posté le 21-06-2002 à 18:02:59  profilanswer
 

Juste un truc, les drivers c'est en C, pas en C++, hein...


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
n°163668
weblook$
happy face
Posté le 21-06-2002 à 22:02:27  profilanswer
 

kadreg a écrit a écrit :

Houba houba hop :  
 
CE livre est le compagnon indispensable du développeur de driver sous linux  :
 
http://www.oreilly.com/catalog/linuxdrive2/
 
Il est intégralement dispo en ligne, mais un conseil, achete le, parceque lorsque l'on écrit un driver, on reboote pas mal (fs journalisé TRES fortement conseillé) :)
 
J'oubliais, il existe aussi en français : http://www.oreilly.fr/catalogue/pi [...] x-2ed.html  
 
 




 
rebooter??? ah bon, les modules peuvent être intégré au noyau 'a chaud' pourtant  :heink:


Message édité par weblook$ le 21-06-2002 à 22:02:53
n°163686
spice di c​onass
totalement anticonformiste!!
Posté le 21-06-2002 à 23:14:15  profilanswer
 

si ca t'interesse mon ecole à un contrat avec o reilly et peut en fait profiter du monde... (genre 70% de reduc.)

n°163691
246tNt
Resistance is futile
Posté le 21-06-2002 à 23:35:35  profilanswer
 

Oui oui je confirme on reboote souvent ;)
 
On peut les loader a chaud oui ... Mais lorsque que ton module segfault, il segfault en kernel-space ! Et souvent la stabilité en prend un serieux coup ...

n°163693
kadreg
profil: Utilisateur
Posté le 21-06-2002 à 23:48:43  profilanswer
 

Ou le module qui plante pendant l'utilisation de la carte à piloter, et ensuite elle refuse la commande reset :)


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
mood
Publicité
Posté le 21-06-2002 à 23:48:43  profilanswer
 

n°163712
verdoux
And I'm still waiting
Posté le 22-06-2002 à 01:32:07  profilanswer
 

Jar Jar a écrit a écrit :

Juste un truc, les drivers c'est en C, pas en C++, hein...  




Ca dépend des OS.
Sur MacOS X les drivers c'est en c++ (un sous ensemble plus exactement) avec l'I/O kit.
 
Mais c'est vrai qu'avec linux c'est en C.


Message édité par verdoux le 22-06-2002 à 01:34:03
n°164012
Ace17
Posté le 23-06-2002 à 10:00:44  profilanswer
 

Verdoux a écrit a écrit :

 
Ca dépend des OS.
Sur MacOS X les drivers c'est en c++ (un sous ensemble plus exactement) avec l'I/O kit.
 
Mais c'est vrai qu'avec linux c'est en C.  




 
Ben de toutes manieres une fois que c'est compilé, les deux devraient marcher non?

n°164017
kadreg
profil: Utilisateur
Posté le 23-06-2002 à 10:30:29  profilanswer
 

Ace17 a écrit a écrit :

 
Ben de toutes manieres une fois que c'est compilé, les deux devraient marcher non?  




 
Je viens de faire l'essai. J'ai déclaré init_module et cleanup_module en extern "C" pour contourner le mecanisme de nommage C++ dans les .o (différent de celui du C, je le rappelle), mais j'ai quand même des problème de compilation (printk introuvable).
 
Qu'a cela ne tienne, je redeclare moi même printk dans mon fichier, je met une déclaration de classe, son instanciation et ça suppression, et ça compile, mais ne se charge pas :
 
 

[root@luggage modules]# /sbin/insmod helloModule.o  
helloModule.o: unresolved symbol __builtin_delete
helloModule.o: unresolved symbol __builtin_new
helloModule.o:  
Hint: You are trying to load a module without a GPL compatible license
      and it has unresolved symbols.  Contact the module supplier for
      assistance, only they can help you.
 
[root@luggage modules]#  


 
Et oui, les operateurs new et delete ne sont pas définis au niveau du langage mais de la libstdc++, donc, c'est DMC pour ces deux operateurs.
 
Au final, j'ai reussi a compiler un module :

Code :
  1. #define MODULE
  2. #include <linux/module.h>
  3. #define MODULE_NAME "kad_module"
  4. extern "C" int printk(const char * fmt, ...);
  5. class toto {
  6.   int id;
  7. public:
  8.   void hello () {
  9.     printk ("<1> kadreg : hello on a toto\n" );
  10.   }
  11. };
  12. static int hello_my_integer;
  13. extern "C" {
  14.   int init_module (void){
  15.     printk ("<1> kadreg : my first module : %s ! \n", MODULE_NAME);
  16.     toto my_toto;
  17.     my_toto.hello ();
  18.     return 0;
  19.   }
  20.   void cleanup_module (void){
  21.     printk ("<1> kadreg : unload  module : %s ! \n", MODULE_NAME);
  22.     toto my_toto;
  23.     my_toto.hello ();
  24.   }
  25. }


 
Qui m'affiche des trucs (a part le fait que ça va tainter mon kernel :) ) :


Jun 23 10:18:19 luggage kernel:  kadreg : my first module : kad_module !  
Jun 23 10:18:19 luggage kernel:  kadreg : hello on a toto
Jun 23 10:18:21 luggage kernel:  kadreg : unload  module : kad_module !  
Jun 23 10:18:21 luggage kernel:  kadreg : hello on a toto
 


 
Donc a priori, on peut ecrire des drivers linux en c++, mais on n'a pas fini de se faire chier sur des conneries.


Message édité par kadreg le 23-06-2002 à 10:30:57

---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°164032
246tNt
Resistance is futile
Posté le 23-06-2002 à 11:58:53  profilanswer
 

Cool ... Mais bon ... Préfère me taper du C que du C++ avec toute les connerie au quelle y faut faire gaffe pour que le module soit utilisable ;)
 
D'autant que si tu commence a faire un cout << "Test". Ou a ouvrir des fichiers, ... Je me demande ce que ca fera ...

n°164033
kadreg
profil: Utilisateur
Posté le 23-06-2002 à 12:03:30  profilanswer
 

246tNt a écrit a écrit :

 
D'autant que si tu commence a faire un cout << "Test". Ou a ouvrir des fichiers, ... Je me demande ce que ca fera ...  




 
La même erreur que pour new et delete. De la même façon qu'en C dans le kernel, on  n'utilise pas printf. Le noyau doit être auto suffisant et ne pas faire appel à des fonctionnalités externes.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°164249
Jar Jar
Intaigriste
Posté le 23-06-2002 à 22:29:21  profilanswer
 

kadreg a écrit a écrit :

La même erreur que pour new et delete. De la même façon qu'en C dans le kernel, on  n'utilise pas printf. Le noyau doit être auto suffisant et ne pas faire appel à des fonctionnalités externes.


Ou alors il faut les implémenter en dur dedans, et ça prend de la place...


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [Linux C++]Programmation de drivers sous linux en C++

 

Sujets relatifs
[CVS] et linux...[C]une commande pour linux qui serait equivalente a kbhit ??
programmation systemeODBC sous Linux
[ASM ou C] Comment lire sur un port du bios sur linux ?débutter en programmation????
[C] compiler un code source linux pour windows !Programmation Fortran sous Linux (g77)
Comment associer une icone à un fichier .exe, sans programmation? 
Plus de sujets relatifs à : [Linux C++]Programmation de drivers sous linux en C++


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR