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文件

看起来压根就没有编译C文件啊,lz的make file写对了么?
“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

交叉编译呗 参考技术A 您应该知道Linux文件是没有“扩展名”的,Linux文件能否执行,关键在于它第一列的10个属性有关,与文件名一点关系也没有。
在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文件,显示如下信息,请问是啥原因啊?的主要内容,如果未能解决你的问题,请参考以下文章

linux 怎样插入一个驱动模块

在linux中编写了一个小的内核模块,怎么编译成.ko文件?

linux内核编译,怎么样 从o文件直接生成ko文

linux下怎么编译安装驱动?

linux下驱动的问题

linux模块编译后加载不成功