谁知道/lib/modules/version和/lib/modules/version+(加号)例如/lib/modules/3.4.61和/lib/modules/3.4.61 +。
对不起,我的英语和Linux都很弱(我是新手)。
首先,您需要了解和之间的区别和.版本是一个包含三个字段的值,比如v5.0.1。对于同一个版本,我们可以有不同的选择,尤其是在开发阶段。
作为一个真实的例子:Linus现在正在发布Linux v6.0.0。在推出之前,他制作了许多6.0.0测试版本,我们称之为发行候选版本。
他将每个候选版本发布为v6.0.0rc2,然后是v6.0.0rc3,并不断增加。版本前缀保持不变,它只改变了版本后缀(rcN)。当它足够好时,我们发布"官方"v6.0.0。release是一种版本的版本。这是一个非常特殊的时刻/提交。
我们可以使用make -s kernelversion
和make -s kernelrelease
检查版本和释放字符串。kernelrelease就是kernelversion的连接。带有release后缀。
Kernelversion是从文件./Makefile
中提取的,从它的第一行:
# SPDX-License-Identifier: GPL-2.0
VERSION = 6
PATCHLEVEL = 0
SUBLEVEL = 0
EXTRAVERSION =
Kernelversion就是前面三个用'.'分隔的值。
让我们看看./scripts/setlocalversion
算法,他是告诉它的释放后缀的家伙:
if [ -z "$(git describe --exact-match 2>/dev/null)" ]; then
...
if $short; then
echo "+"
return
fi
...
fi
注意他检查git describe
,如果它没有返回一个带注释的标签,它将返回"+"这意味着,如果版本是"6.0.0",它将变成"6.0.0+"。
教程
- 我们需要做的第一件事是确保我们有一个git注释标签,以避免'+'。使用
git tag -a mytag -m 'Commenting about this tag'
现在./scripts/setlocalversion
可以不返回任何值(空)。
- 开启
.config
的自动补码。
CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
- 用你想要的后缀(如果你想要任何)创建一个文件
.scmversion
echo 'mysuffix' > .scmversion
现在用make -s kernelrelease
再次检查。它有望被解决:)