• 嵌入式Linux之“+”版本问题


    A问题:

      关联内核编译的软件,生成后,进行使用时提示不支持内核版本xxx+

    A解决:

      1)分析原因:

        查看内核代码顶层Makefile

          scripts/setlocalversion

        如果定义了CONFIG_LOCALVERSION_AUTO,则会执行res="$res$(scm_version)"

        如果如果${LOCALVERSION+set}不等于set,则会执行scm=$(scm_version --short);res=”$res${scm;++}”

        此处因为两个变量都没指定,所以执行scm=$(scm_version --short);res=”$res${scm;++}”

        res=”$res${scm;++}含义:如果scm未定义,即scm_version --short没有返回值,则re追加默认值加号,第二个加号为默认值

        最后打印${res}${CONFIG_LOCALVERSION}${LOCALVERSION}+

        因为调用scm_version函数时,带参--short,所以short=true

        此处内核没有配置CONFIG_LOCALVERSION_AUTO,所以执行else

        因为没有配置LOCALVERSION,所以执行if下的脚本scm=$(scm_version --short),在函数scm_version --short里,如果传入参数short会添加“+”号

        2)git参数:

    git rev-parse

    将各种引用表示法转换为哈希值等

    git describe

    通过TAG直观地显示提交ID

     

          –show-cdup 显示从当前目录后退到工作区的根的深度

          --verify验证提供一个确切的参数,并且它可以变成原20字节的SHA-1可用于访问对象数据库。如果是的话,将其发送到标准输出;否则,出错。

          HEAD当前分支的位置指针

          --short简短格式

          describetag

          哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上来说基本上是不可能的。

        3)程序目的:

          当前仓库的版本是一个本地版本,则加一个加号,来标识此版本并非标准tag版本。

          当前仓库的版本是一个tag版本,但是文件被修改了,则加一个加号,来标识此版本并非标准tag版本。

        4)解决方法:

          将scripts/setlocalversion脚本中带有’ echo +” ‘和’ res=$res${scm:++}” ‘的这两行删掉即可。

  • 相关阅读:
    【习题整理】分块+莫队(未完待续)
    【bzoj4198】【Noi2015】荷马史诗
    【bzoj2006】【NOI2015】超级钢琴
    【bzoj1029】【JSOI2007】建筑抢修
    【bzoj1483】【HNOI2009】梦幻布丁
    【bzoj4195】【NOI2015】程序自动分析
    Rearrangement inequality
    hdu1047
    hdu1046
    hdu1045
  • 原文地址:https://www.cnblogs.com/pokerface/p/7163175.html
Copyright © 2020-2023  润新知