42

我正在构建linux内核,如果我的内核在git下,那么每次内核版本都是:

Image Name:   Linux-2.6.39+

如果我不使用 git,那么一切都很好,最后没有任何加号。

我知道这是由 scripts/setlocalversion 脚本完成的:

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

那么,是否有可能无需更改代码来构建不需要在版本行末尾添加“+”的系统?

4

4 回答 4

38

版本字符串末尾的加号表示内核是从修改过的源构建的(即存在未提交的更改)。中的评论也表明了这一点scripts/setlocalversion

为了避免在工作目录脏的情况下附加“+”,只需在运行时显式设置 LOCALVERSION make

make LOCALVERSION=

CONFIG_LOCALVERSION_AUTO在构建之前,您可能还必须n在内核配置 ( )中更改配置选项.config

sed -i "s|CONFIG_LOCALVERSION_AUTO=.*|CONFIG_LOCALVERSION_AUTO=n|" .config
于 2014-01-12T18:37:54.540 回答
27

为防止脚本scripts/setlocalversion将 附加到内核本地版本的末尾,请在内核源的根目录中+创建一个空文件。.scmversion

touch .scmversion

这样,您就可以将 LOCALVERSION 保留在内核配置文件中,以防您想将本地签名附加到内核名称。

于 2015-09-21T16:17:20.663 回答
0

如果您使用 yocto 和 imx soc,请将此行添加到 local.conf

SCMVERSION_pn-linux-imx = ""

在 imx-4.9.88-2.0.0_ga 版本上测试

于 2018-09-26T14:16:59.177 回答
0

操作 scripts/setlocalversion 似乎是我唯一的方法。强制返回scm_version()

scm_version()
{
        local short
        short=false
        **return**
于 2018-01-09T06:09:36.083 回答