NPU模块 kernel5.4 androidP Makefile,target部分如下:
modules:
echo CC=$(CC)
echo CROSS_COMPILE=$(CROSS_COMPILE)
echo M=$(M)
echo KERNEL_SRC=$(KERNEL_SRC)
echo O=$(O)
ifeq ($(CC),clang)
#./aml_buildroot.sh $(M) $(KERNEL_SRC) $(O) $(CC) $(HOSTCC) $(LD) $(NM) $(OBJCOPY) $(KERNEL_ARCH)
$(MAKE) -C $(KERNEL_SRC) M=$(M)/hal modules ARCH=$(KERNEL_ARCH) "EXTRA_CFLAGS+=-I$(INCLUDE) -Wno-error -I$(EXTRA_CFLAGS1) $(CONFIGS_BUILD) $(EXTRA_INCLUDE)" $(CONFIGS)
else
$(MAKE) -C $(KERNEL_SRC) M=$(M)/hal modules ARCH=$(KERNEL_ARCH) "EXTRA_CFLAGS+=-I$(INCLUDE) -Wno-error -I$(EXTRA_CFLAGS1) $(CONFIGS_BUILD) $(EXTRA_INCLUDE)" $(CONFIGS)
endif
all:modules
modules_install:
echo OUT_DIR=$(OUT_DIR)
ifeq ($(CC),clang)
#$(MAKE) INSTALL_MOD_STRIP=1 M=$(M) -C $(KERNEL_SRC) modules_install
$(MAKE) INSTALL_MOD_STRIP=1 M=$(M)/hal -C $(KERNEL_SRC) modules_install
else
$(MAKE) INSTALL_MOD_STRIP=1 M=$(M)/hal -C $(KERNEL_SRC) modules_install
endif
mkdir -p ${OUT_DIR}/../vendor_lib/modules
cd ${OUT_DIR}/$(M)/; find -name "*.ko" -exec cp {} ${OUT_DIR}/../vendor_lib/modules/ \\;
上述log中带+的为上层调用npu仓Makefile对应的语句,以第一句Makefile为例
对应就是调用上述Makefile中的默认目标,即modules,可以看到除了指定了KERNEL_SRC变量,还指定了O变量(对应 kernel编译生成的结果所在的目录),由第1部分的实验或参考
可知,这些命令行中指定的变量是可以传递给更底层的Makefile中的,即kernel中的Makefile
M变量是使用的相对路径,M=../../npu(M=$(M)/hal可知,传到kernel中的M=../../npu/hal),其实这个相对路径会在两个地方起作用,
所以,这就达到了源码和编译生成的ko在不同的目录
这里提一下modules_install目标,根据如上log android上层Makefile会调用此目标,目的是安装编译生成的galcore.ko,也就是拷贝此ko文件到指定目录,最终测试结果如下: