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
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.
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