嵌入式开发之内核“+”版本问题

2019-07-12 22:06发布

问题现象: 关联内核编译的软件,生成后,进行使用时提示不支持内核版本”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与交叉编译工具链冲突,屏蔽掉即可  好记性不如烂笔头