Problème avec module.h lors de la compilati
rufa
Messages postés
175
Statut
Membre
-
rufa Messages postés 175 Statut Membre -
rufa Messages postés 175 Statut Membre -
salut,j'ais copier un petit programme qui affiche hello word,je les compilé avec [B] gcc[/B],mais il m'affiche [B]"hello.c:2:27: erreur: linux/module.h : Aucun fichier ou répertoire de ce type"[/B],le fichier s'appel hello.c,je travail avec [B]fedora 6[/B],alors quelqu'un peut m'aidai svp,voici lecode source:
#include <linux/kernel.h>
#include <linux/module.h>
#if CONFIG_MODVERSIONS==2
#define MODVERSIONS
#include <linux/modversions.h>
#endif
int init_module()
{
printk("Hello, world - this is the kernel speaking\n");
return 0;
}
void cleanup_module()
{
printk("Short is the life of a kernel module\n");
}
#include <linux/kernel.h>
#include <linux/module.h>
#if CONFIG_MODVERSIONS==2
#define MODVERSIONS
#include <linux/modversions.h>
#endif
int init_module()
{
printk("Hello, world - this is the kernel speaking\n");
return 0;
}
void cleanup_module()
{
printk("Short is the life of a kernel module\n");
}
5 réponses
Salut,
Il ne faut pas compiler avec des commandes gcc directement. Tu peux le faire mais c'est compliqué, il faut indiquer le chemin vers les headers du noyau, trouver les bonnes options de gcc etc....
Non l'idéal c'est de prendre un Makefile qui appele le Makefile du kernel.
Celui-ci est un bon exemple:
Comme ton fichier source s'appele hello.c alors j'ai mis hello.o pour obj-m
Il faudra changer selon le nom de ton fichier source.
Encore une chose: le paquet kernel-headers (ou linux-headers) de ta distribution doit être installé.
Il ne faut pas compiler avec des commandes gcc directement. Tu peux le faire mais c'est compliqué, il faut indiquer le chemin vers les headers du noyau, trouver les bonnes options de gcc etc....
Non l'idéal c'est de prendre un Makefile qui appele le Makefile du kernel.
Celui-ci est un bon exemple:
#Note: ce Makefile provient du livre Linux Device Driver (3ème édition) des éditions O'Reilly, son utilisation #est donc sujette à la licence Creative Common Non Commercial Share Alike (https://creativecommons.org/licenses/by-nc-sa/2.0/ ifneq ($(KERNELRELEASE),) obj-m := hello.o else KERNELDIR ?= /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules endif
Comme ton fichier source s'appele hello.c alors j'ai mis hello.o pour obj-m
Il faudra changer selon le nom de ton fichier source.
Encore une chose: le paquet kernel-headers (ou linux-headers) de ta distribution doit être installé.
salut,pour
#yum install linux-headers
la répense et
Could not retrieve mirrorlist http://mirrors.fedoraproject.org/mirrorlist?repo=core-6&arch=i386 error was
[Errno 4] IOError: <urlopen error (-3, '\xc3\x89chec temporaire dans la r\xc3\xa9solution du nom')>
Error: Cannot find a valid baseurl for repo: core pas de pachetages disponibe.
est pour:
#get-pat install linux-headers-$(uname -r)
la répense est
bash: apt-get: command not found
il ne reconnait pas la commnde,ce la veut dire que quelque chose n'est pas installer,est quand j'introduit les commandes je suis toujours connecter a internet.
#yum install linux-headers
la répense et
Could not retrieve mirrorlist http://mirrors.fedoraproject.org/mirrorlist?repo=core-6&arch=i386 error was
[Errno 4] IOError: <urlopen error (-3, '\xc3\x89chec temporaire dans la r\xc3\xa9solution du nom')>
Error: Cannot find a valid baseurl for repo: core pas de pachetages disponibe.
est pour:
#get-pat install linux-headers-$(uname -r)
la répense est
bash: apt-get: command not found
il ne reconnait pas la commnde,ce la veut dire que quelque chose n'est pas installer,est quand j'introduit les commandes je suis toujours connecter a internet.
Could not retrieve mirrorlist http://mirrors.fedoraproject.org/mirrorlist?repo=core-6&arch=i386 error was
[Errno 4] IOError: <urlopen error (-3, '\xc3\x89chec temporaire dans la r\xc3\xa9solution du nom')>
Tu fais ça depuis un ordinateur qui est bien connecté à internet n'est ce pas?
Sinon réessaie, ça a l'air d'être temporaire. En tout cas la page existe bel et bien.
[Errno 4] IOError: <urlopen error (-3, '\xc3\x89chec temporaire dans la r\xc3\xa9solution du nom')>
Tu fais ça depuis un ordinateur qui est bien connecté à internet n'est ce pas?
Sinon réessaie, ça a l'air d'être temporaire. En tout cas la page existe bel et bien.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
pardent et svp dit moi si ce makefile marche bien sous votre system:
# Makefile for a basic kernel module
CC=gcc
MODCFLAGS := -Wall -DMODULE -D__KERNEL__ -DLINUX
hello.o: hello.c /usr/include/linux/version.h
$(CC) $(MODCFLAGS) -c hello.c
/*la suite n'est pas vraiment très intéréssente,que des messages*/
echo insmod hello.o to turn it on
echo rmmod hello to turn if off
echo
echo X and kernel programming do not mix.
echo Do the insmod and rmmod from outside X.
# Makefile for a basic kernel module
CC=gcc
MODCFLAGS := -Wall -DMODULE -D__KERNEL__ -DLINUX
hello.o: hello.c /usr/include/linux/version.h
$(CC) $(MODCFLAGS) -c hello.c
/*la suite n'est pas vraiment très intéréssente,que des messages*/
echo insmod hello.o to turn it on
echo rmmod hello to turn if off
echo
echo X and kernel programming do not mix.
echo Do the insmod and rmmod from outside X.
#make hello.c
reponse: rien à faire pour le << hello.c>>
pardent pour le retard j'avait des problèmes pour recupéré le debian.
#make hello
la réponse est:
cc hello.c -o hello
hello.c:2:27: erreur: linux/module.h : Aucun fichier ou répertoire de ce type
make: *** [hello] Erreur 1
Avec la commande make toute seul il va chercher un fichier makefile par defaut,j'ais fait :
#make
alors la réponse est:
make -C /lib/modules/2.6.18-1.2798.fc6/build M=/root modules
make: *** /lib/modules/2.6.18-1.2798.fc6/build: Aucun fichier ou répertoire de ce type. Arrêt.
make: *** [default] Erreur 2
j'ai préféré écrir tous mes érreurs pour que tous le monde puisse en profité.