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

  FORUM HardWare.fr
  Programmation
  C

  [C Linux] utiliser les fonctions de mon module

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C Linux] utiliser les fonctions de mon module

n°918607
yayien
Posté le 09-12-2004 à 09:51:30  profilanswer
 


Bonjour,  
je pense que c'est une question de debutant.  
J'ai pourtant bien cherché sur la doc Linux (The Linux Kernel Module Programming Guide) et sur google.  
 
j'ai un module (liaison.c), il compile, donc a priori aucun probleme.  
 
Je le charge, tjs aucn probleme et je vois bien la fonction que j'ai exportée dans /proc/kallsys  
 
Maintenant je veux m'en servir, je fais un fichier de declarations pour le module et je l'inclus dans mon client.c. Ensuite, ben quelles options de gcc dois-je utiliser. le client.c et le fichier laison.h sont dans le meme repertoire.  
A chaque compilation, j'ai le message d'erreur : undefined reference to envoi. Il ne peut pas l'atteindre.  
Comment faire ?  
 
Merci par avance, Aurelien  
 
voici les codes :  
liaison.c le module qui compile et se charge bien...  
 
#include <linux/kernel.h>  
#include <linux/module.h>  
 
#include "liaison.h"  
 
int init_module() {  
printk("hello liaison.o\n" );  
}  
 
void cleanup_module() {  
//dev_remove_pack(&liaison_proto);  
printk("Liaison unloaded\n" );  
}  
 
int envoi(int msg)  
{  
//struct net_device *dev = d;  
 
printk("envoi de donnees\n" );  
printk("message : %i\n",msg);  
}  
 
EXPORT_SYMBOL(envoi);

la declaration  
liaison.h  

extern int envoi(int);

 
le client :  
#include "liaison.h"  
 
int main(void)  
{  
envoi(3);  
}

mood
Publicité
Posté le 09-12-2004 à 09:51:30  profilanswer
 

n°918610
yayien
Posté le 09-12-2004 à 09:53:44  profilanswer
 

J'ai deja essaye de mettre le .h dans /usr/include
puis de faire un appel systeme dans le .c
puis de compiler de cette facon :
 
gcc -I /usr/include client.c -o client

n°918774
yayien
Posté le 09-12-2004 à 14:07:41  profilanswer
 

up

n°918783
manatane
En vous remerciant, bonsoir
Posté le 09-12-2004 à 14:19:49  profilanswer
 
n°918788
Lam's
Profil: bas.
Posté le 09-12-2004 à 14:21:38  profilanswer
 

Si tu nous expliquait d'abord ce que tu souhaites faire (et quel est ton niveau) ?
 
De ce que je comprend, tu veux intégrer une fonction dans le noyau de linux, et être en mesure de l'appeller depuis n'importe quel programme (donc de gérer le switch mode user/system via un _syscallX, après avoir définir ton numéro de fonction dans unistd).  
 
C'est plutôt compliqué à faire, et je ne suis pas persuadé que tu t'en rendes compte...

n°918800
manatane
En vous remerciant, bonsoir
Posté le 09-12-2004 à 14:29:13  profilanswer
 

Tu as tout ce qu'il faut là http://www.faqs.org/docs/kernel/x377.html

Citation :

De ce que je comprend, tu veux intégrer une fonction dans le noyau de linux, et être en mesure de l'appeller depuis n'importe quel programme (donc de gérer le switch mode user/system via un _syscallX, après avoir définir ton numéro de fonction dans unistd).

 
l'unistd.h et l'entry.S de l'archi et kernel/sys.c (il faut en effet savoir ce qu'on fait) :)

n°918802
Lam's
Profil: bas.
Posté le 09-12-2004 à 14:31:13  profilanswer
 

manatane a écrit :

(il faut en effet savoir ce qu'on fait) :)


 
On lui avait déjà répondu ceci-dit:
http://forum.hardware.fr/forum2.ph [...] subcat=440


Message édité par Lam's le 09-12-2004 à 14:31:48
n°918804
manatane
En vous remerciant, bonsoir
Posté le 09-12-2004 à 14:37:08  profilanswer
 

En somme il suffit de RTFM patiemment http://www.faqs.org/docs/kernel/index.html et puis voilà.

n°918816
yayien
Posté le 09-12-2004 à 14:51:39  profilanswer
 

J'ai lu le manuel Linux Kernel module programming. (depuis que Manatane avit repondu a ma precedente question)
 
Le chapitre 7.1 talking to device drivers est celle qui me concerne, mais rien n'est ecrit sur la compilation de ioctl.c. Ce qui me fait dire que ce ne doit pas etre si complique.
 
Ce que j'ai fait :
 
un module avec une fonction envoi qui pour l'instant se contente d'afficher un message dans /var/log/messages
 
[b]ce que je veux faire :
Globalement :
*envoyer un paquet sur le reseau directement en le transmettant a la carte reseau. (en fait au noyau qui se charge du reste). Sans passer par la pile BSD habituelle.
 
Dans la question :
 
je veux juste appeler la fonction envoi de mon module avec un programme C autre qu'un module
 
Voila. Est ce que cela vous semble plus claire ?
 
Merci ,Aurelien
 
 

n°918828
Lam's
Profil: bas.
Posté le 09-12-2004 à 15:00:21  profilanswer
 

Bon, d'une part, est-ce que ça ne serait pas plus simple de ne pas modifier le noyau, et d'utiliser une Raw Socket à la place?  
http://www.whitefang.com/rin/rawfaq.html#8
 
D'autre part, ton problème se trouve au niveau des system calls. Donc, un rapide google nous donne:
http://www.csee.umbc.edu/courses/u [...] mcall.html


Message édité par Lam's le 09-12-2004 à 15:01:08
mood
Publicité
Posté le 09-12-2004 à 15:00:21  profilanswer
 

n°918840
manatane
En vous remerciant, bonsoir
Posté le 09-12-2004 à 15:10:09  profilanswer
 

On avait bien compris mais le mode utilisateur / kernel t'empeche appeler des fonctions qui tournent en kernel space depuis l'espace utilisateur.
Il y a toutefois une possibilité de le faire, c'est un appel système, soit une fonction qui fait la jonction entre les 2 modes, ils sont identifiés au niveau du noyau /include/asm_arch/unistd.h (entre autre) et enveloppés dans des fonctions de la GlibC unistd.h.  
Meme pour un truc aussi con qu'une fonction qui prend 2 nombres en paramètre et renvoie le resultat de leur addition tu as tout un tas de choses à faire et à prendre en compte.

n°918868
yayien
Posté le 09-12-2004 à 15:23:25  profilanswer
 

Merci bien.  
Les raw sockets sont biens mais le projet consisterait a remplacer la pile BSD. Donc je pense que les raw sockets font partie integrante de la pile d'origine.
 
J'essaie donc de m'instruire sur les sys_calls.
 
Merci encore, Aurelien

n°918872
yayien
Posté le 09-12-2004 à 15:25:29  profilanswer
 

Oups, pas lu manatane
 
Mais pourquoi des trucs pareils tombent sur moi ouin.
 
Je vais qd meme voir si pour faire des tests la raw socketsne suffirait pas


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

  [C Linux] utiliser les fonctions de mon module

 

Sujets relatifs
Link d'un module a86 avec tlinkLinux : Relocation error
agl gratuit ou sous linuxExiste t'il des equivalents aux librairies Windows sous Linux ?
comment utiliser un paquetage qui n'est pas dans le répertoire courantles fonctions ftp
ou inclure les lib sous linux??Windows, Linux et retour chariot \n (ASCII 13)
Moteur de recherche GNU pour Linux/PHPajouter un module php (oubli à la compil !!)
Plus de sujets relatifs à : [C Linux] utiliser les fonctions de mon module


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