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

 


Dernière réponse
Sujet : [Linux C++]Programmation de drivers sous linux en C++
Jar Jar

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


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Jar Jar

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

kadreg

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.

246tNt 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 ...
kadreg

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.

Ace17

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?

verdoux

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.

kadreg Ou le module qui plante pendant l'utilisation de la carte à piloter, et ensuite elle refuse la commande reset :)
246tNt 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 ...
spice di conass si ca t'interesse mon ecole à un contrat avec o reilly et peut en fait profiter du monde... (genre 70% de reduc.)
weblook$

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:

Jar Jar Juste un truc, les drivers c'est en C, pas en C++, hein...
scorpio 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
kadreg 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.
scorpio Ou je peux consulter en ligne le livre d'O'reilly sur la conception de drivers linux ?
Cette ouvrage m'interesse grave
kadreg 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]

hebussss 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

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)