//Linux内核源码目录
objtree :=$(CURDIR)
//BUILD_DIR变量在BCM编译环境的主Makefile里定义的
BUILD_DIR= $(shell pwd)
//BCM编译环境下的bcmdrivers目录
BRCMDRIVERS_DIR= $(BUILD_DIR)/bcmdrivers
//BCM驱动相关目录,这里我们只关心BRCMDRIVERS_DIR
brcmdrivers-y :=$(INC_BRCMBOARDPARMS_PATH)/$(BRCM_BOARD)/ $(BRCMDRIVERS_DIR)/$(INC_SPI_PATH)/ $(INC_FLASH_PATH)/
//这时从下面所有变量中获取仅含有目录(就是最后面是\的字符)的变量,并将最后的\
//字符去除,比如BCM驱动变量的字符串为/xxx/bcm6818/bcmdrivers/,则最终字符变换后
//字符串为/xxx/bcm6818/bcmdrivers
vmlinux-dirs :=$(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
$(core-y) $(core-m) $(drivers-y) $(drivers-m) \
$(brcmdrivers-y) $(brcmdrivers-m) \
$(net-y) $(net-m) $(libs-y) $(libs-m)))
//模块编译(因为我们没有使用M=编译宏进行单独指定模块编译,所有KBUILD_EXTMOD
//为空,走为空的编译流程)。
modules:$(vmlinux-dirs-2) $(if $(KBUILD_BUILTIN),vmlinux)
//在如下目录中查找含有modules.order文件的目录,并将所有modules.order文件
//统一合并到内核目录下的单个modules.order文件中
$(Q)$(AWK)'!x[$$0]++' $(vmlinux-dirs:%=%/modules.order) >$(objtree)/modules.order
//输出要进行第二阶段模块编译的打印
@$(kecho)' Building modules, stage 2.';
//调用Makefile.modpost进行第二阶段模块编译
$(Q)$(MAKE)-f $(srctree)/scripts/Makefile.modpos
//主要是特定驱动所需要的二进制固件进行安装,当前ENDPT没有涉及,不关心
$(Q)$(MAKE)-f $(srctree)/scripts/Makefile.fwinst obj=firmware __fw_modbuild