我该如何找到Linux内核源代码树的版本?

84

我从硬件供应商那里下载了一个Linux源代码的tarball(没有Git存储库元数据),有没有办法找出内核的版本号?

通常内核版本号会存储在源代码树中的某个文件中吗?

我希望能够在不编译和运行内核的情况下完成这个任务。

6个回答

127

您可以通过运行来查找版本

make kernelversion

在源代码树中


5
我应该澄清一下,我希望能够仅通过检查源代码树来实现这一点,而不必尝试编译和运行内核(如果可能的话)。我已相应更新了我的问题。 - Maks
@downvoters 我对于被踩没有任何问题,但如果您能解释一下为什么会被踩那就更好了 :-) - Adrian Cornish
2
Adrian,我怀疑是你使用了uname解决方案,这需要安装内核。无论如何,既然你现在有一个不需要构建和安装的解决方案,这里给你一个赞来抵消那个匆匆而过的踩一下 - 我对它们深恶痛绝 :-) - paxdiablo
@paxdiablo 感谢您的回复,也许是对的 - 因为 OP 也编辑了他的问题,uname 的答案变成了“错误”的答案。我只希望人们能说 - 哦,好吧 :-) - Adrian Cornish
1
查看问题的编辑历史,uname 一直是错误的答案(问题暗示了可能甚至没有可用于运行内核的硬件)。但从最初的问题中,我认为检查构建输出的某些东西是可以接受的。 - Ben Voigt
也许你应该在你的解决方案中添加'make kernelrelease'以获取完整的版本号。 - Lumpi

121

检查顶层的Makefile,示例可以在这里找到。在那里的顶部,您应该看到类似于:

VERSION = 3
PATCHLEVEL = 1
SUBLEVEL = 0
EXTRAVERSION = -pax
NAME = Custom Pax Version

这种方法(尽管优势微不足道)的好处是,您只需要查看文件本身的能力,而不必运行构建过程。


这两种方法都非常好(我指的是make kernelversionvi Makefile),因为在制作任何依赖于当前运行内核的模块或其他内容之前,验证命令uname -r是否与make kernelversion的输出匹配非常重要。如果不匹配,则需要使用vi Makefile进行修改。 - Oleg Kokorin
3
这种方法的主要优点在于,当所需版本无法从git标签中猜测时,您无需克隆一个大型存储库来检查版本。谢谢。 - zopieux

4
另一种解决方案:在旧版中使用include/linux/version.h,但目前使用include/generated/uapi/linux/version.h,但只有在部分成功编译后才能使用。

1
include/linux/version.h 已经被弃用,现在在 include/generated/uapi/linux/version.h 中进行构建时生成。 - Diego

2
在Linux源代码树的根目录文件中,检查Makefile内容。在其开头部分:
# SPDX-License-Identifier: GPL-2.0
VERSION = 4
PATCHLEVEL = 14
SUBLEVEL = 67

那么您的Linux源代码版本是:4.14.67


1
如果有人需要编写脚本:使用 awk,可以像这样从 Makefile 中打印版本:
awk '/^VERSION =/{a=$3};/^PATCHLEVEL =/{b=$3};/^SUBLEVEL =/{c=$3};/^EXTRAVERSION =/{d=$3};END{print a"."b"."c d}' Makefile

如果要跳过EXTRAVERSION附录:

awk '/^VERSION =/{a=$3};/^PATCHLEVEL =/{b=$3};/^SUBLEVEL =/{c=$3};END{print a"."b"."c}' Makefile

如果有人知道如何使awk在当前模式已匹配一次的情况下继续下一个模式,那将使其在多行分别以VERSION =开头的情况下更加安全。但是我没有在任何Linux源代码版本中看到这一点。

0
In the kernel source tree, check the root directory Makefile to get the kernel version as below.

Example as below:

 $ head Makefile
 # SPDX-License-Identifier: GPL-2.0
 VERSION = 5
 PATCHLEVEL = 18
 SUBLEVEL = 0
 EXTRAVERSION = -rc3
 NAME = Superb Owl
 # *DOCUMENTATION*
 # To see a list of typical targets execute "make help"
 # More info can be located in ./README

From the above we get the source code version is 5.18.0-rc3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接