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

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

Marsh Posté le 26-02-2002 à 09:06:28    

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!
Reply

Marsh Posté le 26-02-2002 à 09:06:28   

Reply

Marsh Posté le 26-02-2002 à 10:47:58    

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 !
Reply

Marsh Posté le 21-06-2002 à 15:26:54    

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
Reply

Marsh Posté le 21-06-2002 à 15:39:38    

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 !
Reply

Marsh Posté le 21-06-2002 à 15:47:51    

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
Reply

Marsh Posté le 21-06-2002 à 18:02:59    

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
Reply

Marsh Posté le 21-06-2002 à 22:02:27    

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
Reply

Marsh Posté le 21-06-2002 à 23:14:15    

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

Reply

Marsh Posté le 21-06-2002 à 23:35:35    

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 ...

Reply

Marsh Posté le 21-06-2002 à 23:48:43    

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 !
Reply

Marsh Posté le 21-06-2002 à 23:48:43   

Reply

Marsh Posté le 22-06-2002 à 01:32:07    

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
Reply

Marsh Posté le 23-06-2002 à 10:00:44    

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?

Reply

Marsh Posté le 23-06-2002 à 10:30:29    

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 !
Reply

Marsh Posté le 23-06-2002 à 11:58:53    

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 ...

Reply

Marsh Posté le 23-06-2002 à 12:03:30    

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 !
Reply

Marsh Posté le 23-06-2002 à 22:29:21    

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
Reply

Sujets relatifs:

Leave a Replay

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