Szenario 1: Ich versuche, mit einem Vanille-Kernel 3.10 (eigentlich kernel-lt
von Elrepo) IBM
GPFS
Treiber auf RHEL6 zu installieren. Der Teil GPL nicht kompiliert durch:Proper Funktion prüft, ob Kernel-Modul Quellcode
- Zu viele/zu wenig Argumente übergeben
- struct x kein solches Mitglied fein auf
- Typenkonflikt
Ihr Code kompiliert hat funktionieren Lager RHEL/Suse Kernel älter oder neuer als meins, aber hier versagt.
Szenario 2: Ich versuche, den Open-Source-Treiber softiwarp
auf RHEL6
mit Standard-Kernel zu kompilieren, aber es funktioniert nicht mit dem gleichen Fehler wie in Szenario 1. Es ist jedoch auf einem Vanilla-Kernel kompiliert fein.
Das alles ist, weil ihre Feature-Check-Header wie folgt aussehen:
#if LINUX_KERNEL_VERSION >= 2061300
#define FOO <newer variant>
#else
#define FOO <older variant>
#endif
Aber RHEL und Suse haben viele updates und Fehlerbehebungen, so dass ihre 3.10.101
3.10.101
nicht das gleiche wie Vanille ist.
Wie schreibe ich Code, der überprüft Funktionen, nicht Versionsnummer? In einem User-Space-Programm würde ich autoconf Makros AC_CHECK_MEMBER
/AC_CHECK_FUNC
Was ?! Autotools sind stark unter libc angewiesen. Wie können Sie sie mit Kernel verwenden, ohne sich selbst zu hacken? – 0andriy
@AndyShevchenko, könnten Sie auch sagen, '' gcc' und 'make' verlassen sich auf libc, also wie können Sie sie verwenden, um Kernel zu bauen?"Tatsache ist, dass die Autoconf-Prüfungen, die für Ihr Problem relevant sind, sich auf den Test über den Compiler verlassen, also müssen Sie, wie gesagt, nur sicherstellen, dass die Kernel-Header die richtigen sind. Autoconf weiß, wie viele Überprüfungen durchgeführt werden Sinnvoll für einen Kernel-Build (zB Bibliotheks-Checks), aber das heißt nicht, dass Sie die sinnvollen Checks nicht verwenden können. –
Obwohl ich Ihre Vermutung meiner Ignoranz im 1. Absatz @JohnBollinger nicht mag, ist die Der Rest Ihrer Antwort ergibt Sinn, ich werde es akzeptieren – basin