Подтвердить что ты не робот

Есть ли определение макросов для проверки версии ядра Linux?

Мне интересно, есть ли gcc-макрос, который скажет мне версию ядра Linux, чтобы я мог правильно настроить типы переменных. Если нет, как бы я решил определить свой собственный макрос, который делает это?

4b9b3361

Ответ 1

В файле linux/version.h есть макрос с именем KERNEL_VERSION, который позволит вам проверить версию, которую вы хотите, с текущей версией заголовков Linux (LINUX_VERSION_CODE). Например, чтобы проверить, соответствуют ли текущие заголовки Linux для ядра v2.6.16 или ранее:

#include <linux/version.h>

#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,16)
...
#else
...
#endif

Лучший способ получить информацию о версии во время выполнения - использовать функцию utsname в include/linux/utsname.h.

char *my_kernel_version = utsname()->release;

Это, по сути, как /proc/version получает текущую проверку ядра.

См. также

Получение версии ядра из Linux-модуля ядра во время выполнения

Ответ 2

gcc не будет знать эту информацию. В качестве альтернативы вы можете легко определить много информации о ядре во время выполнения.

Вы можете определить тип выполнения, например

struct unified_foo {
     unsigned int kernel_version;
     union {
         kernel_x_foo_type k_x;
         kernel_y_foo_type k_y;
         kernel_z_foo_type k_z;
     } u;
};

и иметь код во время выполнения, посмотрите /proc/version (или что вам нужно из среды выполнения ядра) и установите kernel_version соответствующим образом. kernel_x_foo_type et al. это ваш тип, который вы хотите установить на версию ядра. Вызывающий код должен смотреть kernel_version и получать доступ к соответствующим данным u.k_x, u.k_y или u.k_z.