Makefile

注意,内核模块的makefile与普通c语言的makefile编写是有区别的。

0、设定了.vimrc文件的一些默认的缩进以后,真是坑人,vi对于makefile中的tab缩进不识别出现红色警告,并且编译make无反应。此时使用ctrl+v+i方法输入tab可用。  还有license的大写写错,并且有__init  __exit这些声明的时候,需要linux/init.h头文件。或者使用  https://jingyan.baidu.com/article/15622f243cad44fdfcbea50d.html   这个链接,将自己的.vimrc文件修改为:set tabstop=4 意思是设置tab宽度为4

set expandtab 表示将tab换为空格。

需要加上专门对makefile特殊处理的: autocmd FileType make set noexpandtab  "表示对于make时候不使用将tab换为4个空格使用。

1、用于内核模块编写Makefile时候,$(PWD)可以使用而 小写的要跟$(shell pwd)

2、M=$(shell pwd)选项让该Makefile在构造modules目标之前返回到模块源代码目录并在当前目录生成obj-m指定的xxx.o目标模块

3、kbuild makefile:

obj-m:=xxx.o

xxx-y:=默认文件名1.o  默认文件名2.o

KDIR:=/lib/modules/$(shell uname -r)/build

PWD:=$(shell pwd)

default:

    $(MAKE) -C $(KDIR) M=$(PWD) modules

clean:

    $(MAKE) -C $(KDIR) M=$(PWD) clean

    

4、在makefile中定义宏命令有两种意义:宏用在makefile自身,宏用在源代码中。

前者是CONFIG_DEBUG=y就是说后面句子obj-(CONFIG_DEBUG)+=test.o就等效于:obj-y+=test.o

后者是EXTRA_CFLAGS+=-D  KERNEL_MODLE表示用于c语言中的#define KERNEL_MODLE。和EXTRA_CFLAGS+=-D  KERNEL_MODLE=3表示在c语言中的#define KERNEL_MODLE =3

5、而定义包含路径为:

INCLUDE:= ../../include   

EXTRA_CFLAGS:= -I  $(PWD)/$(INCLUDE)\ -I $(PWD)/$(...)

都是EXTRA_CFLAGS  只是后面是-I  还是-D

6、只要obj-m:=xxx.o

和xxx-y:= 1.o 2.o 3.o  xx/xx/4.o

这样定义完就是包含了,那么默认的编译第一个target只有:

default :

    $(MAKE) -C $(KROOT) M=$(PWD) modules

就够了。不用再考虑怎么生成1.o  2.o这种。但是其他路径的4.o怎么生成?是

从这可以看出来gnu的makefile与kbuild的makefile在多层次目录下也不一样。具体哪不一样,如下所述。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值