问题现象:
关联内核编译的软件,生成后,进行使用时提示不支持内核版本”xxx+”
分析原因:
查看内核代码顶层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会添加“+”号
git参数:
git rev-parse
将各种引用表示法转换为哈希值等
git describe
通过TAG直观地显示提交ID
–show-cdup: 显示从当前目录后退到工作区的根的深度
--verify:验证提供一个确切的参数,并且它可以变成原20字节的SHA-1可用于访问对象数据库。如果是的话,将其发送到标准输出;否则,出错。
HEAD:当前分支的位置指针
--short:简短格式
describe:tag
哈希算法将任意长度的
二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上来说基本上是不可能的。
程序目的:
当前仓库的版本是一个本地版本,则加一个加号,来标识此版本并非标准tag版本。
当前仓库的版本是一个tag版本,但是文件被修改了,则加一个加号,来标识此版本并非标准tag版本。
问题解决:
将scripts/setlocalversion脚本中带有’ echo “+” ‘和’ res=”$res${scm:++}” ‘的这两行删掉即可。
//---------------------------------------------------------------------------------------------------------------------
问题2现象:
/home/liuzhengwu/share2/HISI/front_bsp/Bootloader/Hi3519/u-boot-2010.06/include/linux/types.h:154:36: error: conflicting types for ‘uintmax_t’
typedef u_int32_t uintmax_t;
^
In file included from /opt/hisi-linux/x86-arm/arm-hisiv600-linux/lib/gcc/arm-hisiv600-linux-gnueabi/4.9.4/include/stdint.h:9:0,
from /opt/hisi-linux/x86-arm/arm-hisiv600-linux/target/usr/include/mtd/mtd-user.h:23,
from fw_env.c:43:
/opt/hisi-linux/x86-arm/arm-hisiv600-linux/target/usr/include/stdint.h:140:32: note: previous declaration of ‘uintmax_t’ was here
typedef unsigned long long int uintmax_t;
^
make[1]: *** [fw_printenv] Error 1
make[1]: Leaving directory `/home/liuzhengwu/share2/HISI/front_bsp/Bootloader/Hi3519/u-boot-2010.06/tools/env'
make: *** [env] Error 1
问题解决:
vi /home/liuzhengwu/share2/HISI/front_bsp/Bootloader/Hi3519/u-boot-2010.06/include/linux/types.h +154
uintmax_t、quad_t与交叉编译工具链冲突,屏蔽掉即可
好记性不如烂笔头