转载说明:你可能想不到,是git管理的“问题”,看下面的解析,对于u-boot也是有同样的效果。

问题解决方案:

1.删除.git目录

2.去掉CONFIG_LOCALVERSION_AUTO且将LOCALVERSION变量空。

1.   引子

编译2.6.35.7 kernel版本的时候发现,“2.6.35.7“的内核版本编译成功后生成的版本号变成了“2.6.35.7+”,为什么后面会多一个加号呢?问题出现在linux的版本控制这一块:

打开Makefile我们可以在文件的最上面可以发现

VERSION = 2

PATCHLEVEL = 6

SUBLEVEL = 35

EXTRAVERSION = .7

NAME = Yokohama

这些就是告诉我们内核版本的版本号,生成出来的版本号理论上不应带+号,但为什么带+号呢

include/config/kernel.release文件是生成的带有版本号的文件,该文件由内核顶层Makefile的如下脚本处理:

# Store (new) KERNELRELASE string in include/config/kernel.release

include/config/kernel.release: include/config/auto.conf FORCE

$(Q)rm -f $@

$(Q)echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))" > $@

使用scripts/setlocalversion工具来生成include/config/kernel.release。“+”号就是在调用这个脚本时添加的。

阅读scripts/setlocalversion文件,并查阅资料,做如下笔记:

2.   为何会添加“+”号

在scripts/setlocalversion文件中有这么一段

# scm version string if not at a tagged commit

if test "$CONFIG_LOCALVERSION_AUTO" = "y"; then

# full scm version string

res="$res$(scm_version)"

else

# apped a plus sign if the repository is not in a clean tagged

# state and  LOCALVERSION= is not specified

if test "${LOCALVERSION+set}" != "set"; then

scm=$(scm_version --short)

res="$res${scm:++}"

fi

fi

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

2.2. 如果没有定义了CONFIG_LOCALVERSION_AUTO。

此时会执行else下的脚本。

A. 如果没有定义LOCALVERSION,版本号后面会添加“+”号:执行else里的if下的脚本scm=$(scm_version --short),在函数scm_version --short里,如果传入参数short会添加“+”号,

if $short; then

echo "+"

return

fi

B. 定义了LOCALVERSION则不会执行else里if所在的脚本,从而不会在后面添加“+”号。

C. LOCALVERSION变量可在命令行定义:

make LOCALVERSION=.88 include/config/kernel.release

或者添加为环境变量。

如果既不想添加字符,又不想有“+”号:不定义CONFIG_LOCALVERSION_AUTO,将LOCALVERSION变量定义为空:LOCALVERSION=

3.   往版本号里添加字符的方式

在scripts/setlocalversion文件中还有有这么一段:

# localversion* files in the build and source directory

res="$(collect_files localversion*)"

if test ! "$srctree" -ef .; then

res="$res$(collect_files "$srctree"/localversion*)"

fi

# CONFIG_LOCALVERSION and LOCALVERSION (if set)

res="${res}${CONFIG_LOCALVERSION}${LOCALVERSION}"

由此可看出,如果想往版本号里添加字符,有几种方式:

1. 使用LOCALVERSION变量(或者在命令行,或者添加为环境变量)

2. 在linux-2.6.35目录下添加文件localversion,文件内容会自动添加到版本号里去。

3. 定义CONFIG_LOCALVERSION变量

4. 如果linux-2.6.35目录下有文件localversion(其内容为.33),也使用了LOCALVERSION变量,也定义了CONFIG_LOCALVERSION=".XYZ"。

make LOCALVERSION=.44 include/config/kernel.release

此时对2.6.35.7的内核,include/config/kernel.release的内容为2.6.35.7.33.XYZ.55。

可看到添加的三种字符的顺序:文件localversion内容在前,然后是CONFIG_LOCALVERSION的值,最后是LOCALVERSION的值。

4.   另外,关于scripts/setlocalversion文件:

1. 在scripts/setlocalversion文件中,可用echo "aaa" >&2来输出显示相关信息,例如:

echo "LOCALVERSION=${LOCALVERSION}" >&2

2. 这个文件里很多地方是跟根据一些git命令来进行判断的,例如

if head=`git rev-parse --verify --short HEAD 2>/dev/null`; then

if [ -z "`git describe --exact-match 2>/dev/null`" ]; then

if git config --get svn-remote.svn.url >/dev/null; then

[ -w . ] && git update-index --refresh --unmerged > /dev/null

if git diff-index --name-only HEAD | grep -v "^scripts/package" \

需要仔细注意:

---------------------

本文来自 kangear 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/kangear/article/details/17020835?utm_source=copy

向linux内核版本号添加字符/为何有时会自动添加“+”号

转载:http://blog.csdn.net/adaptiver/article/details/7225980 1.   引子 编译2.6.35.7 kernel版本的时候发现,“2.6.35.7 ...

哪个 Linux 内核版本号是 “稳定的”? | Linux 中国

版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/F8qG7f9YD02Pe/article/details/79329760 https://mmbi ...

Linux 内核版本号查看

简要:1,lsb_release -a 查看linux系统版本 2,uname -a 查看内核版本

转: linux内核版本本地版本号的检查——setlocalversion

转载:http://blog.csdn.net/adaptiver/article/details/7225980 1.   引子 编译2.6.35.7 kernel版本的时候发现,"2.6 ...

[Kernel]内核版本添加字符和内核版本'+'解决

转自:http://blog.csdn.net/adaptiver/article/details/7225980 之前每次由于git仓库编译出来每次都带有'+', 导致都需要使用git archiv ...

linux内核(kernel)版本号的意义

转自:http://www.cnblogs.com/jsjliuxing/archive/2011/12/01/2271182.html 在linux下有一个目录,即/usr/src/kernels/ ...

Linux 内核版本命名

Linux 内核版本命名在不同的时期有其不同的规范,我们熟悉的也许是 2.x 版本奇数表示开发版.偶数表示稳定版,但到 2.6.x 以及 3.x 甚至将来的 4.x ,内核版本命名都不遵守这样的约定. ...

linux内核升级图文攻略(转)

一.Linux内核概览Linux是一个一体化内核(monolithic kernel)系统.设备驱动程序可以完全访问硬件.Linux内的设备驱动程序可以方便地以模块化(modularize)的形式设置 ...

linux内核升级图文攻略

Linux内核概览 Linux是一个一体化内核(monolithic kernel)系统. 设备驱动程序可以完全访问硬件. Linux内的设备驱动程序可以方便地以模块化(modularize)的形式设 ...

随机推荐

[译]处理文本数据(scikit-learn 教程3)

原文网址:http://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_data.html 翻译:Tacey Won ...

JAVA继承与覆写

实例:数组操作 首先是开发一个整型数组父类,要求从外部控制数组长度,并实现保存数据以及输出.然后子类中实现排序和反转. 基础父类代码如下: class Array { private int data ...

eclipse ADT下载地址

adt not vpn https://dl.google.com/android/eclipse/ 或 https://dl-ssl.google.com/android/eclipse/ andr ...

Adaboost的意义

Adaboost是广义上的提升方法(boosting method)的一个特例.广泛应用于人脸识别等领域. 它的基本思想是,“三个臭皮匠赛过诸葛亮”,即用多个弱分类器的线性加权,来得到一个强的分类器. ...

linux 添加并格式化新硬盘

linux挂载磁盘1. 格式化磁盘mkfs -t ext4 /dev/sdb2. 挂载mount /dev/xvdb /home3. 查看磁盘对应的uuidblkid4. 加入开机自动挂载,在/etc ...

linux scp传输文件命令

scp  -r /opt/test root@192.168.2.105:/opt

JSONObject 自定义过滤配置

一.自定义过滤器说明 PropertyPreFilter 根据PropertyName判断是否序列化  PropertyFilter 根据PropertyName和PropertyValue来判断是否 ...

转 HTTP/2: The Long-Awaited Sequel

HTTP/2: The Long-Awaited Sequel Thursday, October 9, 2014 2:01 AM 6 Ready to speed things up? Here a ...

OGG抽取进程异常问题排查一例

1.问题现象抽取进程常常running,但是没有新产生trail文件,lag比较大 GGSCI (xxxdb) > info all Program Status Group Lag at Ch ...

Logger Rate Limiter -- LeetCode

Design a logger system that receive stream of messages along with its timestamps, each message shoul ...

Linux 编译内核 dirty,向linux内核版本号添加字符/为何有时会自动添加+号或者xxx-dirty【转】...相关推荐

  1. 向linux内核版本号添加字符/为何有时会自动添加“+”号

    转载:http://blog.csdn.net/adaptiver/article/details/7225980 1.   引子 编译2.6.35.7 kernel版本的时候发现,"2.6 ...

  2. 修改linux编译配置文件,Porting:linux内核编译、配置、修改配置文件、添加.c文件到内核...

    一.linux内核 $:'uname -a $:'uanme -r // 查看linux内核版本,开发板上进入linux后是一样的命令. 早起常常使用的版本:linux 2.6.x 开发板上使用的版本 ...

  3. 跑linux编译什么CPU速度快,linux 加快编译速度

    <操作系统>课程设计报告课程设计题目:操作系统课程设计 设计时间:2016/1/10一. 课程设计目的与要求需要完成的内容:(1) 安装虚拟机:Vmware.Vmware palyer ( ...

  4. Linux编译安装qt5.9,Linux CentOS7 安装 Qt 5.9.2

    Linux CentOS7 安装 Qt 5.9.2 参考链接 http://doc.qt.io/qt-5/linux.html sudo yum groupinstall "C Develo ...

  5. linux编译驱动报错,Linux编译声卡驱动

    关于Linux编译声卡驱动: 惠普笔记本刚买来时,安装Debian 5,通常会遇到两个问题.一个是无线网卡驱动没有安装,一个是"带上耳机可以听歌,但是喇叭无法发声". 对于前面一个 ...

  6. linux编译安装的好处,Linux学习—源码安装

    源码安装--可以按照自己的需求安装,这是源码安装的好处,而二进制安装无法选择 大部分的源码安装步骤大致相同,具体细节可以参考解压缩之后的README和INSTALL README: 介绍了软件包的功能 ...

  7. linux编译谷歌浏览器方法,构建Linux版本的谷歌Chrome浏览器

    Chromium编译说明(Linux版) 此页描述如果在Linux操作系统上编译构建Chromium浏览器.假如你对测试chromium或想移植chromium到别的平台请你继续阅读. 小提示:目前还 ...

  8. linux编译运行uart,嵌入式Linux裸机开发(七)——UART串口通信

    嵌入式Linux裸机开发(七)--UART串口通信 一.UART串口通信简介 通用异步收发器简称UART,即UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTE ...

  9. linux编译blas,科学网—Linux下安装blas和lapack包小记 - 徐博伦的博文

    系统是centOS6.5,机器上已有gfortran编译器 从网上搜索下载blas.cblas.lapack的tar压缩文件包 1.编译blas 先解压文件 tar xvf blas.tgz cd b ...

最新文章

  1. 深度学习--TensorFlow(6)神经网络 -- 拟合线性函数非线性函数
  2. 深入理解按位异或运算符
  3. linux每日命令(27):chmod命令
  4. c++ array赋值问题
  5. 牛客网【每日一题】4月24日 子序列
  6. php shell,php命令行写shell实例详解
  7. .h文件包含后显示类型_C语言中#include只能包含.h文件吗?
  8. C# WinForm开发系列 - Form/Window
  9. 桌面窗口管理器和csrss导致Windows的GPU和内存占用过高而卡顿
  10. python语言与存货管理,(二)实现对库存管理系统的模块化编程
  11. LOL云顶弈记牌易语言源码
  12. D1: elevater design
  13. U-Net在2022年相关研究的论文推荐
  14. Oracle Wallet Manager
  15. 【线性代数(6)】范德蒙德行列式及克莱姆法则
  16. android baseview,Android BaseAdapter:在getView()重新输入时conver...
  17. c#程序设计实训报告心得体会_c#学习心得体会范文
  18. 搭建OpenStack的Message queue及出现的问题
  19. 跨境电商:外贸企业做海外社媒营销的优势
  20. 输出魔方阵,所谓魔方阵是指这样的方阵,它的每一行,每一列和对角线之和均相等。例如,三阶魔方阵为

热门文章

  1. linux宝塔拉黑ip,宝塔面板自动拉黑恶意IP到Cloudflare防火墙
  2. 三种方式实现生产者消费者模式
  3. Ts/Typescript基础运用
  4. Java高手群(学习交流群)
  5. Element UI - el-table 渲染慢,卡的原因
  6. ERP与MIS的概念
  7. 市电电压双向越限报警保护器电路设计
  8. FreeSWITCH 背景音
  9. jupyter导出存什么文件_使用jupyter notebook将文件保存为Markdown,HTML等文件格式
  10. 程序员不得不知道的技术面试资料大全