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");
}
Configuration: Linux Fedora Firefox 1.5.0.7
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:#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é.-
- J'ai créer au tous début le fichier makefile est j'ais copier ce que vous m'avait donner.
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é.
-
-
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. -
Tu n'as pas installé le paquet linux-headers apparemment.
-
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. -
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.