风飞向何处 发表于 2013-04-01 16:10

linux 为什么找不到.ko的文件

hello.c的文件编写
#include<linux/module.h>
#include<linux/init.h>
static int__init initalization_function(void) // chu shi hua
{
printk("kernel init over!!!!\n");
return 0;// init successfull
}
module_init(initalization _function);
static void __exit cleanup_function(void)
{
printk(" xie zai wan bi\n");
}
module_exit(cleanup_function);
MOUDLE_LICENSE("GPL");
~                        

makefile的文件编写

ifeq ($(KERNELRELEASR),)
      KERNELDIR?=/lib/modules/$(shell uname -r)/build
      PWD:=$(shell pwd)
modules:
      $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
      $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
clean:
      rm -rf *.o
else
      obj-m:=hello.o
endif
~   
   
结果make一下就是:
make
make -C /lib/modules/3.2.0-23-generic-pae/build M=/home/chaolei/helloD modules
make: Entering directory `/usr/src/linux-headers-3.2.0-23-generic-pae'
Building modules, stage 2.
MODPOST 0 modules
make: Leaving directory `/usr/src/linux-headers-3.2.0-23-generic-pae'
root@ubuntu:/home/chaolei/helloD# ls
hello.cMakefilemodules.orderModule.symvers
为什么找不到hello.ko的文件!!!
求大神指教!!!俺是入门的新手!!!

xfortune 发表于 2013-04-17 10:19

编译放到内核源码中,修改kconfig和Makefile 进行编译。自己写Makefile比较麻烦,而且事情比较多。。。

xfortune 发表于 2013-04-17 10:25

首先你的Makefile没有指定编译工具,没有指定架构,如果不是交叉编译,使用默认的话,编译的 时候
make的默认的是all,也应该执行Make module来编译

maxuedong_t 发表于 2013-04-17 10:47

ifneq ($(KERNELRELEASE),)

obj-m := memdev.o

else
       
KDIR := /home/guoqian/4-3-1/linux-2.6.29
all:
        make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-
clean:
        rm -f *.ko *.o *.mod.o *.mod.c *.symversmodul*

endif

maxuedong_t 发表于 2013-04-17 10:48

试一下这个makefile,一直在用,要修改的是memdev.o改为相应的名字,KDIR:指向你的内核树,CROSS_COMPILE赋值为你的交叉编译链
页: [1]
查看完整版本: linux 为什么找不到.ko的文件