API имени дистрибутива Linux для получения имени дистрибутива Linux в коде драйвера?

API имени дистрибутива Linux для получения имени дистрибутива 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здесь.

Как сказал Ян, lsb_release, вероятно, лучший способ, но он не может быть единственным. Например, lsb_release не присутствует по умолчанию ни на одном из моих серверов RHEL:

[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 во время компиляции.

Спасибо за вашу помощь...

Связанный контент