我从硬件供应商那里下载了一个Linux源代码的tarball(没有Git存储库元数据),有没有办法找出内核的版本号?
通常内核版本号会存储在源代码树中的某个文件中吗?
我希望能够在不编译和运行内核的情况下完成这个任务。
我从硬件供应商那里下载了一个Linux源代码的tarball(没有Git存储库元数据),有没有办法找出内核的版本号?
通常内核版本号会存储在源代码树中的某个文件中吗?
我希望能够在不编译和运行内核的情况下完成这个任务。
您可以通过运行来查找版本
make kernelversion
在源代码树中
检查顶层的Makefile
,示例可以在这里找到。在那里的顶部,您应该看到类似于:
VERSION = 3
PATCHLEVEL = 1
SUBLEVEL = 0
EXTRAVERSION = -pax
NAME = Custom Pax Version
这种方法(尽管优势微不足道)的好处是,您只需要查看文件本身的能力,而不必运行构建过程。
include/linux/version.h
,但目前使用include/generated/uapi/linux/version.h
,但只有在部分成功编译后才能使用。include/linux/version.h
已经被弃用,现在在 include/generated/uapi/linux/version.h
中进行构建时生成。 - Diego# SPDX-License-Identifier: GPL-2.0
VERSION = 4
PATCHLEVEL = 14
SUBLEVEL = 67
那么您的Linux源代码版本是:4.14.67
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源代码版本中看到这一点。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
uname
解决方案,这需要安装内核。无论如何,既然你现在有一个不需要构建和安装的解决方案,这里给你一个赞来抵消那个匆匆而过的踩一下 - 我对它们深恶痛绝 :-) - paxdiablouname
一直是错误的答案(问题暗示了可能甚至没有可用于运行内核的硬件)。但从最初的问题中,我认为检查构建输出的某些东西是可以接受的。 - Ben Voigt