2017-05-28 3 views
-1

私はLinux Ubuntu 14.04を使用しています。私はLinuxカーネルモジュールプログラミングを開始したいと思います。私はhello.c(単純なHello Worldモジュール)とMakefileを持っています。しかし、 "make"コマンドでエラーが出ます。Linuxカーネルモジュールプログラミング - CONFIG_CC_STACKPROTECTOR_REGULARを使用できません:コンパイラでサポートされていない-fstack-protector

私はCannot use CONFIG_CC_STACKPROTECTOR_STRONG: -fstack-protector-strong not supported by compilerを試しましたが、それは私のためには機能しませんでした。 "作る" で

/* 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 

のhello.c: -

[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 

は現在、私のUbuntuは4.2カーネルを持っています。私は3.xカーネルでこれを試しましたが、この同じエラーがありました。

私を助けてください。ありがとう。 :)

+0

'私は試してみましたが、うまくいきませんでした」 - 参照された質問の答えに示唆されているように、あなたは' binutils'を更新し、 'gcc'と'g ++'コンパイラでしょうか? – Tsyvarev

+0

はい、私はすべてそれをした –

答えて

0

私はこの質問をする前に多くの検索をしましたが、解決策はありませんでした。私は私の検索を続け、ついにこのソリューションは私のために働いた。 https://askubuntu.com/questions/367838/compiling-error-while-installing-realtek-rtl8111e-in-64-bit-13-10-config-x86-x

奇妙なことに、カーネルモジュールが存在するディレクトリ名にはスペースがないはずです。だから、私はスペースを削除し、それは働いた。

将来的に誰かを助けることを願っています。 :)

0

ファイルはここでOKです。

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 

hello.ko, hello.mod.c, hello.mod.o, hello.o, modules.order, Module.symversが作成されるファイル:あなたのMakefileでは、デフォルトのMakefileを持ちます。これをインストールしてください:sudo apt install g++ binutils-dev

+0

ありがとう、それは動作しませんでした –

関連する問題