diff --git a/core/Makefile b/core/Makefile index d3b235a52a..92fef49762 100644 --- a/core/Makefile +++ b/core/Makefile @@ -648,6 +648,57 @@ $(INSTALLED_SDK_BUILD_PROP_TARGET): $(INSTALLED_BUILD_PROP_TARGET) echo "$$x"generic >> $@.tmp; done $(hide) mv $@.tmp $@ +# ----------------------------------------------------------------- +# kernel modules + +# Depmod requires a well-formed kernel version so 0.0 is used as a placeholder. +DEPMOD_STAGING_SUBDIR :=$= lib/modules/0.0 + +# $(1): modules list +# $(2): output dir +# $(3): mount point +# $(4): staging dir +# 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),$(2),$(3),$(4))) \ + $(4)/$(DEPMOD_STAGING_SUBDIR)/modules.dep:$(2)/lib/modules/modules.dep \ + $(4)/$(DEPMOD_STAGING_SUBDIR)/modules.alias:$(2)/lib/modules/modules.alias +endef + +# $(1): modules list +# $(2): output dir +# $(3): mount point +# $(4): staging dir +define build-image-kernel-modules-depmod +$(4)/$(DEPMOD_STAGING_SUBDIR)/modules.dep: .KATI_IMPLICIT_OUTPUTS := $(4)/$(DEPMOD_STAGING_SUBDIR)/modules.alias +$(4)/$(DEPMOD_STAGING_SUBDIR)/modules.dep: $(DEPMOD) +$(4)/$(DEPMOD_STAGING_SUBDIR)/modules.dep: PRIVATE_MODULES := $(1) +$(4)/$(DEPMOD_STAGING_SUBDIR)/modules.dep: PRIVATE_OUTPUT_DIR := $(2) +$(4)/$(DEPMOD_STAGING_SUBDIR)/modules.dep: PRIVATE_MOUNT_POINT := $(3) +$(4)/$(DEPMOD_STAGING_SUBDIR)/modules.dep: PRIVATE_STAGING_DIR := $(4) +$(4)/$(DEPMOD_STAGING_SUBDIR)/modules.dep: $(1) + @echo depmod $$(PRIVATE_STAGING_DIR) + rm -rf $$(PRIVATE_STAGING_DIR) + mkdir -p $$(PRIVATE_STAGING_DIR)/$$(DEPMOD_STAGING_SUBDIR)/$$(PRIVATE_MOUNT_POINT)/lib/modules + cp $$(PRIVATE_MODULES) $$(PRIVATE_STAGING_DIR)/$$(DEPMOD_STAGING_SUBDIR)/$$(PRIVATE_MOUNT_POINT)/lib/modules + $(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 +endef + +ifdef BOARD_RECOVERY_KERNEL_MODULES + 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))) +endif + +ifdef BOARD_VENDOR_KERNEL_MODULES + 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))) +endif + +ifdef BOARD_ODM_KERNEL_MODULES + 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))) +endif + # ----------------------------------------------------------------- # package stats ifdef BUILDING_SYSTEM_IMAGE @@ -1505,23 +1556,6 @@ define read-image-prop-dictionary $$(grep '$(2)=' $(1) | cut -f2- -d'=') endef -# $(1): modules list -# $(2): output dir -# $(3): mount point -# $(4): staging dir -# Depmod requires a well-formed kernel version so 0.0 is used as a placeholder. -define build-image-kernel-modules - $(hide) rm -rf $(2)/lib/modules - $(hide) mkdir -p $(2)/lib/modules - $(hide) cp $(1) $(2)/lib/modules/ - $(hide) rm -rf $(4) - $(hide) mkdir -p $(4)/lib/modules/0.0/$(3)lib/modules - $(hide) cp $(1) $(4)/lib/modules/0.0/$(3)lib/modules - $(hide) $(DEPMOD) -b $(4) 0.0 - $(hide) sed -e 's/\(.*modules.*\):/\/\1:/g' -e 's/ \([^ ]*modules[^ ]*\)/ \/\1/g' $(4)/lib/modules/0.0/modules.dep > $(2)/lib/modules/modules.dep - $(hide) cp $(4)/lib/modules/0.0/modules.alias $(2)/lib/modules -endef - # ----------------------------------------------------------------- # Recovery image @@ -1836,8 +1870,6 @@ define build-recoveryimage-target # Modifying ramdisk contents... $(if $(filter true,$(BOARD_BUILD_SYSTEM_ROOT_IMAGE)),, \ $(hide) ln -sf /system/bin/init $(TARGET_RECOVERY_ROOT_OUT)/init) - $(if $(BOARD_RECOVERY_KERNEL_MODULES), \ - $(call build-image-kernel-modules,$(BOARD_RECOVERY_KERNEL_MODULES),$(TARGET_RECOVERY_ROOT_OUT),,$(call intermediates-dir-for,PACKAGING,depmod_recovery))) # Removes $(TARGET_RECOVERY_ROOT_OUT)/init*.rc EXCEPT init.recovery*.rc. $(hide) find $(TARGET_RECOVERY_ROOT_OUT) -maxdepth 1 -name 'init*.rc' -type f -not -name "init.recovery.*.rc" | xargs rm -f $(hide) cp -f $(recovery_initrc) $(TARGET_RECOVERY_ROOT_OUT)/ @@ -1909,9 +1941,7 @@ $(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTFS) $(MKBOOTIMG) $(MINIGZIP) \ $(INSTALLED_2NDBOOTLOADER_TARGET) \ $(INSTALLED_RECOVERY_BUILD_PROP_TARGET) \ $(recovery_resource_deps) \ - $(recovery_fstab) \ - $(BOARD_RECOVERY_KERNEL_MODULES) \ - $(DEPMOD) + $(recovery_fstab) $(call pretty,"Target boot image from recovery: $@") $(call build-recoveryimage-target, $@) endif # BOARD_USES_RECOVERY_AS_BOOT @@ -1939,9 +1969,7 @@ $(INSTALLED_RECOVERYIMAGE_TARGET): $(MKBOOTFS) $(MKBOOTIMG) $(MINIGZIP) \ $(INSTALLED_2NDBOOTLOADER_TARGET) \ $(INSTALLED_RECOVERY_BUILD_PROP_TARGET) \ $(recovery_resource_deps) \ - $(recovery_fstab) \ - $(BOARD_RECOVERY_KERNEL_MODULES) \ - $(DEPMOD) + $(recovery_fstab) $(call build-recoveryimage-target, $@) ifdef RECOVERY_RESOURCE_ZIP @@ -2783,8 +2811,6 @@ define build-vendorimage-target $(call create-vendor-odm-symlink) @mkdir -p $(vendorimage_intermediates) && rm -rf $(vendorimage_intermediates)/vendor_image_info.txt $(call generate-image-prop-dictionary, $(vendorimage_intermediates)/vendor_image_info.txt,vendor,skip_fsck=true) - $(if $(BOARD_VENDOR_KERNEL_MODULES), \ - $(call build-image-kernel-modules,$(BOARD_VENDOR_KERNEL_MODULES),$(TARGET_OUT_VENDOR),vendor/,$(call intermediates-dir-for,PACKAGING,depmod_vendor))) $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \ build/make/tools/releasetools/build_image.py \ $(TARGET_OUT_VENDOR) $(vendorimage_intermediates)/vendor_image_info.txt $(INSTALLED_VENDORIMAGE_TARGET) $(TARGET_OUT) @@ -2796,11 +2822,11 @@ INSTALLED_VENDORIMAGE_TARGET := $(BUILT_VENDORIMAGE_TARGET) ifdef BUILT_VENDOR_MANIFEST $(INSTALLED_VENDORIMAGE_TARGET): $(BUILT_ASSEMBLED_VENDOR_MANIFEST) endif -$(INSTALLED_VENDORIMAGE_TARGET): $(INTERNAL_USERIMAGES_DEPS) $(INTERNAL_VENDORIMAGE_FILES) $(INSTALLED_FILES_FILE_VENDOR) $(BUILD_IMAGE_SRCS) $(DEPMOD) $(BOARD_VENDOR_KERNEL_MODULES) +$(INSTALLED_VENDORIMAGE_TARGET): $(INTERNAL_USERIMAGES_DEPS) $(INTERNAL_VENDORIMAGE_FILES) $(INSTALLED_FILES_FILE_VENDOR) $(BUILD_IMAGE_SRCS) $(build-vendorimage-target) .PHONY: vendorimage-nodeps vnod -vendorimage-nodeps vnod: | $(INTERNAL_USERIMAGES_DEPS) $(DEPMOD) +vendorimage-nodeps vnod: | $(INTERNAL_USERIMAGES_DEPS) $(build-vendorimage-target) sync: $(INTERNAL_VENDORIMAGE_FILES) @@ -2989,8 +3015,6 @@ define build-odmimage-target @mkdir -p $(TARGET_OUT_ODM) @mkdir -p $(odmimage_intermediates) && rm -rf $(odmimage_intermediates)/odm_image_info.txt $(call generate-userimage-prop-dictionary, $(odmimage_intermediates)/odm_image_info.txt, skip_fsck=true) - $(if $(BOARD_ODM_KERNEL_MODULES), \ - $(call build-image-kernel-modules,$(BOARD_ODM_KERNEL_MODULES),$(TARGET_OUT_ODM),odm/,$(call intermediates-dir-for,PACKAGING,depmod_odm))) $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \ ./build/tools/releasetools/build_image.py \ $(TARGET_OUT_ODM) $(odmimage_intermediates)/odm_image_info.txt $(INSTALLED_ODMIMAGE_TARGET) $(TARGET_OUT) @@ -2999,11 +3023,11 @@ endef # We just build this directly to the install location. INSTALLED_ODMIMAGE_TARGET := $(BUILT_ODMIMAGE_TARGET) -$(INSTALLED_ODMIMAGE_TARGET): $(INTERNAL_USERIMAGES_DEPS) $(INTERNAL_ODMIMAGE_FILES) $(INSTALLED_FILES_FILE_ODM) $(BUILD_IMAGE_SRCS) $(DEPMOD) $(BOARD_ODM_KERNEL_MODULES) +$(INSTALLED_ODMIMAGE_TARGET): $(INTERNAL_USERIMAGES_DEPS) $(INTERNAL_ODMIMAGE_FILES) $(INSTALLED_FILES_FILE_ODM) $(BUILD_IMAGE_SRCS) $(build-odmimage-target) .PHONY: odmimage-nodeps onod -odmimage-nodeps onod: | $(INTERNAL_USERIMAGES_DEPS) $(DEPMOD) +odmimage-nodeps onod: | $(INTERNAL_USERIMAGES_DEPS) $(build-odmimage-target) sync: $(INTERNAL_ODMIMAGE_FILES) diff --git a/core/tasks/tools/build_custom_image.mk b/core/tasks/tools/build_custom_image.mk index 19d2ab5746..a58019e66d 100644 --- a/core/tasks/tools/build_custom_image.mk +++ b/core/tasks/tools/build_custom_image.mk @@ -54,9 +54,15 @@ $(foreach m,$(CUSTOM_IMAGE_MODULES),\ $(eval my_copy_pairs += $(bui):$(my_staging_dir)/$(my_copy_dest)))\ )) +my_kernel_module_copy_files := +my_custom_image_modules_var := BOARD_$(strip $(call to-upper,$(my_custom_image_name)))_KERNEL_MODULES +ifdef $(my_custom_image_modules_var) + my_kernel_module_copy_files += $(call build-image-kernel-modules,$(my_custom_image_modules_var),$(my_staging_dir),$(my_custom_image_name)/,$(call intermediates-dir-for,PACKAGING,depmod_$(my_custom_image_name))) +endif + # Collect CUSTOM_IMAGE_COPY_FILES. my_image_copy_files := -$(foreach f,$(CUSTOM_IMAGE_COPY_FILES),\ +$(foreach f,$(CUSTOM_IMAGE_COPY_FILES) $(my_kernel_module_copy_files),\ $(eval pair := $(subst :,$(space),$(f)))\ $(eval src := $(word 1,$(pair)))\ $(eval my_image_copy_files += $(src))\ @@ -102,11 +108,6 @@ endif ifeq (true,$(CUSTOM_IMAGE_SUPPORT_VERITY_FEC)) $(my_built_custom_image): $(FEC) endif -my_custom_image_modules_var:=BOARD_$(strip $(call to-upper,$(my_custom_image_name)))_KERNEL_MODULES -my_custom_image_modules:=$($(my_custom_image_modules_var)) -my_custom_image_modules_dep:=$(if $(my_custom_image_modules),$(my_custom_image_modules) $(DEPMOD),) -$(my_built_custom_image): PRIVATE_KERNEL_MODULES := $(my_custom_image_modules) -$(my_built_custom_image): PRIVATE_IMAGE_NAME := $(my_custom_image_name) $(my_built_custom_image): $(INTERNAL_USERIMAGES_DEPS) $(my_built_modules) $(my_image_copy_files) $(my_custom_image_modules_dep) \ $(CUSTOM_IMAGE_DICT_FILE) @echo "Build image $@" @@ -117,8 +118,6 @@ $(my_built_custom_image): $(INTERNAL_USERIMAGES_DEPS) $(my_built_modules) $(my_i $(eval pair := $(subst :,$(space),$(p)))\ mkdir -p $(dir $(word 2,$(pair)));\ cp -Rf $(word 1,$(pair)) $(word 2,$(pair));) - $(if $(PRIVATE_KERNEL_MODULES), \ - $(call build-image-kernel-modules,$(PRIVATE_KERNEL_MODULES),$(PRIVATE_STAGING_DIR),$(PRIVATE_IMAGE_NAME)/,$(call intermediates-dir-for,PACKAGING,depmod_$(PRIVATE_IMAGE_NAME)))) $(if $($(PRIVATE_PICKUP_FILES)),$(hide) cp -Rf $(PRIVATE_PICKUP_FILES) $(PRIVATE_STAGING_DIR)) # Generate the dict. $(hide) echo "# For all accepted properties, see BuildImage() in tools/releasetools/build_image.py" > $(PRIVATE_INTERMEDIATES)/image_info.txt