Czy istnieje Definicja makra do sprawdzenia wersji jądra Linuksa?

Zastanawiam się, czy istnieje makro gcc, które powie mi wersję jądra Linuksa, abym mógł odpowiednio ustawić typy zmiennych. Jeśli nie, to jak miałbym definiować własne makro, które to robi?

2 answers

Linux/wersja.plik h ma makro o nazwie KERNEL_VERSION, które pozwoli Ci sprawdzić żądaną wersję pod bieżącą wersją nagłówków Linuksa (LINUX_VERSION_CODE). Na przykład, aby sprawdzić, czy aktualne nagłówki Linuksa są dla jądra v2.6.16 lub wcześniejszego:

#include <linux/version.h>

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

Lepszym sposobem na uzyskanie informacji o wersji podczas uruchamiania jest użycie funkcji utsname w include/linux/utsname.h .

char *my_kernel_version = utsname()->release;

W ten sposób /proc/version pobiera bieżące jądro verison.

Zobacz też

Pobieranie wersji jądra z modułu jądra Linuksa w czasie wykonywania

 58
Author: Vilhelm Gray,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:34

gcc nie poznam tej informacji. Alternatywnie można łatwo określić wiele informacji o jądrze w czasie wykonywania.

Możesz zdefiniować swój typ runtime jak

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;
};

I mieć kod w środowisku uruchomieniowym spójrz na /proc/version (lub cokolwiek potrzebujesz ze środowiska uruchomieniowego jądra) i ustaw kernel_version odpowiednio. [[4]} i in. jest Twój typ, który chcesz być uzależniony od wersji jądra. Kod wywołujący musi zajrzeć do kernel_version i uzyskać dostęp do odpowiedniego u.k_x, u.k_y, lub u.k_z data.

 1
Author: ldav1s,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-23 19:05:23