linux内核模块的makefile

转:

1. 内核模块的Makefile

若要编译hello的内核模块,最简单的方法就是要编写如下内容的Makefile(若对Makefile比较陌生,请参考Linux开发基础讲义):
-----------------------------------------------------------------------

ifeq ($(KERNELRELEASE),)

KERNELDIR ?=/usr/src/kernels/2.6.18-8.el5xen-i686   #指向你的内核代码目录
#KERNELDIR ?=/home/eetek/linux-2.6.29-eetek

PWD := $(shell pwd)

all:

    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules      #编译内核模块的指令
clean:                                               #删除生成的所有文件
    rm -rf modules.* *.o *~ core .depend .*.cmd *.ko

rm –rf *.mod.c .tmp_versions Module*

.PHONY: modules modules_install clean

else

    obj-m := hello.o                                 #你要编译的模块名称
endif
-----------------------------------------------------------------------

对于上述的Makefile需要特别说明如下几点:
(1)     $(MAKE) -C $(KERNELDIR) M=$(PWD) modules       #编译内核模块的指令
ü 理解这条指令,首先需要理解make命令选项-C的作用,-C是指Change Directory。
ü MAKE是Makefile中的宏变量,和KERNELDIR相似,要引用这个宏变量的值需要使用$符号。在这里实际上就是指向make程序。注:此时应该写为$(MAKE),而不能写成$MAKE,请思考为什么。
ü M=$(PWD) 是指要编译的内核模块的源程序在那个目录下,$(PWD)指与Makefile在同一目录下,也就是当前目录。(pwd命令的作用是:print work directory).modules指明要按照内核模块的方式编译。
结合起来理解,就是进入$(KERNELDIR)的目录,并且执行make命令,如果没有M=$(PWD) modules,make –C $(KERNELDIR)将是编译Linux内核映像的指令。M=$(PWD) modules也就是按照$(KERNELDIR)中内核模块的方式编译$(PWD)目录下的程序。modules实际上是$(KERNELDIR)目录下的Makefile的一个Target入口.
    既然是为$(KERNELDIR)编译内核模块,所以必须要求$(KERNELDIR)这个内核必须正确配置,并且得到编译的,以为编译模块的过程需要使用内核配置的相关信息,比如处理器的类型等。至于如何配置Linux内核,请参考Linux系统移植过程中的相关实验。

(2)     obj-m = hello.o       #你要编译的模块名称
这里必须和$(PWD)目录下C程序文件的名称相对应,如果C程序文件为world.c,那么必须修改成obj-m = world.o.

    和很多C语言程序一样,一个内核模块也可能有多个C程序文件,那么如何修改Makefile让其编译成一个内核模块呢?此时,需要将obj-m = hello.o换成如下代码:
    Obj-m = hello.o

    Hello-objs = hello1.o, hello2.o

(3)     clean是Makefile的入口,其目的是为了清除所有生成的文件。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/stephanxu/archive/2010/03/26/5417926.aspx

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值