linux 模块编译无法生成.ko文件,显示如下信息,请问是啥原因啊?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux 模块编译无法生成.ko文件,显示如下信息,请问是啥原因啊?相关的知识,希望对你有一定的参考价值。
[root@localhost c]# make
make -C /lib/modules/2.6.6/build M=/home/c modules
make[1]: Entering directory `/usr/src/linux-2.6.6'
Building modules, stage 2.
MODPOST
make[1]: Leaving directory `/usr/src/linux-2.6.6'
无法生成.ko文件
“obj-m += ”这句写了没? .o文件名和C文件名对应关系对么?
make -C /lib/modules/2.6.32/build M=`pwd` KBUILD_OUTPUT= V=0 modules
make[1]: Entering directory `/usr/src/kernels/linux-2.6.32-220.el6'
CC [M] /opt/estor/hostagent/iscsi/kernel/scsi_transport_iscsi.o
正常编译后需要有上面CC打头的这一句。
补充问一句:你在那个目录下找的ko文件,是否是/home/c?make前是否执行过make clean? 参考技术A 有什么危害 参考技术B 使用一下 sudo make试试
linux下驱动的问题
1.源文件生成的.p文件是什么?
2. .o文件和.p文件如何生成驱动文件.ko
在Linux常用的扩展名当中是没有.p这种命名的
只有file.php命名的方式 是种能用php语言解释器进行解释,能用浏览器打开的文件
还有种其扩展名也可能取成.pl的,它是程序语言如Perl的文件
.ko是内核模块 怎样编译内核模块,讲起来很复杂。
给你看个内核模块的例子:
C/C++ code
#include <linux/module.h>
#include <linux/init.h>
#include <buffbu_debug.h>
MODULE_LICENSE("GPL");
int init_debug(void)
PDEBUG("Hello World!%s","\n");
return 0;
void exit_debug(void)
PDEBUG("exit the module%s","\n");
module_init(init_debug);
module_exit(exit_debug);
Makefile
Assembly code
ifneq($(KERNELRELEASE),)
obj-m := hello.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
all:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
关于.ko的更多你可以参考Linux Device Driver 3rd这本书上有说明
编译驱动文件详细介绍可以参见http://www.linuxfly.org/post/198/
以上是关于linux 模块编译无法生成.ko文件,显示如下信息,请问是啥原因啊?的主要内容,如果未能解决你的问题,请参考以下文章