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

转载:http://blog.csdn.net/adaptiver/article/details/7225980

 

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 stringres="$res$(scm_version)"
else# apped a plus sign if the repository is not in a clean tagged# state and  LOCALVERSION= is not specifiedif test "${LOCALVERSION+set}" != "set"; thenscm=$(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; thenecho "+"returnfi

 

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 .; thenres="$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`; thenif [ -z "`git describe --exact-match 2>/dev/null`" ]; thenif git config --get svn-remote.svn.url >/dev/null; then[ -w . ] && git update-index --refresh --unmerged > /dev/nullif git diff-index --name-only HEAD | grep -v "^scripts/package" \

 

需要仔细注意:

我的解决方案:

make LOCALVERSION="" ARCH=arm CROSS_COMPILE=arm-hisiv200-linux- uImage

转载于:https://www.cnblogs.com/pengdonglin137/p/3685820.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

渣男劈腿,两个女生逼他做出选择,结果......

1 生一个女儿有多重要(素材来源网络,侵删)▼2 真实版眼睛瞪得像铜铃(素材来源网络,侵删)▼3 地表最强撞衫(素材来源网络,侵删)▼4 过年时最怕遇见的人(素材…

安卓判断服务器返回的状态码,AppsFlyer返回状态码400

我实现Appsflyer我的样本项目,但是当我运行它,服务器返回错误代码400AppsFlyer返回状态码400I/AppsFlyer_1.18-117182240: response code: 400还有就是我MainActivty.javapublic class MainActivity extends AppCompatActivity {public static final Str…

java多进程、多线程讲解

一、 什么是进程、线程?线程和进程的区别? 1. 进程 当一个程序进入内存运行时,即变成一个进程。进程是处于运行过程中的程序。 进程是操作系统进行资源分配和调度的一个独立单位。 进程的三个特征: 独立性 独立存在的实体&#xf…

fstream实现文件复制(并将文件名小写改成大写)

使用C的fstream类来实现char* filename "C:\\grldr.mbr";//须复制文件路径 int len strlen(filename); while( *(filenamelen-1)!\\){ len--; }//获得文件名 char temp[32]; strcpy(temp,(filenamelen)); for (int i 0; i<s…

AsyncHttpClient的连接池使用逻辑

AsyncHttpClient的连接池结构很简单, NettyConnectionsPool内部重要的几个变量如下 // 连接池, 通过 host 区分不同的池private final ConcurrentHashMap<String, ConcurrentLinkedQueue<IdleChannel>> connectionsPool new ConcurrentHashMap<String, Concurr…

记录一次C#爬虫记录,获取必应图片

起因事情是这样的&#xff0c;我创建了一个仓库&#xff0c;里面有2018年到目前为止每日的必应壁纸&#xff0c;在八月份的时候我看到微软有接口文档&#xff0c;于是写了一个服务&#xff0c;每天早上八点钟会获取必应壁纸&#xff08;目前已经可以作为api来使用了&#xff0c…

word打出计算机图形符号,在word插入符号和特殊符号-word技巧-电脑技巧收藏家

在word插入符号和特殊符号打开“插入”菜单&#xff0c;单击“特殊字符”命令&#xff0c;打开“插入特殊符号”对话框&#xff0c;在这个对话框中有六个选项卡&#xff0c;分别列出了六类不同的特殊符号&#xff1b;从列表中选择要插入的特殊字符&#xff0c;单击“确定”按钮…

Android插件化开发基础之静态代理模式

一 Proxy模式 意图&#xff1a; 为其他对象提供一种代理以控制这个对象的访问。 适用性&#xff1a; l 远程代理&#xff08; Remote Proxy &#xff09;&#xff1a; 为一个对象在不同的地址空间提供局部代表。 l 虚代理&#xff08;Virtual Proxy&#xff09;根据需要创建…

史上最强数学科普!

全世界只有3.14 % 的人关注了爆炸吧知识“中国现代数学之父”华罗庚曾说过宇宙之大&#xff0c;粒子之微火箭之速&#xff0c;化工之巧地球之变&#xff0c;生物之谜日用之繁&#xff0c;无处不用数学回首往昔数学始终伴随我们左右纵横交错的几何、繁琐复杂的运算难以求解的方程…

FastCgi与PHP-fpm之间的关系

我在网上查fastcgi与php-fpm的关系&#xff0c;查了快一周了&#xff0c;基本看了个遍&#xff0c;真是众说纷纭&#xff0c;没一个权威性的定义。网上有的说&#xff0c;fastcgi是一个协议&#xff0c;php-fpm实现了这个协议&#xff1b; 有的说&#xff0c;php-fpm是fastcgi进…

QQ在线联系代码

添加图文模块,标题地址:tencent://message/?uin你的QQ号&Sitemyqq&Menuyes “你的QQ号”就写您自己的Q号 图片地址写:http://wpa.qq.com/pa?p1:你的QQ号:13 “你的QQ号”改为您自己的。“13”为图片样式的序号&#xff0c;可以为1-17。 样式1&#xff1a;样式2&#…

服务器 不支持gbk,解决JS请求服务器gbk文件乱码的问题

JS获取服务器编码格式为gb2312的文件时内容为乱码&#xff0c;ajax网络请求内部使用的是XMLHttpRequest&#xff0c;所以在请求之前需要设置一下编码格式&#xff0c;但是设置xhr.setRequestHeader("accept", "text/csv;charsetgb2312,*/*");没有效果&…

C# 死锁的原理与排查方法详解

01—死锁的原理线程死锁是指由于两个或者多个线程互相持有对方所需要的资源&#xff0c;并且互相等待对方释放资源&#xff0c;导致这些线程都处于等待状态&#xff0c;无法继续执行。如果线程都不主动释放所占有的资源&#xff0c;将产生死锁。如果死锁发生在UI线程&#xff0…

Android之category

CATEGORY_ALTERNATIVE设置这个activity是否可以被认为是用户正在浏览的数据的一个可选择的actionCATEGORY_APP_BROWSER和ACTION_MAIN一起使用&#xff0c;用来启动浏览器应用程序CATEGORY_APP_CALCULATOR和ACTION_MAIN一起使用&#xff0c;用来启动计算器应用程序CATEGORY_APP_…

人生没有对与错,只是选择不同

全世界只有3.14 % 的人关注了爆炸吧知识你用碎片时间学习、赚钱、与时俱进&#xff0c;还是拿来聊天&#xff0c;消遣&#xff0c;刷视频&#xff1f;碎片时间&#xff0c;拉开人生差距&#xff0c;没有对与错&#xff0c;只是选择不同。人生很多地方都有岔路口&#xff0c;很多…

application/x-www-form-urlencoded 与multipart/form-data

为什么上传文件的表单里要加个属性 enctype 上传文件的表单中<form>要加属性enctype"multipart/form-data",很多人只是死记硬背知道上传表单要这么写&#xff0c;知其然而不知其所以然。那到底为什么要添加这个属性呢&#xff1f;它是什么意思呢&#xff1f;它…

学会这些, 让你的服务器远离***影响

介绍:SSH又称Secure Shell, 是linux下常用的远程登陆服务器方式, 其基于SSL加密功能, 相比较ftp, telnet等明文传输协议来说安全等级更高, 在在企业开发环境中被大量使用, 而基于SSH的安全方式鱼龙混杂, 各有春秋. 原因&#xff1a;有一个朋友是做游戏的&#xff0c;他告诉我他…

Android之ActivityManager与Proxy模式的运用

二 Android中ActivityManager 从官方文档的介绍可以看到ActivityManager的作用&#xff1a; 是与系统所有正在运行着的Acitivity进行交互&#xff0c;对系统所有运行中的Activity相关信息&#xff08;Task&#xff0c;Memory&#xff0c;Service&#xff0c;App&#xff09; 进…

服务器文件每天备份重新命名,定时备份服务器文件至本地电脑

你有么有遇到过以下情况&#xff1a;1 写的脚本忘记保存&#xff0c;然后苦逼地再写一遍2 脚本不小心或者小心地删掉了&#xff0c;但后来又发现很有用&#xff0c;依然苦逼地再写一遍3 实验室的服务器炸了&#xff0c;写的脚本全没了一般情况下&#xff0c;第三种情况不会遇到…

河流Shader

原地址&#xff1a;http://www.unity蛮牛.com/blog-2321-336.html Shader "Custom/TextureEffect" {Properties { _MainTint("Diffuse Tint",Color) (1,1,1,1)_MainTex ("Base (RGB)", 2D) "white" {}_ScrollXSpeed("X Scrol…