Gibt es eine Makrodefinition, um die Linux-Kernelversion zu überprüfen?

Lesezeit: 1 Minute

Benutzeravatar von zztops
zztops

Ich frage mich, ob es ein gcc-Makro gibt, das mir die Linux-Kernel-Version mitteilt, damit ich Variablentypen entsprechend festlegen kann. Wenn nicht, wie würde ich vorgehen, um mein eigenes Makro zu definieren, das dies tut?

Benutzeravatar von Vilhelm Gray
Wilhelm Grau

Das linux/version.h Datei hat ein Makro namens KERNEL_VERSION Dadurch können Sie die gewünschte Version mit der aktuellen Version der Linux-Header vergleichen (LINUX_VERSION_CODE) Eingerichtet. Zum Beispiel, um zu prüfen, ob die aktuellen Linux-Header für Kernel sind v2.6.16 oder früher:

#include <linux/version.h>

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

Eine bessere Möglichkeit, die Versionsinformationen zur Laufzeit abzurufen, ist die Verwendung von utsname Funktion ein include/linux/utsname.h.

char *my_kernel_version = utsname()->release;

So ist es im Wesentlichen /proc/version erhält die aktuelle Kernel-Version.

Siehe auch

Abrufen der Kernel-Version vom Linux-Kernel-Modul zur Laufzeit

Benutzeravatar von ldav1s
ldav1s

gcc wird diese Informationen nicht kennen. Alternativ können Sie viele Kernel-Informationen zur Laufzeit einfach ermitteln.

Sie können Ihren Laufzeittyp wie folgt definieren

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

und Code zur Laufzeit anschauen /proc/version (oder was auch immer Sie aus der Kernel-Laufzeitumgebung benötigen) und festlegen kernel_version angemessen. Das kernel_x_foo_type et al. ist Ihr Typ, der von der Kernel-Version abhängig sein soll. Den aufrufenden Code muss man sich anschauen kernel_version und greifen Sie auf die entsprechenden zu u.k_x, u.k_yoder u.k_z Daten.

  • Gibt es eine andere Möglichkeit für mich, verschiedene Variablentypen basierend auf der Kernelversion zu haben?

    – ztops

    23. Mai 2013 um 18:48 Uhr

1393370cookie-checkGibt es eine Makrodefinition, um die Linux-Kernelversion zu überprüfen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy