/lib/modules/version和/lib/modules/version+(加号)有什么区别?



谁知道/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 kernelversionmake -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+"。

教程

  1. 我们需要做的第一件事是确保我们有一个git注释标签,以避免'+'。使用
git tag -a mytag -m 'Commenting about this tag'

现在./scripts/setlocalversion可以不返回任何值(空)。

  1. 开启.config的自动补码。
CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
  1. 用你想要的后缀(如果你想要任何)创建一个文件.scmversion
echo 'mysuffix' > .scmversion

现在用make -s kernelrelease再次检查。它有望被解决:)

最新更新