linux driver Makefile模板

#################################################################

# file name: Makefile

# A simple Makefile for driver

# by Late Lee at www.latelee.org

# based on LDD3 and other guys works

# copyleft @ 2010

#

#################################################################

 

############样式输出 

### nothing, just for fun

OFFSET=\x1b[21G   # 21 col

COLOR1=\x1b[0;32m # green

COLOR2=\x1b[1;35m #

COLOR3=\x1b[1;31m # red

RESET=\x1b[0m

 

CLEAN_BEGIN=@echo -e "$(OFFSET)$(COLOR2)Cleaning up ...$(RESET)"

CLEAN_END=@echo -e "$(OFFSET)$(COLOR2)[Done.]$(RESET)"

 

MAKE_BEGIN=@echo -ne "$(OFFSET)$(COLOR1)Compiling ...$(RESET)"

MAKE_DONE="$(OFFSET)$(COLOR1)[Job done!]$(RESET)";

MAKE_ERR="$(OFFSET)$(COLOR3)[Oops! Error occurred]$(RESET)";

### nothing end here

 

CROSS_COMPILE=arm-linux-

CC := $(CROSS_COMPILE)gcc

LD := $(CROSS_COMPILE)ld

 

######### DEBUG部分

#DEBUG = y

ifeq ($(DEBUG), y)

       DEBFLAGS = -O -g

else

       DEBFLAGS = -O1

endif

 

# sth wrong here, don’t know why

#EXTRA_CFLAGS += $(DEBFLAGS) -I$(LDDINCDIR)

 

#########驱动模块名称以及源文件部分

# module name here

MODULE = GotoHell

# obj-m = module

# obj-y = into kernel

# foo.o -> foo.ko

ifneq ($(KERNELRELEASE), )

       obj-m := $(MODULE).o

 

# 驱动源代码文件,.o形式

# your obj file(s) here

       $(MODULE)-objs := foo.o bar.o

 

else

 

       KERNELDIR ?= /lib/modules/$(shell uname -r)/build

       PWD := $(shell pwd)

 

##########真正编译部分,添加了if语句

all:

       $(MAKE_BEGIN)

       @echo

       @if \

       $(MAKE) -C $(KERNELDIR) M=$(PWD) modules;\

       then echo -e $(MAKE_DONE)\

       else \

       echo -e  $(MAKE_ERR)\

       exit 1; \

       fi

endif

 

#####这个clean把生成的杂七杂八文件都删除,可用ls –al查看

clean:

       $(CLEAN_BEGIN)

       rm -rf *.cmd *.o *.ko *.mod.c *.symvers *.order *.markers \

       .tmp_versions .*.cmd *~

       $(CLEAN_END)

 

########伪目标部分

install:

       @echo -e "$(COLOR3)                   Note:"

       @echo -e "To install or not install,that is a question.$(RESET)"

 

modules:

       @echo -e "$(COLOR3)Do not need to do this.$(RESET)"

 

modules_install:

       @echo -e "$(COLOR3)Do not need to do this.$(RESET)"

 

.PHONY: all clean install modules modules_install

 

############# Makefile end here
外部头文件
有时需要连接内核源代码外部的系统头文件,但Kbuild系统默认的系统头文件都在内核源代码内部,如何使用外部的头文件呢?这个可以借助于Kbuild 系统的特殊规则:
·          EXTRA_CFLAGS 
EXTRA_CFLAGS可以给Kbuild系统添加外部系统头文件,
    EXTRA_CFLAGS += $(ext_include_path)
一般外部头文件可能位于外部模块源文件的目录内,如何指定呢?这可以借助$(src)或$(obj)
·          $(src)/$(obj) 
$(src)是一个相对路径,它就是Makefile/Kbuild文件所在的路径。同样$(obj)就是编译目标保存的路径,默认就是源代码所在路径。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值