2017-05-28 3 views
-1

Je suis sous Linux Ubuntu 14.04. Je veux démarrer Linux Kernel Module Programming. J'ai hello.c (module Hello World simple) et Makefile. Mais, sur commande "make", j'obtiens une erreur. J'ai essayé Cannot use CONFIG_CC_STACKPROTECTOR_STRONG: -fstack-protector-strong not supported by compiler, mais cela n'a pas fonctionné pour moi.Programmation de module noyau Linux - Impossible d'utiliser CONFIG_CC_STACKPROTECTOR_REGULAR: -fstack-protector non pris en charge par le compilateur

hello.c

/* hello.c − Illustrating the __init, __initdata and __exit macros. */ 

#include <linux/module.h> 
/* Needed by all modules */ 
#include <linux/kernel.h> 
/* Needed for KERN_INFO */ 
#include <linux/init.h> 
/* Needed for the macros */ 

static int hello3_data __initdata = 3; 

static int __init hello_3_init(void) 
{ 
    printk(KERN_INFO "Hello, world %d\n", hello3_data); 
    return 0; 
} 

static void __exit hello_3_exit(void) 
{ 
    printk(KERN_INFO "Goodbye, world 3\n"); 
} 

module_init(hello_3_init); 
module_exit(hello_3_exit); 

Makefile

obj-m += hello.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 

sur "make": -

[email protected]:~/Kernel programs$ make 
make -C /lib/modules/4.2.0-27-generic/build M=/home/k/Kernel programs modules 
make[1]: Entering directory `/usr/src/linux-headers-4.2.0-27-generic' 
arch/x86/Makefile:138: CONFIG_X86_X32 enabled but no binutils support 
Makefile:662: Cannot use CONFIG_CC_STACKPROTECTOR_REGULAR: -fstack-protector not supported by compiler 
make[1]: *** No rule to make target `programs'. Stop. 
make[1]: Leaving directory `/usr/src/linux-headers-4.2.0-27-generic' 
make: *** [all] Error 2 

Actuellement, mon ubuntu a noyau 4.2. J'ai même essayé ceci sur le noyau 3.x, mais il y avait cette même erreur.

S'il vous plaît aidez-moi dans ceci. Merci. :)

+0

'J'ai essayé ... mais cela n'a pas fonctionné pour moi. '- Donc, comme suggéré dans la réponse à la question référencée, vous avez mis à jour' binutils' et avez installé les seules instances de 'gcc' et compilateurs 'g ++', non? – Tsyvarev

+0

Oui, j'ai fait tout ça –

Répondre

0

J'avais beaucoup cherché avant de poser cette question, mais aucune solution n'a fonctionné pour moi. J'ai continué ma recherche et finalement, cette solution a fonctionné pour moi. https://askubuntu.com/questions/367838/compiling-error-while-installing-realtek-rtl8111e-in-64-bit-13-10-config-x86-x

Étrangement, il ne devrait pas y avoir d'espace (s) dans le nom du répertoire dans lequel les modules du noyau sont là. Donc, j'ai enlevé l'espace et ça a marché.

Espérons que cela aidera quelqu'un à l'avenir. :)

0

Votre fichier fonctionne bien ici. Avec votre Makefile, et avec le Makefile par défaut:

obj-m := hello.o 

KDIR := /lib/modules/$(shell uname -r)/build 
PWD  := $(shell pwd) 

default: 
    $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules 

clean: 
    $(MAKE) -C $(KDIR) M=$(PWD) clean 

Les fichiers hello.ko, hello.mod.c, hello.mod.o, hello.o, modules.order, Module.symvers sont créés. Peut être installer ceci: sudo apt install g++ binutils-dev

+0

Merci, mais ça n'a pas marché –