Chinaunix首页 | 论坛 | 博客
  • 博客访问: 304773
  • 博文数量: 66
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 509
  • 用 户 组: 普通用户
  • 注册时间: 2015-04-29 13:56
文章分类
文章存档

2018年(2)

2017年(6)

2016年(34)

2015年(24)

我的朋友

分类: LINUX

2018-01-11 10:19:58

最近编译内核,之前2年多时间,一直生成的版本是
socfpga 3.10.31-ltsi-04995-g339abcb-dirty

但是最近服务器环境被配置后,内核版本变成了
socfpga 3.10.31-ltsi-04995-g339abcbf65f-dirty

由于uname -r的值变了,导致从旧版本升级新版本时候, 老版本的ko不能正常加载和卸载

这个问题当时感觉非常奇怪,后来研究了Linux内核版本后,发现了内核版本号依赖于git commit的id, g339abcb/g339abcbf65f正是git的commit id

而这2次变化之间,我在服务器升级了git,从1.7.9.5升级到了2.7.4

在内核目录通过git rev-parse HEAD 
 LD [M]  drivers/char/hw_random/rng-core.ko
host@ubuntu:~/kernel/linux-socfpga$ git rev-parse HEAD
339abcbf65f3c76e4db58e645011a3f87f946e14
host@ubuntu:~/kernel/linux-socfpga$ git reflog
339abcb HEAD@{0}: checkout: moving from master to socfpga-3.10-ltsi
6d87c22 HEAD@{1}: checkout: moving from socfpga-3.10-ltsi to master
6d87c22 HEAD@{2}: checkout: moving from master to socfpga-3.10-ltsi
6d87c22 HEAD@{3}: checkout: moving from master to master
6d87c22 HEAD@{4}: clone: from git://git.rocketboards.org/linux-socfpga.git

git 1.7.9.5查看Log显示是339abcd

而git 2.7.4时候,
host@ubuntu:~/kernel/linux-socfpga$ git rev-parse HEAD
339abcbf65f3c76e4db58e645011a3f87f946e14
host@ubuntu:~/kernel/linux-socfpga$ git reflog
339abcbf65f  HEAD@{0}: checkout: moving from master to socfpga-3.10-ltsi


编译内核的时候,SETLOCALVERSION

2.1. 如果定义了CONFIG_LOCALVERSION_AUTO(CONFIG_LOCALVERSION_AUTO=y)

此时会执行第一个if下的脚本。执行res="$res$(scm_version)"
如果代码属于git管理:
打了tag,则会添加tag相关字符;
没有打tag,则会添加log相加字符,例如最新的commit是
commit cdebe039ded3e7fcd00c6e5603a878b14d7e564e
则编译之后文件include/config/kernel.release的内容为2.6.35.7-gcdebe03



所以这个问题是由于git版本变了,导致通过git命令获取commit id的值变化了,从而内核版本号发生了变化
阅读(1785) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~