如何修改Linux内核来改变uname返回的版本字符串?

Posted

技术标签:

【中文标题】如何修改Linux内核来改变uname返回的版本字符串?【英文标题】:How to modify the Linux kernel to change the version string that uname returns? 【发布时间】:2013-10-22 03:19:04 【问题描述】:

我正在使用旧 (2.6.33.2) 版本的嵌入式 Linux,并且已被要求更改内核,以便可以区分不同的修补内核映像。目前,uname -v 输出例如"#1 Wed Sep 11 07:07:51 BST 2013

因此我想对此进行更改,以便任何后续补丁都将#1 部分更改为定义为补丁一部分的修订号(并将日期部分更改为最新内核补丁的日期),但我看不到这是在内核中的哪个位置设置的。

我应该查看哪些文件来执行此操作?

【问题讨论】:

也许你的内核源代码树中有一个.version 文件。 我很确定您可以在执行 "make menuconfig" 时更改此设置。有一个类似“本地版本字符串”的选项 有一个 CONFIG_LOCALVERSION,但这会让你设置 'uname -r' 显示的内容,而不是 'uname -v'。 有一个文件 include/generated/compile.h 包含 UTS_VERSION 的定义,其中包含时间戳。每次构建内核时都会生成此文件。如果你搜索这个定义,你会发现它在几个地方被用来形成内核的版本字符串。如果您必须更改此时间戳,那么您必须修改使用此定义的源文件并使用您自己的。您可以编辑.version 文件以更改您提到的#1 部分。 【参考方案1】:

尝试设置KBUILD_BUILD_TIMESTAMP。默认是`date`,所以可能是这样的

export KBUILD_BUILD_TIMESTAMP="r3 `date`"

开头的#1来自.version文件,每次配置/构建后递增。

有关详细信息,请参阅文件 scripts/mkcompile_h

【讨论】:

以上是关于如何修改Linux内核来改变uname返回的版本字符串?的主要内容,如果未能解决你的问题,请参考以下文章

Linux内核源码如何编译

当前linux所使用的内核在哪个文件夹,如何看当前使用的内核版本情况。

如何查询Linux内核版本

Linux如何查看内核版本并安装内核头文件linux-headers-generic

如何修改CentOS6,CentOS7内核支持安装锐速的内核

linux如何升级内核版本