Compilation d’un module de kernel, problèmes d’en-tête, problèmes de makefile

ok j’essaye de comstackr un module de kernel simple, quand je pointe l’un des éléments ci-dessous qui contient includes, il se plaint de toutes sortes de choses.

linux-headers-2.6.31-21 linux-headers-2.6.31-22 linux-headers-2.6.31-21-generic linux-headers-2.6.31-22-generic linux-headers-2.6.31-21-generic-pae linux-headers-2.6.31-22-generic-pae 

J’essaie de suivre les instructions sur le site suivant: http://www.faqs.org/docs/kernel/x145.html

J’ai mis à jour le fichier make pour qu’il ressemble à ceci:

 TARGET := hello_world WARN := -W -Wall -Wssortingct-prototypes -Wmissing-prototypes INCLUDE := -isystem /usr/src/linux-headers-2.6.31-22-generic/include CFLAGS := -O2 -DMODULE -D__KERNEL__ ${WARN} ${INCLUDE} CC := gcc ${TARGET}.o: ${TARGET}.c .PHONY: clean clean: rm -rf ${TARGET}.o 

Par exemple, lorsque je tape make, j’obtiens le message d’erreur suivant, ainsi que de nombreuses autres, en examinant les dossiers où je vois que le processeur et les fichiers de cache sont en asm-generic, comment suis-je censé le comstackr s’il ne pointe pas dessus les bons emplacements des fichiers?

 /usr/src/linux-headers-2.6.31-22-generic/include/linux/prefetch.h:14:27: error: asm/processor.h: No such file or directory /usr/src/linux-headers-2.6.31-22-generic/include/linux/prefetch.h:15:23: error: asm/cache.h: No such file or directory 

Le but ultime (effrayant) est de construire un système de fichiers virtuel, d’ici jeudi …. (oui, je sais que c’est assez improbable). Je comprends une partie du fichier make, mais assez curieusement je pensais que je devrais voir quelque chose comme $ {CC} $ {INCLUDE}, des choses comme ça, mais je ne vois pas ça du tout,

Quelqu’un peut-il expliquer et / toutes les questions suivantes?

  1. De quoi ai-je besoin pour mettre à jour mon include afin qu’il connaisse le bon répertoire (et s’il s’agit du type de kernel que j’utilise, etc., expliquez-moi comment je peux résoudre ce problème).

  2. Est ce que quelqu’un peut expliquer comment le makefile sait appeler gcc et comstackr?

  3. Y a-t-il autre chose que j’ai besoin de savoir pour que cette chose soit compilée?

— Question bonus

  1. Tout le monde connaît des tutoriels VRAIMENT détaillés sur la construction d’un VFS. J’ai un projet qui nous a été atsortingbué par une autre école, http://oslab.info/index.php/Labs/HW4 , et qui repose sur une programmation limitée. fait avant cela, cela semble être une tâche monumentale.

Avec le kernel 2.6, vous devez utiliser le système de construction du kernel. Voici un exemple de module construit en dehors de l’arborescence du kernel:

 ifneq ($(KERNELRELEASE),) # We were called by kbuild obj-m += target.o else # We were called from command line KDIR := /lib/modules/$(shell uname -r)/build #KDIR := /home/cynove/src/kernel/linux-source-2.6.31 PWD := $(shell pwd) default: @echo ' Building target module 2.6 kernel.' @echo ' PLEASE IGNORE THE "Overriding SUBDIRS" WARNING' $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules install: ./do_install.sh *.ko endif # End kbuild check ######################### Version independent targets ########################## clean: rm -f -r *.o *.ko .*cmd .tmp* core *.i 

En appelant make -C ($ KDIR) etc …, le système de construction du kernel est impliqué et fait le travail à votre place.

L’exemple 2.2 de votre lien contient la ligne suivante au lieu de celle que vous avez listée:

 INCLUDE := -isystem /lib/modules/`uname -r`/build/include 

Cela ressemble à la cause probable de vos problèmes de compilation. Une raison particulière pour laquelle vous l’avez changé?

En regardant quelques arbres sources (2.6.32 est la plus ancienne que j’ai sous la main), il n’y a aucune instance de processor.h qui se trouve dans un répertoire générique, toutes sont spécifiques à l’architecture. Par exemple

 /usr/src/linux-headers-2.6.32-24/arch/x86/include/asm/processor.h 

Je suppose donc qu’il manque un répertoire d’inclusion dans votre Makefile.