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:简短格式
describe:tag
哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上来说基本上是不可能的。
3)程序目的:
当前仓库的版本是一个本地版本,则加一个加号,来标识此版本并非标准tag版本。
当前仓库的版本是一个tag版本,但是文件被修改了,则加一个加号,来标识此版本并非标准tag版本。
4)解决方法:
将scripts/setlocalversion脚本中带有’ echo “+” ‘和’ res=”$res${scm:++}” ‘的这两行删掉即可。