Linux内核模块编程 - 不能使用CONFIG_CC_STACKPROTECTOR_REGULAR:编译器不支持-fstack-protector

时间:2017-05-28 08:05:47

标签: c linux linux-kernel kernel kernel-module

我在Linux Ubuntu 14.04上。我想启动Linux内核模块编程。我有hello.c(简单的Hello World模块)和Makefile。但是," make"命令,我收到错误。

我尝试了Cannot use CONFIG_CC_STACKPROTECTOR_STRONG: -fstack-protector-strong not supported by compiler,但它对我不起作用。

的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);

生成文件

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

On&#34; make&#34; : -

k@k-Inspiron-3542:~/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内核上试过这个,但也有同样的错误。

请帮帮我。谢谢。 :)

3 个答案:

答案 0 :(得分:1)

在问这个问题之前,我已经搜索了很多,但没有解决方案对我有用。我继续搜索,最后,这个解决方案对我有用。 https://askubuntu.com/questions/367838/compiling-error-while-installing-realtek-rtl8111e-in-64-bit-13-10-config-x86-x

奇怪的是,目录名中不应有内核模块所在的空间。所以,我删除了空间并且它有效。

希望将来能帮到某人。 :)

答案 1 :(得分:0)

你的文件在这里工作正常。使用Makefile,使用默认的Makefile:

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。可以安装:sudo apt install g++ binutils-dev

答案 2 :(得分:0)

如果您的编译目录中没有空格,并且仍然出现此错误,则内核编译可能会失败,因为其目录属于root,并且您以非特权用户身份运行。尝试sudo make