内核模块的makefile中的内核路径怎么写

wonderglass   2013-6-7 03:48 楼主
小弟初学者,现在学习linux内核模块,这是一个简单的hello的内核模块的makefile。请问这个KERNELDIR路径要怎么写?是写宿主机上的内核路径还是写开发板上的内核路径?哪个是内核路径?我用的的是nfs根文件系统,在这个根文件系统下有一个 /lib/modules/2.6.32.2目录,但是这个目录是空的。
还有一个问题,下面后面那个hello.o是事先要先用arm-linux-gcc 编译成 .o 文件吗? 我用arm-linux-gcc hello.c -c hello.o总报错,说找不到hello.o文件。谢谢大家了。
ifeq ($(KERNELRELEASE),)
KERNELDIR ?=/lib/modules/2.6.32.2
PWD := $(shell pwd)
modules:
        $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
          rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
.PHONY: modules modules_install clean
else
    obj-m := hello.o
endif

回复评论 (2)

KERNELDIR 是你ko编译后要放到哪个内核里边去跑的源码目录,比如你开发板上跑的kernel,你在宿主机上编译该kernel时kernel的存放路径是/home/xxxyyy/linux-2.6.32.2,那你编译ko时,指定KERNELDIR就是/home/xxxyyy/linux-2.6.32.2

用来编译ko的文件是不能用gcc直接照你那么编的

而且你arm-linux-gcc hello.c -c hello.o这个命令是有问题的,-c是只编译不链接,然后你的hello.o是作为输入文件的(但是你当前目录下没这个文件),我猜你应该是想用arm-linux-gcc hello.c -o hello.o,但是就算是用这个命令也是编译不了的
点赞  2013-6-7 22:35
博主,我在/home/lhx/core1解压了一个kernel-35内核,现在做动态编译,在makfile 指定源码路径为 KERNELDIR:=/home/lhx/core1/kernel-35 执行的make命令就出错 make -C KERNELDIR M='pwd' modules make[1]: *** KERNELDIR: 没有那个文件或目录。 停止。 请问大佬怎么回事
点赞  2020-4-22 17:32
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复