Только в дополнение к другим ответам.
Если вы стремитесь поддерживать как кросс-версию, так и кросс-дистрибутивный код, вам также следует помнить, что существуют дистрибутивы (Centos / RHEL), которые переносят некоторые недавние изменения из новых ядер в старое. Таким образом, вы можете столкнуться с ситуацией, в которой у вас будет LINUX_VERSION_CODE
, равный некоторой старой версии ядра, но будут некоторые изменения (новые поля в структурах данных, новые функции и т. Д.) Из недавнего ядра. В таком случае этого макроса недостаточно.
Вы можете добавить что-то вроде (чтобы избежать ошибок препроцессора в случае, если это не дистрибутив Centos):
#ifndef RHEL_RELEASE_CODE
#define RHEL_RELEASE_CODE 0
#endif
#ifndef RHEL_RELEASE_VERSION
#define RHEL_RELEASE_VERSION(x,y) 1
#endif
И используйте его с >
или >=
там, где вам нужно:
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0) || RHEL_RELEASE_CODE > RHEL_RELEASE_VERSION(7,2)
...
для поддержки пользовательских ядер Centos / RHEL.
P.S. конечно, необходимо изучить соответствующие версии Centos / RHEL и понять, когда и что именно изменилось в тех разделах кода, которые затрагивают вас.