Как получить имя и версию дистрибутива из linux кода ядра? - PullRequest
0 голосов
/ 20 марта 2020

Я смотрю, есть ли какой-нибудь API, через который мы можем получить имя и версию дистрибутива ОС из Linux модуля ядра?

Например, я использую SLES 12 с пакетом обновления 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:/ #

1 Ответ

2 голосов
/ 21 марта 2020

Нет API ядра для определения текущего распределения ОС, просто потому, что оно на самом деле не нужно. Само ядро ​​Linux является независимым от дистрибутива c, и ему наплевать, какой дистрибутив запускается поверх него (если ядро ​​зависит от того, что запускается поверх него, не имеет особого смысла) .

Если вы действительно хотите, вы можете открыть, прочитать и проанализировать файл самостоятельно из пространства ядра. См. в этом другом посте для примера, и в частности этот ответ для современных ядер. В любом случае, помните, что взаимодействие с файловой системой из пространства ядра, как правило, не рекомендуется, и может легко привести к ошибкам и поставить под угрозу безопасность ядра, если сделано неправильно, поэтому будьте осторожны.

Если вы разрабатываете модуль ядра, Я бы посоветовал вам проанализировать файл /etc/os-release из пространства пользователя при компиляции / установке модуля и использовать набор #define s или даже параметров модуля . В любом случае, вы должны спросить себя , почему вам нужна эта информация в коде ядра, а вам в действительности это не нужно.

...