【问题标题】:How to get distro name and version from linux kernel code?如何从 linux 内核代码中获取发行版名称和版本?
【发布时间】:2020-03-20 09:28:27
【问题描述】:

我正在寻找是否有任何 API,我们可以通过它从 Linux 内核模块中获取 OS 发行版名称和版本?

例如,我使用的是 SLES 12 service pack 4。此信息存在于 /etc/os-release 文件中。我想知道是否有任何方法可以从内核代码中获取这些信息。

linux:/ # cat /etc/os-release
NAME="SLES"
VERSION="12-SP4"
VERSION_ID="12.4"
PRETTY_NAME="SUSE Linux Enterprise Server 12 SP4"
ID="sles"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:suse:sles:12:sp4"
linux:/ #

【问题讨论】:

  • 没有。为什么你需要这个开始?

标签: linux linux-kernel linux-device-driver


【解决方案1】:

没有用于检测当前操作系统分布的内核 API,只是因为它并不是真正需要的。 Linux 内核本身与发行版无关,它不在乎在其上运行哪个发行版(让内核依赖于在其上运行的内容没有多大意义)。

如果您真的需要,您可以自己从内核空间打开、读取和解析文件。有关示例,请参阅更多 in this other post,尤其是现代内核的 this answer。在任何情况下,请记住,通常不鼓励与内核空间进行文件系统交互,如果操作不当,很容易导致错误并危及内核的安全性,所以要小心。

如果您正在开发内核模块,我建议您在编译/安装模块时从用户空间解析/etc/os-release文件并使用一组#defines,甚至module parameters。在任何情况下,您都应该问自己为什么首先需要内核代码中的这些信息,而实际上您不应该这样做。

【讨论】:

    猜你喜欢
    • 2011-09-13
    • 2012-10-17
    • 2011-12-11
    • 2015-01-07
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多