目录结构大概是着这样的
code->一级目录
----include->二级目录,存放头文件
--------hw->三级目录,存放hardware相关的头文件
----src->二级目录,存放源码
--------hw->三级目录,存放hardware相关的源码
PWD:=$(shell pwd)
KBUILD_EXTRA_SYMBOLS += /usr/src/linux-headers-$(shell uname -r)/Module.symvers
export KBUILD_EXTRA_SYMBOLS
EXTRA_CFLAGS +=-Wno-date-time
################################头文件目录########################################
EXTRA_CFLAGS += -I$(PWD)/../include
EXTRA_CFLAGS += -I$(PWD)/../include/hw
EXTRA_CFLAGS += -I$(PWD)/hw
############module name需要修改,比如pcieaer,最后会编译出pcieaer.ko##############
MODULE_NAME = pcieaer
############module object需要根据生产object的依赖关系修改##############
$(MODULE_NAME)-objs += hw/pcieaer_tcs81.o \
pcieaer_hw_adapter.o \
pcieaer_poll.o \
pcieaer_init.o \
pcieaer_errprint.o
ifneq ($(KERNELRELEASE),)
obj-m += $(MODULE_NAME).o
else
KDIR := /lib/modules/$(shell uname -r)/build
#PWD:=$(shell pwd)
all:
$(MAKE_BEGIN)
@echo "EXTRA_SYMBOLS: $(KBUILD_EXTRA_SYMBOLS)"
make -C $(KDIR) M=$(PWD) $(EXTRA_CFLAGS) $(KBUILD_EXTRA_SYMBOLS) modules
$(MAKE_DONE)
clean:
$(CLEAN_BEGIN)
rm -f *.ko *.o *.symvers *.cmd *.cmd.o
$(CLEAN_END)
endif
CLEAN_BEGIN=@echo "++++++++++++++++Now, Cleaning up ...++++++++++++++++"
CLEAN_END=@echo "++++++++++++++++Clean Done.++++++++++++++++"
MAKE_BEGIN=@echo "++++++++++++++++Now, Compiling ...++++++++++++++++"
MAKE_DONE=@echo "++++++++++++++++Compile Job done.++++++++++++++++"
关于EXTRA_CFLAGS可以参考这篇文档
https://www.huaweicloud.com/articles/509ada5d8900bc0134de1f0ffbea133c.html