[PATCH] scripts: add generic install.sh

From: Masahiro Yamada
Date: Tue Aug 24 2021 - 12:51:01 EST


Many architectures has a similar install.sh script.

The first half is really generic; ensures the kernel image and the map
file exist, then invokes ~/bin/${INSTALLKERNEL} or /sbin/${INSTALLKERNEL}
if available.

The second half is kind of arch-specific. It just copies the kernel image
and map file to the destination, but the code is slightly different.
(Maybe, this part can be consolidated as well if we want).

This patch factors out the generic part into scripts/install.sh, which
will architectures to drop the duplicated code.

Signed-off-by: Masahiro Yamada <masahiroy@xxxxxxxxxx>
---

Makefile | 8 ++++++++
scripts/install.sh | 43 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 51 insertions(+)
create mode 100755 scripts/install.sh

diff --git a/Makefile b/Makefile
index 185ce47d6734..725eadc4fcb8 100644
--- a/Makefile
+++ b/Makefile
@@ -1325,6 +1325,14 @@ scripts_unifdef: scripts_basic

install: sub_make_done :=

+# Install $(KBUILD_IMAGE) by default.
+# If necessary, override install-image per target.
+install-image = $(KBUILD_IMAGE)
+
+quiet_cmd_install = INSTALL $(INSTALL_PATH)
+ cmd_install = scripts/install.sh $(KERNELRELEASE) $(install-image) \
+ System.map "$(INSTALL_PATH)"
+
# ---------------------------------------------------------------------------
# Tools

diff --git a/scripts/install.sh b/scripts/install.sh
new file mode 100755
index 000000000000..6ac0e0c0f078
--- /dev/null
+++ b/scripts/install.sh
@@ -0,0 +1,43 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# This file is subject to the terms and conditions of the GNU General Public
+# License. See the file "COPYING" in the main directory of this archive
+# for more details.
+#
+# Copyright (C) 1995 by Linus Torvalds
+#
+# Adapted from code in arch/i386/boot/Makefile by H. Peter Anvin
+#
+# Arguments:
+# $1 - kernel version
+# $2 - kernel image file
+# $3 - kernel map file
+# $4 - default install path (blank if root directory)
+
+verify () {
+ if [ ! -f "$1" ]; then
+ echo >&2
+ echo >&2 " *** Missing file: $1"
+ echo >&2 ' *** You need to run "make" before "make install".'
+ echo >&2
+ exit 1
+ fi
+}
+
+# Make sure the files actually exist
+verify "$2"
+verify "$3"
+
+# User/arch may have a custom install script
+
+for script in "~/bin/${INSTALLKERNEL}" "/sbin/${INSTALLKERNEL}" \
+ "arch/${SRCARCH}/install.sh" "arch/${SRCARCH}/boot/install.sh"
+do
+ if [ -x "${script}" ]; then
+ exec "${script}" "$@"
+ fi
+done
+
+echo "No install script found" >&2
+exit 1
--
2.30.2