ubuntu 驱动编译无法通过 求神来解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ubuntu 驱动编译无法通过 求神来解决相关的知识,希望对你有一定的参考价值。

zjj@zjj-virtual-machine:~/桌面/my c code/dev$ make
make -C /lib/modules/4.4.0-21-generic/build M=/home/zjj/桌面/my c code/dev modules
make[1]: Entering directory '/usr/src/linux-headers-4.4.0-21-generic'
Makefile:670: Cannot use CONFIG_CC_STACKPROTECTOR_STRONG: -fstack-protector-strong not supported by compiler
make[1]: *** No rule to make target 'c'。 停止。
make[1]: Leaving directory '/usr/src/linux-headers-4.4.0-21-generic'
Makefile:5: recipe for target 'modules' failed
make: *** [modules] Error 2

那个makefile 670这一条错误不知道怎么搞

参考技术A 复制代码
1 #ifndef __KERNEL__
2 # define __KERNEL__
3 #endif
4 #ifndef MODULE
5 # define MODULE
6 #endif
7
8 // 下面的是主要的内容
9 #include <linux/kernel.h>
10 #include <linux/module.h>
11 #include <linux/init.h>
12
13 MODULE_LICENSE("GPL");
14
15 static int year=2012;
16
17 int hello_init()
18
19 printk(KERN_WARNING "Hello kernel, it's %d!\n",year);
20 return 0;
21
22
23
24 void hello_exit()
25
26 printk("Bye, kernel!\n");
27
28
29 // 下面两个为关键的模块函数
30 module_init(hello_init);
31 module_exit(hello_exit);
复制代码
如果上面的代码看起来不太熟悉,那么需要查看以下相关的书籍,比如《Linux设备驱动程序,第三版》,也就是大名鼎鼎的LDD;

2、老式驱动模块编译方法:

直接写出make规则到makefile文件中,引用内核体系的头文件路径,举例如下:

复制代码
1 # The path of kernel source code
2 INCLUDEDIR = /media/GoldenResources/linux/linux-2.6.30/include
3
4 # Compiler
5 CC = gcc
6
7 # Options
8 CFLAGS = -D__KERNEL__ -DMODULE -O -Wall -I$(INCLUDEDIR)
9
10 # Target
11 OBJS = hello.o
12
13 all: $(OBJS)
14
15 $(OBJS): hello.c
16 $(CC) $(CFLAGS) -c $<
17
18 install:
19 insmod $(OBJS)
20
21 uninstall:
22 rmmod hello
23
24 .PHONY: clean
25 clean:
26 rm -f *.o
复制代码
这里有我是用的一个linux内核源代码路径:/media/GoldenResources/linux/linux-2.6.30/include ,注意设置到正确的源码路径。

尝试这编译:

复制代码
$make
gcc -D__KERNEL__ -DMODULE -O -Wall -I/media/GoldenResources/linux/linux-2.6.30/include -c hello.c
In file included from /media/GoldenResources/linux/linux-2.6.30/include/linux/kernel.h:11:0,
from hello.c:8:
/media/GoldenResources/linux/linux-2.6.30/include/linux/linkage.h:5:25: fatal error: asm/linkage.h: No such file or directory
compilation terminated.
make: *** [hello.o] Error 1
复制代码追问

我用的是ubuntu 16 内核是4.4.0 的 我的这些代码都是书上直接复制出来的

以上是关于ubuntu 驱动编译无法通过 求神来解决的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu GNOME 16.04,安装NVIDIA驱动后无法开机,怎么解决

记录Ubuntu 14.04 下安装无线网卡驱动解决无法连接WiFi的过程

Ubuntu 在登陆界面usb的键盘和鼠标上无法输入和移动(注明:与内核驱动有关系)

QT 在Ubuntu下无法编译,怎么解决

ubuntu无法开机

求大神!双系统Windows10+Ubuntu10.04,win10可以但Ubuntu无法连接有线网络怎么解决?