您的位置:首页 > 运维架构 > Linux

linux driver Makefile模板

2013-07-12 14:53 260 查看
#################################################################

# 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)就是编译目标保存的路径,默认就是源代码所在路径。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: