【问题标题】:Don't add "+" to linux kernel version不要在 linux 内核版本中添加“+”
【发布时间】:2013-10-20 11:09:50
【问题描述】:

我正在构建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

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

【问题讨论】:

  • 设置LOCALVERSION。你是在HEAD 工作,还是有一个不干净的分支?
  • 您是否考虑过构建更新的内核。 2.6.39 真的很老了。当前版本是 3.11.4 并且有很多改进(但与 2.6.x 保持兼容)
  • 找到了一个丑陋的解决方案 - 添加 LOCALVERSION= 来制作命令
  • 附加的+ 会给您带来什么困难?它有一个特定的含义,你所做的事情会导致任何在乎的人做出错误的决定。
  • “+”混淆了一些应用程序,例如“modprobe -l”在我的情况下查看 2.6.39 文件夹,没有加号。

标签: linux git linux-kernel


【解决方案1】:

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

SCMVERSION_pn-linux-imx = ""

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

【讨论】:

    【解决方案2】:

    操作脚本/setlocalversion 似乎是我唯一的方法。 在scm_version()中强制返回:

    scm_version()
    {
            local short
            short=false
            **return**
    

    【讨论】:

      【解决方案3】:

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

      touch .scmversion
      

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

      【讨论】:

        【解决方案4】:

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

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

        make LOCALVERSION=
        

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

        sed -i "s|CONFIG_LOCALVERSION_AUTO=.*|CONFIG_LOCALVERSION_AUTO=n|" .config
        

        【讨论】:

        • 我在vmlinuzinitrd.img 的末尾确实得到了一个+,但git status 说“没有什么可提交的,工作目录干净”。这是我自己的提交,+ 出现是因为我不在官方的 master 分支上吗?或者,也许因为我在本地构建了工作目录,但尽管污垢被 gitignored,但它并不干净?
        • 我不完全确定.. 你应该看看scripts/setlocalversion 并在设置+ 时看看它正在测试什么。
        • 显然,如果你的工作目录是干净的,它也会增加一个加号,但你当前的 git HEAD 没有标签。
        • 啊,但这还不是全部。我有自己的分支,标记提交,干净的工作目录,但我仍然得到 +。
        猜你喜欢
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-20
        • 2014-09-03
        相关资源
        最近更新 更多