Linux内核模块编译----Makefile 模板

Linux内核模块编译

----Makefile 模板


在Linux 2.6内核中,模块的编译需要配置过的内核源代码;编译过程首先会到内核源码目录下读取顶层的Makefile文件,然后再返回模块源码所在目录;经过编译、链接后生成的内核模块文

件的后缀为.ko 。

2.6内核模块的Makefile模板:
ifneq ($(KERNELRELEASE),)
mymodule-objs:= mymodule 1.o  mymodule 2.o    #依赖关系
obj-m += mymodule.o           #编译、链接后将生成mymodule.o模块
else
PWD := $(shell pwd)
KVER := $(shell uname -r)
KDIR := /lib/modules/$(KVER)/build
all:
$(MAKE) -C $(KDIR) M=$(PWD)   #此处将再次调用make
clean:
rm -rf *.o *.mod.c *.ko *.symvers *.order *.markers *~
endif

当在命令行执行make命令时,将调用Makefile文件。KERNELRELEASE 是在内核源码的顶层/usr/src/linux-2.6.30/Makefile文件中定义的一个变量,位置在第358 行,如图1-1所示。在第一次读取执行此Makefile时,变量$ (KERNELRELEASE)没有被设置,因此第一行ifneq的条件失败,从else 后面开始执行,设置PWD、KVER 和KDIR等变量。

 

当make到标号all时,-C$(KDIR) 指明跳转到内核源码目录下读取那里的Makefile。M=$(PWD) ,表明返回到当前目录继续读入、执行当前的Makefile,也就是第二次调用make。这时的$(KERNELRELEASE)已被定义,因此语句ifneq成功,make将继续读取紧接在ifneq后面的内容。ifneq的内容为kbuild 语法的语句,指明模块源码中各文件之间的依赖关系和要生成的目标模块名称。

语句“mymodule-objs:= mymodule 1.o  mymodule2.o”表示mymoudule.o 由mymodule1.o 与mymodule2.o 链接生成。语句“obj-m:=mymodule.o ”表示编译链接后将生成mymodule.ko 模块,这个文件就是要插入内核的模块文件。

如果make的目标是clean,直接执行clean标号后的操作,也就清除*.o *.mod.c *.ko *.symvers*.order *.markers *~这些文件操作。执行完clean后面的rm命令后,整个make工作就结束了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值