## # @author mtk02202 ## # @breif DOXYGEN template # DOC_GEN ?= $(PREFIX)/KMODAPITemp.txt ## # @brief include path # INCLUDE := $(INCLUDE) -I$(shell pwd)/include -I$(SYSROOT)/usr/include -I$(SYSROOT)/include ## # @breif Our kernel EXTRA_CFLAGS. CONFIG is set by users # EXTRA_CFLAGS?=$(CONFIG) $(EXTRA_CONFIG) $(INCLUDE) ## # @breif Our include path # ifeq ($(CROSS),arm-none-linux-) ARCH=arm else ifeq ($(CROSS),arm-linux-) ARCH=arm endif ifeq ($(CROSS),arm-uclinuxeabi-) ARCH=arm endif ifeq ($(CROSS),aarch64-linux-) ARCH=arm64 endif ifeq ($(CROSS),mipsel-linux-) ARCH=mips endif endif ## # @breif Our include path # ifeq ($(CROSS),arm-none-linux-) KBUILD_EXTRA_INCLUDE = $(PREFIX)/arm-none-linux/usr/include/asm/arch endif ifeq ($(CROSS),arm-linux-) KBUILD_EXTRA_INCLUDE = $(PREFIX)/arm-linux/usr/include/asm/arch endif ifeq ($(CROSS),arm-uclinuxeabi-) KBUILD_EXTRA_INCLUDE = $(PREFIX)/arm-uclinuxeabi/usr/include/asm/arch endif ifeq ($(CROSS),aarch64-linux-) KBUILD_EXTRA_INCLUDE = $(PREFIX)/aarch64-linux/usr/include/asm/arch endif ifeq ($(CROSS),mipsel-linux-) KBUILD_EXTRA_INCLUDE = $(PREFIX)/mipsel-linux/usr/include/asm/arch endif ## # @breif Extra Module.symvers # KBUILD_EXTRA_SYMBOLS = $(foreach mod,$(DEP_MODS),$(KBUILD_EXTRA_INCLUDE)/$(mod)/Module.symvers) ## # @brief Linux kernel kbuild system and module dependence check # ifneq ($(KERNELRELEASE),) obj-m := $(NAME).o else KERNEL_OUT_DIR = $(shell cat $(KERNELDIR)/kernel_outdir 2> /dev/null) ifeq ($(CROSS),arm-linux-) ifeq ($(KERNEL_OUT_DIR),) KERNELRELEASE = $(shell cat $(KERNELDIR)/include/config/kernel.release 2> /dev/null) else KERNELRELEASE = $(shell cat $(KERNEL_OUT_DIR)/include/config/kernel.release 2> /dev/null) endif endif ifeq ($(CROSS),aarch64-linux-) ifeq ($(KERNEL_OUT_DIR),) KERNELRELEASE = $(shell cat $(KERNELDIR)/include/config/kernel.release 2> /dev/null) else KERNELRELEASE = $(shell cat $(KERNEL_OUT_DIR)/include/config/kernel.release 2> /dev/null) endif endif ifeq ($(CROSS),mipsel-linux-) KERNELRELEASE = $(shell cat $(KERNELDIR)/include/config/kernel.release 2> /dev/null) endif default:all post-build: post-install: post-clean: ## # @brief Generate documentation # ifneq ($(MIN),y) doc: $(wildcard include/*.h) $(DOC_GEN) mkdir -p doc include doxygen $(DOC_GEN) mkdir -p $(SYSROOT)/doc else doc: @echo "**NO documentation because MIN=$(MIN)" endif ## # @breif Generate _x.ko # %_x.ko:$(shell find -name "*.[hc]") bash -c '$(MAKE) -C $(KERNELDIR) M=$(shell pwd) \ modules ARCH=$(ARCH) \ CROSS_COMPILE=$(CROSS) \ NAME=$(@:%_x.ko=%_x) \ EXTRA_CFLAGS="$(EXTRA_CFLAGS) -D_UNIT_$(@:%_x.ko=%) -D_UNIT_ " \ O=$(KERNEL_OUT_DIR)' rm -f $(@:%_x.ko=%.o) VPATH=src/test %_xx.ko: %.c $(MAKE) -C $(KERNELDIR) M=$(shell pwd) \ modules ARCH=$(ARCH) \ CROSS_COMPILE=$(CROSS) \ NAME=$(@:%_xx.ko=%_xx) \ $(@:%_xx.ko=%_xx)-objs=$(^:%.c=%.o) \ EXTRA_CFLAGS="$(EXTRA_CFLAGS) -D_UNIT_$(@:%_xx.ko=%) -D_UNIT_ " \ O=$(KERNEL_OUT_DIR) %_xx.ko.install: %_xx.ko mkdir -p $(INSTALL_MOD_PATH)/lib/modules/$(shell cat $(SYSROOT)/lib/modules/version)/$(INSTALL_MOD_DIR) cp $^ $(INSTALL_MOD_PATH)/lib/modules/$(shell cat $(SYSROOT)/lib/modules/version)/$(INSTALL_MOD_DIR) ## # @breif Daily auto build dependence checking # .PHONY: _dep_check _dep_check: make_deps ## # @breif Check dependence # .PHONY: make_deps make_deps: @bash -c 'for mod in $(DEP_MODS); \ do \ echo $(KBUILD_EXTRA_SYMBOLS); \ if [ ! -e $(KBUILD_EXTRA_INCLUDE)/$$mod ]; then \ echo "[FAIL] No mod-$$mod"; \ exit 1; \ else \ echo "[PASS] mod-$$mod"; \ fi; \ done; \ echo "**** All depend modules have been installed ****"; \ echo "";' @echo DEP_MODS=$(DEP_MODS) > info.text ifeq ($(strip $(MLOG_MODULE)),1) .PHONY:mlog_cksrc mlog_cksrc: @$(PREFIX)/bin/mlog.pl -C .PHONY:mlog_parse mlog_parse: @$(PREFIX)/bin/mlog.pl -P endif all:$(PRE) make_deps $(UNIT) $(UNITX) $(MAKE) -C $(KERNELDIR) M=$(shell pwd) modules ARCH=$(ARCH) CROSS_COMPILE=$(CROSS) EXTRA_CFLAGS="$(EXTRA_CFLAGS)" O=$(KERNEL_OUT_DIR) PREFIX=$(PREFIX) $(MAKE) -C $(shell pwd) post-build O=$(KERNEL_OUT_DIR) PREFIX=$(PREFIX) module.files: bash -c 'find `pwd`/src `pwd`/include -name "*.h" -or -name "*.hxx" -or -name "*.[cCsS]" \ -or -name "*.cxx" -or -name "*.cpp" -or -name "*.inl" > module.files; echo ""' index:module.files @bash -c 'rm -f cscope.files ; \ LIST=$$(ls $(SYSROOT)/doc/*.files 2>/dev/null) ; \ for T in $$LIST; do \ if [ $$T != $(SYSROOT)/doc/$(NAME).files ]; then \ cat $$T >> cscope.files; \ fi ; \ done' cat module.files >> cscope.files cscope -b -c -icscope.files install:doc all module.files $(foreach U,$(UNITX), $(U).install ) $(INSTALL) $(MAKE) -C $(KERNELDIR) M=$(shell pwd) modules_install ARCH=$(ARCH) CROSS_COMPILE=$(CROSS) INSTALL_MOD_PATH=$(INSTALL_MOD_PATH) INSTALL_MOD_DIR=$(INSTALL_MOD_DIR) O=$(KERNEL_OUT_DIR) PREFIX=$(PREFIX) #@cp module.files $(SYSROOT)/doc/$(NAME).files @mkdir -p $(KBUILD_EXTRA_INCLUDE)/$(NAME) echo "@mkdir -p $(KBUILD_EXTRA_INCLUDE)/$(NAME)" @bash -c 'if [ ! "`echo include/*.h`" = "include/*.h" ]; then \ cp -f -a include/* $(KBUILD_EXTRA_INCLUDE)/$(NAME); \ fi ' ifeq ($(CROSS),arm-none-linux-) $(PREFIX)/bin/sym.pl insert $(NAME) else ifeq ($(CROSS),arm-linux-) @echo "" endif ifeq ($(strip $(CROSS)),arm-poky-linux-gnueabi-) @echo "" endif ifeq ($(CROSS),aarch64-linux-) @echo "" else ifeq ($(CROSS),aarch64-poky-linux-) @echo "" else #@bash -c 'if [ -e Module.symvers ]; then cp Module.symvers ../install/include/asm/arch/$(NAME); fi;' @bash -c 'if [ -e Module.symvers ]; then cp Module.symvers $(KBUILD_EXTRA_INCLUDE)/$(NAME); fi;' endif endif endif ifneq ($(MIN),y) @mkdir -p $(SYSROOT)/doc/mod-$(NAME)/ install -p doc/html/* $(SYSROOT)/doc/mod-$(NAME)/ wimac_doc.sh $(SYSROOT) > $(SYSROOT)/doc/index.html cp -f info.text $(SYSROOT)/doc/mod-$(NAME).info endif ifeq ($(MLOG_MODULE),1) @$(PREFIX)/bin/mlog.pl -P endif $(MAKE) -C $(shell pwd) post-install O=$(KERNEL_OUT_DIR) PREFIX=$(PREFIX) clean:$(CLEAN) rm -f *.o *.mod.c *.d module.order module.files info.text ifeq ($(CROSS),arm-none-linux-) $(PREFIX)/bin/sym.pl delete $(NAME) endif rm -rf *~ .tmp_version rm -rf doc $(MAKE) -C $(KERNELDIR) M=$(shell pwd) PREFIX=$(PREFIX) clean O=$(KERNEL_OUT_DIR) rm -rf $(KBUILD_EXTRA_INCLUDE)/$(NAME) $(MAKE) -C $(shell pwd) post-clean O=$(KERNEL_OUT_DIR) PREFIX=$(PREFIX) endif SDK_install:: @echo "copy .ko into $(INSTALL_MOD_PATH)/lib/modules/2.6.26.8-rt16/$(INSTALL_MOD_DIR)" @bash -c 'mkdir -p $(INSTALL_MOD_PATH)/lib/modules/2.6.26.8-rt16/$(INSTALL_MOD_DIR)' @bash -c 'cp -f $(shell find -iname "*.ko" | grep -v "_x.ko") $(INSTALL_MOD_PATH)/lib/modules/2.6.26.8-rt16/$(INSTALL_MOD_DIR)' @bash -c 'chmod a+w $(INSTALL_MOD_PATH)/lib/modules/2.6.26.8-rt16/$(INSTALL_MOD_DIR)/*.ko'