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)就是编译目标保存的路径,默认就是源代码所在路径。
相关文章推荐
- linux device driver .ko module Makefile 模板
- Linux 通用Makefile模板
- linux: 几个常用makefile模板
- linux: 几个常用makefile模板(动态库、静态库、可执行程序)
- linux drver Makefile模板
- 一个linux下g++使用的 makefile 模板
- LINUX驱动Makefile模板
- linux下makefile(通用模板)
- linux makefile模板
- linux 内核模块编译的Makefile模板
- Linux驱动makefile模板
- 一个简单的linux driver Makefile
- linux: 几个常用makefile模板
- linux下通用Makefile模板
- Linux 动态和静态库(.so & .a)的Makefile模板
- Linux工程下所有C代码编译Makefile模板
- 一个linux下g++使用的 makefile 模板
- Linux下makefile 模板
- Linux的通用makefile模板
- Linux驱动Makefile 模板