ドライバー コードで Linux ディストリビューションの名前を取得するための Linux ディストリビューション名 API はありますか?

ドライバー コードで Linux ディストリビューションの名前を取得するための Linux ディストリビューション名 API はありますか?

ディストリビューション名とホスト名を取得するための共通コードをドライバーに書いています。ホスト名は から取得しています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 変数を要求することもできます。

ご協力いただきありがとうございます...

関連情報