linux/init.h: Aucun fichier ou répertoire
Je suis en train de construire un module du noyau pour ma classe, et je reçois un mur massif des erreurs, mais au-dessus de ladite paroi est la tristement célèbre "Aucun fichier ou répertoire' erreur. Il semble être à la racine du problème. Non seulement cela semble nuire à init.h, mais aussi le module.h et le noyau.h. Les trois premières lignes du programme go comme suit:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
J'ai regardé et essayé d'autres chemins pour lequel ces fichiers devraient être lors de la navigation sur des questions similaires, mais rien n'a fonctionné jusqu'à présent. Le plus étrange, c'est que j'ai utilisé ce module déjà; j'ai été fournis starter code qui était présent en haut (je n'ai rien changé) et il ne me donne pas d'erreur. Bien que, évidemment, le code est différent, mais ce qui semble être le plus gros problème à l'heure actuelle.
Le code est comme suit:
#include </usr/include/linux/init.h>
#include </usr/include/linux/module.h>
#include </usr/include/linux/kernel.h>
/* This function is called when the module is loaded. */
int simple_init(void)
{
printk(KERN_INFO "Loading Module\n");
static LIST_HEAD(birthday_list)
struct birthday{
int day;
int month;
int year;
struct list_head list;
};
struct birthday *ptr, *next;
struct birthday *bob;
struct birthday *judy;
struct birthday *josh;
struct birthday *lana;
struct birthday *jan;
bob = kmalloc(sizeof(*bob), GFP_KERNEL);
bob -> day = 17;
bob -> month = 1;
bob -> year = 1990;
INIT_LIST_HEAD(&bob -> list);
...
list_add_tail(bob -> list, &birthday_list);
list_add_tail(judy -> list, &birthday_list);
list_add_tail(josh -> list, &birthday_list);
list_add_tail(lana -> list, &birthday_list);
list_add_tail(jan -> list, &birthday_list);
struct birthday *ptr;
list_for_each_entry(ptr, &birthday_list, list){
kprintf('%d/%d/%d \n', ptr -> month, ptr -> day, ptr -> year);
}
list_for_each_entry_safe(ptr, &birthday_list, list){
list_del(&ptr->list);
kfree(ptr);
}
return 0;
}
/* This function is called when the module is removed. */
void simple_exit(void) {
printk(KERN_INFO "Removing Module\n");
}
/* Macros for registering module entry and exit points. */
module_init( simple_init );
module_exit( simple_exit );
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Simple Module");
MODULE_AUTHOR("SGG");
init.h
, et quel est le chemin de votre passage à gcc?Vous pouvez poster votre code ? Êtes-vous à l'aide de Makefile fourni dans le répertoire /lib/modules ?
Eh bien, j'ai un peu de choses à signaler. Pour l'un, init.h et le module.h semblent avoir disparu. De plus, j'ai essayé de résoudre ce problème, et les choses.. en quelque sorte s'est mal passé. J'ai essayé d'utiliser la commande "sudo apt-get install linux-headers-generic", et il m'a donné un message d'erreur: "E: le Paquet" linux-headers-generic' a pas d'installation candidat."
Je ne suis pas en utilisant le Makefile que vous êtes en train de parler, mais il y en a un dans le répertoire du module, j'essaie de l'exécuter. Comme pour poster le code, il y a BEAUCOUP de remplissage choses entre ce n'est pas vraiment important... je vais travailler sur l'obtention posté; je l'ai exécuté sur une machine virtuelle.
OriginalL'auteur Robert Crawford | 2015-02-10
Vous devez vous connecter pour publier un commentaire.
Je pense que vous devez d'abord installer quelque chose comme linux-headers-[version du noyau] par apt-get, alors vous devez créer un Makefile comme suit :
ensemble KERNELDIR variable au-dessus de Makefile pour votre version du noyau par défaut, utiliser votre noyau en cours d'exécution. Si vous utilisez ce Makefile vous avez besoin de changer votre pour format suivant:
Je pense que pour le module de noyau développement de l'utilisation standard du noyau de Linus Torvalds git est mieux. Pour une simple module du noyau de voir cette.
non, vous devez utiliser
uname -r
d'abord pour obtenir votre version du noyau puis utiliser quelque chose commesudo apt-get install linux-headers-3.13.0-24-generic
pour obtenir le noyau de l'en-tête pour la libération.oui, cela ne fonctionne pas. comme les commentaires ci-dessus, il ne peut pas trouver ce que je suis en train de l'installer
Ok, merci de m'envoyer votre
uname -r
de sortie dans les commentaires.C'est vraiment étrange, maintenant, il semble être de travailler pour aucune raison du tout. J'ai essayé de l'obtenir fait avant, j'ai rencontré mon professeur aujourd'hui, mais n'a pas réussi à. Nous l'avons ouvert en hausse ce matin, il a couru, a un tas d'erreurs, c'est sûr, mais ce n'était pas l'un d'eux. Merci pour lui donner un essai!
OriginalL'auteur Parham Alvani
lors de la construction de modules de noyau, vous devez utiliser les fichiers make
OriginalL'auteur izak
Il y a une faute de frappe dans la première ligne du code complet "/usr/unclude..." qui pourrait être responsable de l'échec de la recherche d'init.h
OriginalL'auteur GEphil