编译kernel版本的时候有时候会多一个+号,例如4.9.0.rc3+,为什么会多一个+号呢?
根目录下makefile 会定义一些伪目标
PHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3
重点看一下prepare3
prepare3: include/config/kernel.release
根目录下makefile下会定义include/config/kernel.release 目标
include/config/kernel.release: include/config/auto.conf FORCE
$(call filechk,kernel.release)
根目录下makefile会定义filechk_kernel.release
define filechk_kernel.release
echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
endef
继续看看scripts/setlocalversion中是如增加+号的
重点代码如下,我们的情况看else情况
# scm version string if not at a tagged commit
if test "$CONFIG_LOCALVERSION_AUTO" = "y"; then
# full scm version string
res="$res$(scm_version)"
else
# append a plus sign if the repository is not in a clean
# annotated or signed tagged state (as git describe only
# looks at signed or annotated tags - git tag -a/-s) and
# LOCALVERSION= is not specified
if test "${LOCALVERSION+set}" != "set"; then
scm=$(scm_version --short)
res="$res${scm:++}"
fi
fi
根目录下makefile 会定义一些伪目标
PHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3
重点看一下prepare3
prepare3: include/config/kernel.release
根目录下makefile下会定义include/config/kernel.release 目标
include/config/kernel.release: include/config/auto.conf FORCE
$(call filechk,kernel.release)
根目录下makefile会定义filechk_kernel.release
define filechk_kernel.release
echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
endef
继续看看scripts/setlocalversion中是如增加+号的
重点代码如下,我们的情况看else情况
# scm version string if not at a tagged commit
if test "$CONFIG_LOCALVERSION_AUTO" = "y"; then
# full scm version string
res="$res$(scm_version)"
else
# append a plus sign if the repository is not in a clean
# annotated or signed tagged state (as git describe only
# looks at signed or annotated tags - git tag -a/-s) and
# LOCALVERSION= is not specified
if test "${LOCALVERSION+set}" != "set"; then
scm=$(scm_version --short)
res="$res${scm:++}"
fi
fi
可见如果定义了LOCALVERSION的话,就会在版本号后面增加+,即执行res="$res${scm:++}",所以如果不想增加+号,就不要要定义LOCALVERSION。或者直接改code为res="$res${scm:}",我就是这么做的,嘿嘿
或者直接将CONFIG_LOCALVERSION_AUTO定义成y也可以避免这种情况