“+”版本问题

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:++}” ‘的这两行删掉即可。

posted @ 2017-07-13 21:14  扑克face  阅读(221)  评论(0编辑  收藏  举报