From 810a0ba56f1939c2811ff2f1319fa4a41019d502 Mon Sep 17 00:00:00 2001 From: Steve Muckle Date: Wed, 13 Nov 2019 13:29:02 -0800 Subject: [PATCH] add BOARD_*_KERNEL_MODULE_ARCHIVE support It may be the case that the list of kernel modules to be copied into various partitions is not known at the time the build is invoked. To support this configuration, create a set of make variables, each of which can be set to the path of a zip archive of kernel modules to be used. Bug: 144317186 Bug: 144844424 Test: build and verify *.ko in vendor, repackage prebuilt kernel modules into zip, build and verify *.ko in vendor Change-Id: Ie6f7e2c72efa11d39be341920dd46e4ed6678fe1 --- core/Makefile | 47 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/core/Makefile b/core/Makefile index bec8cfc53..e108d526e 100644 --- a/core/Makefile +++ b/core/Makefile @@ -670,10 +670,11 @@ DEPMOD_STAGING_SUBDIR :=$= lib/modules/0.0 # $(4): staging dir # $(5): module load list # $(6): module load list filename +# $(7): module archive # Returns the a list of src:dest pairs to install the modules using copy-many-files. define build-image-kernel-modules $(foreach module,$(1),$(module):$(2)/lib/modules/$(notdir $(module))) \ - $(eval $(call build-image-kernel-modules-depmod,$(1),$(3),$(4),$(5),$(6))) \ + $(eval $(call build-image-kernel-modules-depmod,$(1),$(3),$(4),$(5),$(6),$(7),$(2))) \ $(4)/$(DEPMOD_STAGING_SUBDIR)/modules.dep:$(2)/lib/modules/modules.dep \ $(4)/$(DEPMOD_STAGING_SUBDIR)/modules.alias:$(2)/lib/modules/modules.alias \ $(4)/$(DEPMOD_STAGING_SUBDIR)/modules.softdep:$(2)/lib/modules/modules.softdep \ @@ -685,6 +686,13 @@ endef # $(3): staging dir # $(4): module load list # $(5): module load list filename +# $(6): module archive +# $(7): output dir +# TODO(b/144844424): If a module archive is being used, this step (which +# generates obj/PACKAGING/.../modules.dep) also unzips the module archive into +# the output directory. This should be moved to a module with a +# LOCAL_POST_INSTALL_CMD so that if modules.dep is removed from the output dir, +# the archive modules are restored along with modules.dep. define build-image-kernel-modules-depmod $(3)/$(DEPMOD_STAGING_SUBDIR)/modules.dep: .KATI_IMPLICIT_OUTPUTS := $(3)/$(DEPMOD_STAGING_SUBDIR)/modules.alias $(3)/$(DEPMOD_STAGING_SUBDIR)/modules.softdep $(3)/$(DEPMOD_STAGING_SUBDIR)/$(5) $(3)/$(DEPMOD_STAGING_SUBDIR)/modules.dep: $(DEPMOD) @@ -694,16 +702,29 @@ $(3)/$(DEPMOD_STAGING_SUBDIR)/modules.dep: PRIVATE_MODULE_DIR := $(3)/$(DEPMOD_S $(3)/$(DEPMOD_STAGING_SUBDIR)/modules.dep: PRIVATE_STAGING_DIR := $(3) $(3)/$(DEPMOD_STAGING_SUBDIR)/modules.dep: PRIVATE_LOAD_MODULES := $(4) $(3)/$(DEPMOD_STAGING_SUBDIR)/modules.dep: PRIVATE_LOAD_FILE := $(3)/$(DEPMOD_STAGING_SUBDIR)/$(5) -$(3)/$(DEPMOD_STAGING_SUBDIR)/modules.dep: $(1) +$(3)/$(DEPMOD_STAGING_SUBDIR)/modules.dep: PRIVATE_MODULE_ARCHIVE := $(6) +$(3)/$(DEPMOD_STAGING_SUBDIR)/modules.dep: PRIVATE_OUTPUT_DIR := $(7) +$(3)/$(DEPMOD_STAGING_SUBDIR)/modules.dep: $(1) $(6) @echo depmod $$(PRIVATE_STAGING_DIR) rm -rf $$(PRIVATE_STAGING_DIR) mkdir -p $$(PRIVATE_MODULE_DIR) - cp $$(PRIVATE_MODULES) $$(PRIVATE_MODULE_DIR)/ + $(if $(6),\ + unzip -qo -d $$(PRIVATE_MODULE_DIR) $$(PRIVATE_MODULE_ARCHIVE); \ + mkdir -p $$(PRIVATE_OUTPUT_DIR)/lib; \ + rm -rf $$(PRIVATE_OUTPUT_DIR)/lib/modules; \ + cp -r $$(PRIVATE_MODULE_DIR) $$(PRIVATE_OUTPUT_DIR)/lib/; \ + find $$(PRIVATE_MODULE_DIR) -type f -name *.ko | xargs basename -a > $$(PRIVATE_LOAD_FILE); \ + ) + $(if $(1),\ + cp $$(PRIVATE_MODULES) $$(PRIVATE_MODULE_DIR)/; \ + for MODULE in $$(PRIVATE_LOAD_MODULES); do \ + basename $$$$MODULE >> $$(PRIVATE_LOAD_FILE); \ + done; \ + ) $(DEPMOD) -b $$(PRIVATE_STAGING_DIR) 0.0 # Turn paths in modules.dep into absolute paths sed -i.tmp -e 's|\([^: ]*lib/modules/[^: ]*\)|/\1|g' $$(PRIVATE_STAGING_DIR)/$$(DEPMOD_STAGING_SUBDIR)/modules.dep touch $$(PRIVATE_LOAD_FILE) - (for MODULE in $$(PRIVATE_LOAD_MODULES); do basename $$$$MODULE >> $$(PRIVATE_LOAD_FILE); done) endef # $(1): staging dir @@ -747,40 +768,40 @@ ifneq ($(strip $(BOARD_GENERIC_RAMDISK_KERNEL_MODULES)),) endif endif -ifneq ($(strip $(BOARD_RECOVERY_KERNEL_MODULES)),) +ifneq ($(strip $(BOARD_RECOVERY_KERNEL_MODULES))$(strip $(BOARD_RECOVERY_KERNEL_MODULES_ARCHIVE)),) ifeq ($(BOARD_USES_RECOVERY_AS_BOOT), true) ifdef BOARD_GENERIC_RAMDISK_KERNEL_MODULES_LOAD ALL_DEFAULT_INSTALLED_MODULES += $(call copy-many-files,$(call module-load-list-copy-paths,$(call intermediates-dir-for,PACKAGING,ramdisk_modules),$(BOARD_GENERIC_RAMDISK_KERNEL_MODULES_LOAD),modules.load,$(TARGET_RECOVERY_ROOT_OUT))) endif endif - ALL_DEFAULT_INSTALLED_MODULES += $(call copy-many-files,$(call build-image-kernel-modules,$(BOARD_RECOVERY_KERNEL_MODULES),$(TARGET_RECOVERY_ROOT_OUT),,$(call intermediates-dir-for,PACKAGING,depmod_recovery),$(BOARD_RECOVERY_KERNEL_MODULES_LOAD),modules.load.recovery)) + ALL_DEFAULT_INSTALLED_MODULES += $(call copy-many-files,$(call build-image-kernel-modules,$(BOARD_RECOVERY_KERNEL_MODULES),$(TARGET_RECOVERY_ROOT_OUT),,$(call intermediates-dir-for,PACKAGING,depmod_recovery),$(BOARD_RECOVERY_KERNEL_MODULES_LOAD),modules.load.recovery,$(BOARD_RECOVERY_KERNEL_MODULES_ARCHIVE))) endif -ifneq ($(strip $(BOARD_VENDOR_RAMDISK_KERNEL_MODULES)),) +ifneq ($(strip $(BOARD_VENDOR_RAMDISK_KERNEL_MODULES))$(strip $(BOARD_VENDOR_RAMDISK_KERNEL_MODULES_ARCHIVE)),) ifeq ($(BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD),) BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD := $(BOARD_VENDOR_RAMDISK_KERNEL_MODULES) endif - ALL_DEFAULT_INSTALLED_MODULES += $(call copy-many-files,$(call build-image-kernel-modules,$(BOARD_VENDOR_RAMDISK_KERNEL_MODULES),$(TARGET_VENDOR_RAMDISK_OUT),,$(call intermediates-dir-for,PACKAGING,depmod_vendor_ramdisk),$(BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD),modules.load)) + ALL_DEFAULT_INSTALLED_MODULES += $(call copy-many-files,$(call build-image-kernel-modules,$(BOARD_VENDOR_RAMDISK_KERNEL_MODULES),$(TARGET_VENDOR_RAMDISK_OUT),,$(call intermediates-dir-for,PACKAGING,depmod_vendor_ramdisk),$(BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD),modules.load,$(BOARD_VENDOR_RAMDISK_KERNEL_MODULES_ARCHIVE))) endif ifneq ($(BOARD_USES_RECOVERY_AS_BOOT), true) ifneq ($(strip $(BOARD_GENERIC_RAMDISK_KERNEL_MODULES)),) - ALL_DEFAULT_INSTALLED_MODULES += $(call copy-many-files,$(call build-image-kernel-modules,$(BOARD_GENERIC_RAMDISK_KERNEL_MODULES),$(TARGET_RAMDISK_OUT),,$(call intermediates-dir-for,PACKAGING,depmod_ramdisk),$(BOARD_GENERIC_RAMDISK_KERNEL_MODULES_LOAD),modules.load)) + ALL_DEFAULT_INSTALLED_MODULES += $(call copy-many-files,$(call build-image-kernel-modules,$(BOARD_GENERIC_RAMDISK_KERNEL_MODULES),$(TARGET_RAMDISK_OUT),,$(call intermediates-dir-for,PACKAGING,depmod_ramdisk),$(BOARD_GENERIC_RAMDISK_KERNEL_MODULES_LOAD),modules.load,)) endif endif -ifneq ($(strip $(BOARD_VENDOR_KERNEL_MODULES)),) +ifneq ($(strip $(BOARD_VENDOR_KERNEL_MODULES)$(strip $(BOARD_VENDOR_KERNEL_MODULES_ARCHIVE))),) ifeq ($(BOARD_VENDOR_KERNEL_MODULES_LOAD),) BOARD_VENDOR_KERNEL_MODULES_LOAD := $(BOARD_VENDOR_KERNEL_MODULES) endif - ALL_DEFAULT_INSTALLED_MODULES += $(call copy-many-files,$(call build-image-kernel-modules,$(BOARD_VENDOR_KERNEL_MODULES),$(TARGET_OUT_VENDOR),vendor,$(call intermediates-dir-for,PACKAGING,depmod_vendor),$(BOARD_VENDOR_KERNEL_MODULES_LOAD),modules.load)) + ALL_DEFAULT_INSTALLED_MODULES += $(call copy-many-files,$(call build-image-kernel-modules,$(BOARD_VENDOR_KERNEL_MODULES),$(TARGET_OUT_VENDOR),vendor,$(call intermediates-dir-for,PACKAGING,depmod_vendor),$(BOARD_VENDOR_KERNEL_MODULES_LOAD),modules.load,$(BOARD_VENDOR_KERNEL_MODULES_ARCHIVE))) endif -ifneq ($(strip $(BOARD_ODM_KERNEL_MODULES)),) +ifneq ($(strip $(BOARD_ODM_KERNEL_MODULES))$(strip $(BOARD_ODM_KERNEL_MODULES_ARCHIVE)),) ifeq ($(BOARD_RECOVERY_KERNEL_MODULES_LOAD),) BOARD_ODM_KERNEL_MODULES_LOAD := $(BOARD_ODM_KERNEL_MODULES) endif - ALL_DEFAULT_INSTALLED_MODULES += $(call copy-many-files,$(call build-image-kernel-modules,$(BOARD_ODM_KERNEL_MODULES),$(TARGET_OUT_ODM),odm,$(call intermediates-dir-for,PACKAGING,depmod_odm),$(BOARD_ODM_KERNEL_MODULES_LOAD),modules.load)) + ALL_DEFAULT_INSTALLED_MODULES += $(call copy-many-files,$(call build-image-kernel-modules,$(BOARD_ODM_KERNEL_MODULES),$(TARGET_OUT_ODM),odm,$(call intermediates-dir-for,PACKAGING,depmod_odm),$(BOARD_ODM_KERNEL_MODULES_LOAD),modules.load,$(BOARD_ODM_KERNEL_MODULES_ARCHIVE))) endif # -----------------------------------------------------------------