//在这些变量中找到含有目录的字符,并去除最后的/
vmlinux-dirs-2 :=$(patsubst %/,%,$(filter %/, $(net-y) $(net-m) $(libs-y) $(libs-m)))
$(vmlinux-dirs-2):$(brcmdriver-dirs)
//这里会分别进入net、lib等目录进行编译,暂不关心,只关心依赖条件BCM驱动
$(Q)$(MAKE)$(build)=$@
-------------------------------------------------------------------------------------------------------------------------
//BCM驱动目录
BRCMDRIVERS_DIR= $(BUILD_DIR)/bcmdrivers
//BCM驱动相关,这里只关心BRCMDRIVERS_DIR
brcmdrivers-y :=$(INC_BRCMBOARDPARMS_PATH)/$(BRCM_BOARD)/ $(BRCMDRIVERS_DIR)/$(INC_SPI_PATH)/ $(INC_FLASH_PATH)/
//在BCM驱动变量中找到含有目录的字符,并去除最后的/
brcmdriver-dirs :=$(patsubst %/,%,$(filter %/, $(brcmdrivers-y) $(brcmdrivers-m)))
//这里暂不关心vmlinux-dirs-1,仅关心和BCM驱动相关,其中preparebrcmdriver仅
//仅用于建立对应产品的驱动软链接
$(brcmdriver-dirs):$(vmlinux-dirs-1) preparebrcmdriver
//进入BCM驱动目录进行编译
$(Q)$(MAKE)-j1 $(build)=$@
------------------------------------------------------------------------------------------------------------------------
//BCM驱动预处理
preparebrcmdriver:
//这里进入bcmdrivers目录,执行该目录下的Makefile,目标对象为symlinks
$(Q)$(MAKE)-C $(BRCMDRIVERS_DIR) symlinks
//这里的宏CONFIG_BCM_ENDPOINT是hostTools\scripts\gendefconfig中产生的,最终是根据
//targetprofile的配置来控制是否含有ENDPT驱动
//LN_DRIVER_DIRS += ln –sn impl1 broadcom/char/endpoint/bcm9xxx
ifneq($(CONFIG_BCM_ENDPOINT),)
LN_DRIVER_DIRS+=ln -sn impl$(CONFIG_BCM_ENDPOINT_IMPL)broadcom/char/endpoint/$(LN_NAME);
obj-$(CONFIG_BCM_ENDPOINT)+= broadcom/char/endpoint/$(LN_NAME)/
endif
//这里的宏CONFIG_BCM_ENDPOINT是hostTools\scripts\gendefconfig中产生的,最终是根据
//targetprofile的配置来控制是否含有DSPAPP驱动
//LN_DRIVER_DIRS += ln –sn impl1 broadcom/char/dspapp/bcm9xxx
ifneq($(CONFIG_BCM_BCMDSP),)
LN_DRIVER_DIRS+=ln -sn impl$(CONFIG_BCM_BCMDSP_IMPL)broadcom/char/dspapp/$(LN_NAME);
obj-$(CONFIG_BCM_BCMDSP)+= broadcom/char/dspapp/$(LN_NAME)/
endif
symlinks:applinks
//删除bcm9xxxxx的目录
find. -lname "*" -name "$(LN_NAME)" -print -exec rm-f "{}" ";"
//执行上面已经填充好的两个软链接命令
$(CONFIG_SHELL)-c "$(LN_DRIVER_DIRS)"