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

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

2011-12-16 11:42 459 查看


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 下用过,算是一个参考吧 :)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息