From 897439b64d08c30f63ea8ba4135edd0ea73d3de0 Mon Sep 17 00:00:00 2001 From: Will McVicker Date: Thu, 9 Jul 2020 15:33:45 -0700 Subject: [PATCH] ANDROID: update the kernel release format for GKI The new kernel release format is: w.x.y-zz-k where, w.x.y are the current values zzz is the Android Release value k is the KMI Generation number This allows one to identify the kernel module interface version using `uname -r`. The KMI Generation number is used to identify any KMI changes that occur after the KMI freeze. This should only occur in an unlikely event that a security patch requires a KMI update. Here is a local example: 5.4.51-android12-0-00153-ga972f59040e4-dirty Signed-off-by: Will McVicker Bug: 159842160 Change-Id: I33f40e424ca967b85d810cdb12c6a2c58e4197b7 [willmcvicker: squash with commit 0c0d417747d8e289b2808c3fca32c845f82fd5e5] --- Makefile | 6 ++++-- build.config.common | 1 + scripts/setlocalversion | 26 +++++++++++++++++++++++++- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index b7fd7f82d73a..62728698f96f 100644 --- a/Makefile +++ b/Makefile @@ -1149,7 +1149,8 @@ $(vmlinux-dirs): prepare scripts $(Q)$(MAKE) $(build)=$@ need-builtin=1 define filechk_kernel.release - echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))" + echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion \ + $(srctree) $(BRANCH) $(KMI_GENERATION))" endef # Store (new) KERNELRELEASE string in include/config/kernel.release @@ -1741,7 +1742,8 @@ checkstack: $(PERL) $(src)/scripts/checkstack.pl $(CHECKSTACK_ARCH) kernelrelease: - @echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))" + @echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion \ + $(srctree) $(BRANCH) $(KMI_GENERATION))" kernelversion: @echo $(KERNELVERSION) diff --git a/build.config.common b/build.config.common index cd2449e84037..0c20768c2301 100644 --- a/build.config.common +++ b/build.config.common @@ -1,4 +1,5 @@ BRANCH=android-4.19-stable +KMI_GENERATION=0 KERNEL_DIR=common CC=clang diff --git a/scripts/setlocalversion b/scripts/setlocalversion index 365b3c2b8f43..081013eb0d5e 100755 --- a/scripts/setlocalversion +++ b/scripts/setlocalversion @@ -11,12 +11,14 @@ # usage() { - echo "Usage: $0 [--save-scmversion] [srctree]" >&2 + echo "Usage: $0 [--save-scmversion] [srctree] [branch] [kmi-generation]" >&2 exit 1 } scm_only=false srctree=. +android_release= +kmi_generation= if test "$1" = "--save-scmversion"; then scm_only=true shift @@ -25,6 +27,24 @@ if test $# -gt 0; then srctree=$1 shift fi +if test $# -gt 0; then + # Extract the Android release version. If there is no match, then return 255 + # and clear the var $android_release + android_release=`echo "$1" | sed -e '/android[0-9]\{2,\}/!{q255}; \ + s/^\(android[0-9]\{2,\}\)-.*/\1/'` + if test $? -ne 0; then + android_release= + fi + shift + + if test $# -gt 0; then + kmi_generation=$1 + [ $(expr $kmi_generation : '^[0-9]\+$') -eq 0 ] && usage + shift + else + usage + fi +fi if test $# -gt 0 -o ! -d "$srctree"; then usage fi @@ -47,6 +67,10 @@ scm_version() if test -z "$(git rev-parse --show-cdup 2>/dev/null)" && head=`git rev-parse --verify --short HEAD 2>/dev/null`; then + if [ -n "$android_release" ] && [ -n "$kmi_generation" ]; then + printf '%s' "-$android_release-$kmi_generation" + fi + # If we are at a tagged commit (like "v2.6.30-rc6"), we ignore # it, because this version is defined in the top level Makefile. if [ -z "`git describe --exact-match 2>/dev/null`" ]; then