162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci# ========================================================================== 362306a36Sopenharmony_ci# Installing modules 462306a36Sopenharmony_ci# ========================================================================== 562306a36Sopenharmony_ci 662306a36Sopenharmony_ciPHONY := __modinst 762306a36Sopenharmony_ci__modinst: 862306a36Sopenharmony_ci 962306a36Sopenharmony_ciinclude include/config/auto.conf 1062306a36Sopenharmony_ciinclude $(srctree)/scripts/Kbuild.include 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ciinstall-y := 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ciifeq ($(KBUILD_EXTMOD)$(sign-only),) 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci# remove the old directory and symlink 1762306a36Sopenharmony_ci$(shell rm -fr $(MODLIB)/kernel $(MODLIB)/build) 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ciinstall-$(CONFIG_MODULES) += $(addprefix $(MODLIB)/, build modules.order) 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci$(MODLIB)/build: FORCE 2262306a36Sopenharmony_ci $(call cmd,symlink) 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ciquiet_cmd_symlink = SYMLINK $@ 2562306a36Sopenharmony_ci cmd_symlink = ln -s $(CURDIR) $@ 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci$(MODLIB)/modules.order: modules.order FORCE 2862306a36Sopenharmony_ci $(call cmd,install_modorder) 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ciquiet_cmd_install_modorder = INSTALL $@ 3162306a36Sopenharmony_ci cmd_install_modorder = sed 's:^\(.*\)\.o$$:kernel/\1.ko:' $< > $@ 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci# Install modules.builtin(.modinfo) even when CONFIG_MODULES is disabled. 3462306a36Sopenharmony_ciinstall-y += $(addprefix $(MODLIB)/, modules.builtin modules.builtin.modinfo) 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci$(addprefix $(MODLIB)/, modules.builtin modules.builtin.modinfo): $(MODLIB)/%: % FORCE 3762306a36Sopenharmony_ci $(call cmd,install) 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ciendif 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_cimodules := $(call read-file, $(MODORDER)) 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ciifeq ($(KBUILD_EXTMOD),) 4462306a36Sopenharmony_cidst := $(MODLIB)/kernel 4562306a36Sopenharmony_cielse 4662306a36Sopenharmony_ciINSTALL_MOD_DIR ?= updates 4762306a36Sopenharmony_cidst := $(MODLIB)/$(INSTALL_MOD_DIR) 4862306a36Sopenharmony_ciendif 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci$(foreach x, % :, $(if $(findstring $x, $(dst)), \ 5162306a36Sopenharmony_ci $(error module installation path cannot contain '$x'))) 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_cisuffix-y := 5462306a36Sopenharmony_cisuffix-$(CONFIG_MODULE_COMPRESS_GZIP) := .gz 5562306a36Sopenharmony_cisuffix-$(CONFIG_MODULE_COMPRESS_XZ) := .xz 5662306a36Sopenharmony_cisuffix-$(CONFIG_MODULE_COMPRESS_ZSTD) := .zst 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_cimodules := $(patsubst $(extmod_prefix)%.o, $(dst)/%.ko$(suffix-y), $(modules)) 5962306a36Sopenharmony_ciinstall-$(CONFIG_MODULES) += $(modules) 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci__modinst: $(install-y) 6262306a36Sopenharmony_ci @: 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci# 6562306a36Sopenharmony_ci# Installation 6662306a36Sopenharmony_ci# 6762306a36Sopenharmony_ciquiet_cmd_install = INSTALL $@ 6862306a36Sopenharmony_ci cmd_install = cp $< $@ 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci# Strip 7162306a36Sopenharmony_ci# 7262306a36Sopenharmony_ci# INSTALL_MOD_STRIP, if defined, will cause modules to be stripped after they 7362306a36Sopenharmony_ci# are installed. If INSTALL_MOD_STRIP is '1', then the default option 7462306a36Sopenharmony_ci# --strip-debug will be used. Otherwise, INSTALL_MOD_STRIP value will be used 7562306a36Sopenharmony_ci# as the options to the strip command. 7662306a36Sopenharmony_ciifdef INSTALL_MOD_STRIP 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ciifeq ($(INSTALL_MOD_STRIP),1) 7962306a36Sopenharmony_cistrip-option := --strip-debug 8062306a36Sopenharmony_cielse 8162306a36Sopenharmony_cistrip-option := $(INSTALL_MOD_STRIP) 8262306a36Sopenharmony_ciendif 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_ciquiet_cmd_strip = STRIP $@ 8562306a36Sopenharmony_ci cmd_strip = $(STRIP) $(strip-option) $@ 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_cielse 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ciquiet_cmd_strip = 9062306a36Sopenharmony_ci cmd_strip = : 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ciendif 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci# 9562306a36Sopenharmony_ci# Signing 9662306a36Sopenharmony_ci# Don't stop modules_install even if we can't sign external modules. 9762306a36Sopenharmony_ci# 9862306a36Sopenharmony_ciifeq ($(filter pkcs11:%, $(CONFIG_MODULE_SIG_KEY)),) 9962306a36Sopenharmony_cisig-key := $(if $(wildcard $(CONFIG_MODULE_SIG_KEY)),,$(srctree)/)$(CONFIG_MODULE_SIG_KEY) 10062306a36Sopenharmony_cielse 10162306a36Sopenharmony_cisig-key := $(CONFIG_MODULE_SIG_KEY) 10262306a36Sopenharmony_ciendif 10362306a36Sopenharmony_ciquiet_cmd_sign = SIGN $@ 10462306a36Sopenharmony_ci cmd_sign = scripts/sign-file $(CONFIG_MODULE_SIG_HASH) "$(sig-key)" certs/signing_key.x509 $@ \ 10562306a36Sopenharmony_ci $(if $(KBUILD_EXTMOD),|| true) 10662306a36Sopenharmony_ci 10762306a36Sopenharmony_ciifeq ($(sign-only),) 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_ci# During modules_install, modules are signed only when CONFIG_MODULE_SIG_ALL=y. 11062306a36Sopenharmony_ciifndef CONFIG_MODULE_SIG_ALL 11162306a36Sopenharmony_ciquiet_cmd_sign := 11262306a36Sopenharmony_ci cmd_sign := : 11362306a36Sopenharmony_ciendif 11462306a36Sopenharmony_ci 11562306a36Sopenharmony_ci# Create necessary directories 11662306a36Sopenharmony_ci$(foreach dir, $(sort $(dir $(install-y))), $(shell mkdir -p $(dir))) 11762306a36Sopenharmony_ci 11862306a36Sopenharmony_ci$(dst)/%.ko: $(extmod_prefix)%.ko FORCE 11962306a36Sopenharmony_ci $(call cmd,install) 12062306a36Sopenharmony_ci $(call cmd,strip) 12162306a36Sopenharmony_ci $(call cmd,sign) 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ciifdef CONFIG_MODULES 12462306a36Sopenharmony_ci__modinst: depmod 12562306a36Sopenharmony_ci 12662306a36Sopenharmony_ciPHONY += depmod 12762306a36Sopenharmony_cidepmod: $(install-y) 12862306a36Sopenharmony_ci $(call cmd,depmod) 12962306a36Sopenharmony_ci 13062306a36Sopenharmony_ciquiet_cmd_depmod = DEPMOD $(MODLIB) 13162306a36Sopenharmony_ci cmd_depmod = $(srctree)/scripts/depmod.sh $(KERNELRELEASE) 13262306a36Sopenharmony_ciendif 13362306a36Sopenharmony_ci 13462306a36Sopenharmony_cielse 13562306a36Sopenharmony_ci 13662306a36Sopenharmony_ci$(dst)/%.ko: FORCE 13762306a36Sopenharmony_ci $(call cmd,sign) 13862306a36Sopenharmony_ci 13962306a36Sopenharmony_ciendif 14062306a36Sopenharmony_ci 14162306a36Sopenharmony_ci# 14262306a36Sopenharmony_ci# Compression 14362306a36Sopenharmony_ci# 14462306a36Sopenharmony_ciquiet_cmd_gzip = GZIP $@ 14562306a36Sopenharmony_ci cmd_gzip = $(KGZIP) -n -f $< 14662306a36Sopenharmony_ciquiet_cmd_xz = XZ $@ 14762306a36Sopenharmony_ci cmd_xz = $(XZ) --check=crc32 --lzma2=dict=1MiB -f $< 14862306a36Sopenharmony_ciquiet_cmd_zstd = ZSTD $@ 14962306a36Sopenharmony_ci cmd_zstd = $(ZSTD) -T0 --rm -f -q $< 15062306a36Sopenharmony_ci 15162306a36Sopenharmony_ci$(dst)/%.ko.gz: $(dst)/%.ko FORCE 15262306a36Sopenharmony_ci $(call cmd,gzip) 15362306a36Sopenharmony_ci 15462306a36Sopenharmony_ci$(dst)/%.ko.xz: $(dst)/%.ko FORCE 15562306a36Sopenharmony_ci $(call cmd,xz) 15662306a36Sopenharmony_ci 15762306a36Sopenharmony_ci$(dst)/%.ko.zst: $(dst)/%.ko FORCE 15862306a36Sopenharmony_ci $(call cmd,zstd) 15962306a36Sopenharmony_ci 16062306a36Sopenharmony_ciPHONY += FORCE 16162306a36Sopenharmony_ciFORCE: 16262306a36Sopenharmony_ci 16362306a36Sopenharmony_ci.PHONY: $(PHONY) 164