kernel编译时对svn版本的检查

背景:
1.使用svn管理下的kernel源码,在编译完安装的时候会生成一个带有“+”的字符串,用来表示版本号;
2.使用不在svn管理下的kernel源码,在编译完安装的时候会生成一个不带有”+”的字符串。

问题:
我使用在svn管理下的kernel源码编译kernel和ko文件,然后把ko加载到不在svn管理下的kernel的系统中,就遇到了提示:说ko应该是加载到带有“+”的kernel版本中,但是现在的kernel不带有“+”。
看起来有点绕,不过意思应该已经表明了。

解决:
1.首先发现这个是否带有“+”的现象是由于使用了在svn管理下和不在svn管理下的两个版本引起的。
2.偷懒了,没有直接紧跟看代码,而是去网上搜了。于是搜到了:
https://blog.csdn.net/adaptiver/article/details/7225980 和类似的帖子。
文章很有用,为我指明了方向。然后跟着文章看了一遍确认是版本号引起的,然后回去看一下scripts/setlocalversion的实现,最终找到了问题。其实两份kernel是一模一行的,唯一的区别就是一个svn管理的,另一个是用cp从前者复制出来的。
具体问题出现在:

159 # scm version string if not at a tagged commit
160 if test "$CONFIG_LOCALVERSION_AUTO" = "y"; then
161   # full scm version string
162   res="$res$(scm_version)"
163 else
164   # append a plus sign if the repository is not in a clean
165   # annotated or signed tagged state (as git describe only
166   # looks at signed or annotated tags - git tag -a/-s) and
167   # LOCALVERSION= is not specified
168   if test "${LOCALVERSION+set}" != "set"; then
169     scm=$(scm_version --short)
170     res="$res${scm:++}"
171   fi
172 fi
173 

虽然没在svn管理下的版本也进入了170行,但是scm这个变量的值是空的,因为它调用scm_version的时候不能获取svn到的版本号,所以res的值就没有“+”。

解决的方法就是先在svn管理下的kernel中用:

$(srctree)/scripts/setlocalversion --save-scmversion

生成一个.scmversion的隐藏文件,里面会记录svn的版本号。
然后把这个文件也一起复制到不在svn管理下的源码中,再编译它就会生成带有“+”的版本号了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值