我从硬件供应商那里下载了他们的 Linux 源代码树的 tarball(没有 Git 存储库元数据),有没有办法找到内核的版本号?
版本号通常存储在源树中某处的文件中吗?
我希望能够在不编译和运行内核的情况下完成此操作。
运行即可找到版本
make kernelversion
在源代码树中
检查顶层
Makefile
,其中的一个示例是 here。在最上面,您应该看到类似的内容:
VERSION = 3
PATCHLEVEL = 1
SUBLEVEL = 0
EXTRAVERSION = -pax
NAME = Custom Pax Version
此方法的优点是您只需要能够查看文件本身,而不必运行构建过程。
另一个解决方案:在较早的时代
include/linux/version.h
,目前include/generated/uapi/linux/version.h
,但只有在至少部分成功编译之后。
在Linux源码树的根文件中,检查Makefile内容。 在开头部分:
# 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