Linux 发行版名称 API 用于获取驱动程序代码中 Linux 发行版的名称?

Linux 发行版名称 API 用于获取驱动程序代码中 Linux 发行版的名称?

我正在驱动程序中编写通用代码来获取发行版名称和主机名。我从中获取主机名struct utsname{nodename[]},但如何获取发行版名称?

答案1

我见过的大多数程序和脚本都会解析 中的常用文件/etc,据我所知没有其他方法:

On Redhat, look for /etc/redhat-release
On Debian, look for /etc/debian_version
Mandriva has /etc/version
and Slackware has /etc/slackware-version

您还可以使用uname来获取 ,ARCH或者,可能是最明智的方法,使用lsb_release

答案2

你可以看看facter是怎么做的这里

正如 Jan 所说, lsb_release 可能是最好的方法,但它不能是唯一的方法。例如,默认情况下,我的任何 RHEL 服务器上都不存在 lsb_release:

[damaya@damaya-sandbox script]$ lsb_release
-bash: lsb_release: command not found
[damaya@damaya-sandbox script]$ yum provides "*/lsb_release"
redhat-lsb-core-4.0-7.el6.centos.i686 : LSB base libraries support for CentOS
Repo        : base
Matched from:
Filename    : /usr/bin/lsb_release

因此,如果系统上不存在 lsb_release,那么下一步就是从 /etc/*-release 文件中获取信息。但是,如果系统上也不存在该信息,那么您就不走运了。不幸的是,不存在 100% 可靠的方法来获取此信息。

答案3

获取发行版名称的范围不在内核开发范围内。所以目前还没有具体的方法。为此,我要求在我的驱动程序中提供模块参数。您还可以在编译时请求 ENV 变量。

感谢您的帮助...

相关内容