Comment faire pour compiler un module du noyau contre une nouvelle Source
Je suis en train de compiler un Hello World
module. Je vais avoir une nouvelle Ubuntu dans mon système qui n'ont pas de noyau compilé.
Mon noyau est:
2.6.32-34-generic
J'ai donné le Makefile suivant et a obtenu l'erreur:
obj-m += hello-1.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
# make
make -C /lib/modules/2.6.32-34-generic/build M=/home/james/Desktop/hello modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.32-34-generic'
make[2]: *** No rule to make target `/home/james/Desktop/hello/hello-1.c', needed by `/home/james/Desktop/hello/hello-1.o'. Stop.
make[1]: *** [_module_/home/james/Desktop/hello] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-2.6.32-34-generic'
make: *** [all] Error 2
Le contenu de mon /lib/modules/2.6.32-34-générique sont
total 3864
lrwxrwxrwx 1 root root 40 2011-11-05 15:55 build -> /usr/src/linux-headers-2.6.32-34-generic
drwxr-xr-x 2 root root 4096 2011-11-05 15:49 initrd
drwxr-xr-x 10 root root 4096 2011-11-05 15:49 kernel
.......................................................
.......................................................
Le dossier /usr/src/linux-headers-2.6.32-34-generic
existe.
Depuis il ne fonctionne pas, j'ai téléchargé le linux-headers-2.6.32-34-générique source de Ubuntu et compilé, et changé mon Makefile:
obj-m += hello-1.o
all:
make -C /usr/src/linux-2.6.32/M=$(PWD) modules
clean:
make -C /usr/src/linux-2.6.32/M=$(PWD) clean
#make
make -C /usr/src/linux-2.6.32/M=/home/james/Desktop/hello modules
make[1]: Entering directory `/usr/src/linux-2.6.32'
ERROR: Kernel configuration is invalid.
include/linux/autoconf.h or include/config/auto.conf are missing.
Run 'make oldconfig && make prepare' on kernel src to fix it.
WARNING: Symbol version dump /usr/src/linux-2.6.32/Module.symvers
is missing; modules will have no dependencies and modversions.
make[2]: *** No rule to make target `/home/james/Desktop/hello/hello-1.c', needed by `/home/james/Desktop/hello/hello-1.o'. Stop.
make[1]: *** [_module_/home/james/Desktop/hello] Error 2
make[1]: Leaving directory `/usr/src/linux-2.6.32'
make: *** [all] Error 2
Quelqu'un pourrait-il m'aider à résoudre cela.http://packages.ubuntu.com/lucid-updates/devel/linux-headers-2.6.32-34-générique
J'ai quelques questions à poser.
Après une nouvelle installation, quelle est la meilleure façon de compiler un noyau. Après j'ai compilé le noyau et construit un module il fonctionnait parfaitement auparavant. Mais je ne pourrais pas savoir quoi faire dans cette situation
OriginalL'auteur user567879 | 2011-11-26
Vous devez vous connecter pour publier un commentaire.
Vous êtes confronté à cette erreur dans la première compilation, car bonjour-1.c fichier est manquant dans /home/james/Desktop/bonjour/ répertoire.
OriginalL'auteur Praveen Felix
Vous avez besoin d'installer certains paquets comme "kernel-devel' sur Fedora (désolé, je ne suis pas un utilisateur Ubuntu), il fournit les en-têtes et .la configuration de la compilation de votre noyau.
OriginalL'auteur Cong Wang
L'erreur:
est tout simplement parce que les sources de votre noyau est nouvellement téléchargé et non avant.
C'est comment u devrait compiler n'importe quel module du noyau.
Après télécharger le source du noyau, vous devez la préparer pour tout ajout de modules.
Copie de l'ancien noyau de la "config-xxxx" fichier dans le répertoire /boot/dans le nouveau répertoire des sources du noyau, et le renommer ".config".
Alors exécuter "make oldconfig", ce qui va prendre de sauvegarde de l' .config .config.vieux, et de générer un nouveau .config basée sur le nouveau noyau. Il suffit d'entrer "ENTER" pour tous les paramètres par défaut (beaucoup d'entre eux).
Suivante consiste à faire un "make" (et attendre quelques temps) - il va générer un nouveau fichier noyau "vmlinux", en collaboration avec de nombreux autres fichiers qui est lu par les modules de processus de compilation.
Maintenant vous pouvez aller à votre répertoire dans lequel le module de noyau de code source est situé, et basé sur le Makefile suivant:
Avec Makefile sont votre en-tête et le fichier source, qui est bonjour-1.c située ensemble.
Juste "faire" et de votre noyau, les modules doivent être généré avec succès.
OriginalL'auteur Peter Teoh
Vous avez besoin d'avoir modules_enabled dans votre noyau. Vous avez besoin de compiler une amande fraîche pour ce faire.
Post suivant explique comment construire un noyau bien. Activer les modules de configuration du noyau.
http://kernelnewbies.org/FAQ/KernelCompilation
OriginalL'auteur teardrop