linux2.6内核模块编译的makefile模板

来源:互联网 发布:淘宝编辑软件 编辑:程序博客网 时间:2024/05/16 06:09

linux2.6内核模块编译的makefile模板  


因为要写kernel modules,看了很多相关makefile的文章,都不能很好的实现多文件的模块编译,所以自己写了一个makefile,支持多文件,支持多目录,自己感觉比较方便,放在工程中就可以用了。

文件由两个部分组成: Makefile和objects.mk

使用方法:

将Makefile和objects.mk放在你工程的主目录中就可以了

Makefile内容如下:

___________________________

#Makefile for build kernel ( kernel's version >=2.4 )

#auother: haozi

#date: 06/08/2005 20:48:20

MDIR = drivers/misc

EXTRA_CFLAGS = -DEXPORT_SYMTAB

CURRENT = $(shell uname -r)

KDIR = /lib/modules/$(CURRENT)/build

PWD = $(shell pwd)

DEST = /lib/modules/$(CURRENT)/kernel/$(MDIR)

#最终目标 ,这里是唯一需要自己修改的,将tacm改成你自己的模块名称就可以了。

TARGET = tacm #only change here , don't change any more

#导入依赖目标文件

-include objects.mk

#模块编译

obj-m := $(TARGET).o

$(TARGET)-objs := $(USER_OBJS)

all: $(TARGET)-build

$(TARGET)-build:

@echo 开始编译$(TARGET)内核模块...

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

@echo 成功编译$(TARGET)内核模块...

rebuild : clean-all all

#模块安装

ifneq (,$(findstring 2.4.,$(CURRENT)))

install:

su -c "cp -v $(TARGET).o $(DEST) && /sbin/depmod -a"

else

install:

su -c "cp -v $(TARGET).ko $(DEST) && /sbin/depmod -a"

endif

#清理所有目标(包括临时文件,中间目标和最终目标)

clean-all:

@echo 正在清理所有目标文件**[包括临时文件,中间目标和最终目标]**...

$(if $(shell find . -name '*.o' -print), -rm -f $(shell find . -name '*.o' -print))

$(if $(shell find . -name '*.ko' -print),-rm -f $(shell find . -name '*.ko' -print))

$(if $(shell find . -name '.*.flags' -print),-rm -f $(shell find . -name '.*.flags' -print))

$(if $(shell find . -name '.*.cmd' -print),-rm -f $(shell find . -name '.*.cmd' -print))

$(if $(shell find . -name '.*.cmd' -print),-rm -f $(shell find . -name '*.mod.c' -print))

@echo 已成功清理所有目标文件**[包括临时文件,中间目标和最终目标]**...

clean-tmp:

@echo 正在清理所有中间文件**[不包括*.ko文件]**...

$(if $(shell find . -name '*.o' -print), -rm -f $(shell find . -name '*.o' -print))

$(if $(shell find . -name '.*.flags' -print),-rm -f $(shell find . -name '.*.flags' -print))

$(if $(shell find . -name '.*.cmd' -print),-rm -f $(shell find . -name '.*.cmd' -print))

$(if $(shell find . -name '.*.cmd' -print),-rm -f $(shell find . -name '*.mod.c' -print))

@echo 已成功清理所有中间文件**[不包括*.ko文件]**...

-include $(KDIR)/Rules.make

________________________

objects.mk:

_________________________

FILES := $(shell find . -name '*.c' -print)

SOURCES := $(filter-out %.mod.c , $(FILES))

OBJS := $(patsubst %.c,%.o, $(SOURCES))

USER_OBJS := $(filter %.o, $(OBJS))

export USER_OBJS

export OBJS

export SOURCES

__________________________

希望可以给正在编写linux内核模块的朋友带来方便

我是在fc4下的,内核版本2.6.11, >2.4的内核版本都应该是支持的,不过不知道其他的发行版怎么样,我只在fc4,fc3 下用过,算是一个参考吧 :)