kernel: Support pixel style vendor_boot modules
Mini documentation:
List the names of boot modules in BOOT_KERNEL_MODULES to add them
to vendor_boot.
All modules still end up in their primary location (normally
vendor/lib/modules). Boot modules will be kept here as duplicates.
The list of boot modules is then depmod'ed and copied to the
vendor ramdisk.
The file modules.load is created from
BOARD_$(IMAGE)_KERNEL_MODULES_LOAD as the ordered list of modules
to be loaded form that location, either parsed by a modprobe script
or by init itself (only boot modules)
When using vendor_boot modules, vendor/lib/modules/modules.load
should list all modules but boot modules.
Also don't clear the output directory, because one might want to
push a modules.blocklist there.
Change-Id: I89a4aad42a6585a572812f1d7e89f5d78931e1e6
diff --git a/build/tasks/kernel.mk b/build/tasks/kernel.mk
index abc6d98..0e17fd8 100644
--- a/build/tasks/kernel.mk
+++ b/build/tasks/kernel.mk
@@ -176,6 +176,9 @@
endif
MODULES_INTERMEDIATES := $(KERNEL_BUILD_OUT_PREFIX)$(call intermediates-dir-for,PACKAGING,kernel_modules)
+KERNEL_VENDOR_RAMDISK_DEPMOD_STAGING_DIR := $(KERNEL_BUILD_OUT_PREFIX)$(call intermediates-dir-for,PACKAGING,depmod_vendor_ramdisk)
+$(INTERNAL_VENDOR_RAMDISK_TARGET): $(TARGET_PREBUILT_INT_KERNEL)
+
# Add host bin out dir to path
PATH_OVERRIDE := PATH=$(KERNEL_BUILD_OUT_PREFIX)$(HOST_OUT_EXECUTABLES):$$PATH
ifeq ($(TARGET_KERNEL_CLANG_COMPILE),true)
@@ -239,9 +242,9 @@
# $(2): output dir
# $(3): mount point
# $(4): staging dir
+# $(5): module load list
# Depmod requires a well-formed kernel version so 0.0 is used as a placeholder.
define build-image-kernel-modules-omnirom
- rm -rf $(2)/lib/modules
mkdir -p $(2)/lib/modules
cp $(1) $(2)/lib/modules/
rm -rf $(4)
@@ -249,7 +252,12 @@
cp $(1) $(4)/lib/modules/0.0/$(3)lib/modules
$(DEPMOD) -b $(4) 0.0
sed -e 's/\(.*modules.*\):/\/\1:/g' -e 's/ \([^ ]*modules[^ ]*\)/ \/\1/g' $(4)/lib/modules/0.0/modules.dep > $(2)/lib/modules/modules.dep
+ cp $(4)/lib/modules/0.0/modules.softdep $(2)/lib/modules
cp $(4)/lib/modules/0.0/modules.alias $(2)/lib/modules
+ rm -f $(2)/lib/modules/modules.load
+ for MODULE in $(5); do \
+ basename $$MODULE >> $(2)/lib/modules/modules.load; \
+ done
endef
$(KERNEL_OUT):
@@ -292,7 +300,15 @@
$(eval p := $(subst :,$(space),$(s))) \
; mv $$(find $$kernel_modules_dir -name $(word 1,$(p))) $$kernel_modules_dir/$(word 2,$(p))); \
modules=$$(find $$kernel_modules_dir -type f -name '*.ko'); \
- ($(call build-image-kernel-modules-omnirom,$$modules,$(KERNEL_MODULES_OUT),$(KERNEL_MODULE_MOUNTPOINT)/,$(KERNEL_DEPMOD_STAGING_DIR))); \
+ ($(call build-image-kernel-modules-omnirom,$$modules,$(KERNEL_MODULES_OUT),$(KERNEL_MODULE_MOUNTPOINT)/,$(KERNEL_DEPMOD_STAGING_DIR),$(BOARD_VENDOR_KERNEL_MODULES_LOAD))); \
+ $(if $(BOOT_KERNEL_MODULES),\
+ vendor_boot_modules=$$(for m in $(BOOT_KERNEL_MODULES); do \
+ p=$$(find $$kernel_modules_dir -type f -name $$m); \
+ if [ -n "$$p" ]; then echo $$p; else echo "ERROR: $$m from BOOT_KERNEL_MODULES was not found" 1>&2 && exit 1; fi; \
+ done); \
+ [ $$? -ne 0 ] && exit 1; \
+ ($(call build-image-kernel-modules-omnirom,$$vendor_boot_modules,$(TARGET_VENDOR_RAMDISK_OUT),/,$(KERNEL_VENDOR_RAMDISK_DEPMOD_STAGING_DIR),$(BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD))); \
+ ) \
fi
.PHONY: kerneltags