programing

리눅스 커널 버전을 확인할 수 있는 매크로 정의가 있습니까?

bestprogram 2023. 10. 14. 10:24

리눅스 커널 버전을 확인할 수 있는 매크로 정의가 있습니까?

제가 변수 타입을 적절하게 설정할 수 있도록 리눅스 커널 버전을 알려줄 gcc 매크로가 있는지 궁금합니다.그렇지 않다면 이렇게 하는 매크로를 어떻게 정의해야 합니까?

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

런타임에 버전 정보를 얻는 더 나은 방법은utsnameinclude / linux/utsname.h의 함수입니다.

char *my_kernel_version = utsname()->release;

이것은 본질적으로 어떻게./proc/version현재 커널 버전을 가져옵니다.

참고 항목

런타임에 Linux 커널 모듈에서 커널 버전 가져오기

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등은 커널 버전에 조건을 붙이려는 당신의 타입입니다.호출 코드를 확인해야 합니다.kernel_version그리고 적절한 것에 접근할 수 있습니다.u.k_x,u.k_y, 아니면u.k_z데이터.

커널 코드에서 먼저 Makefile.버전 관련 변수를 찾을 수 있습니다.

VERSION = 4
PATCHLEVEL = 9
SUBLEVEL = 37

언급URL : https://stackoverflow.com/questions/16721346/is-there-a-macro-definition-to-check-the-linux-kernel-version