WARNUNG: Modpost: 10 nicht übereinstimmende Abschnitte gefunden

WARNUNG: Modpost: 10 nicht übereinstimmende Abschnitte gefunden

Ist diese Fehlermeldung ein Grund zur Sorge für mich?

linux-y3pi:/usr/src/linux-2.6.38.8 # make modules
scripts/kconfig/conf --silentoldconfig Kconfig
  CHK     include/linux/version.h
  CHK     include/generated/utsrelease.h
  CALL    scripts/checksyscalls.sh
  Building modules, stage 2.
  MODPOST 2516 modules
***WARNING: modpost: Found 10 section mismatch(es).***
To see full details build your kernel with:
'make CONFIG_DEBUG_SECTION_MISMATCH=y'

Antwort1

Reine Kopie dieses SO Q&A. Eine Lösung dieser Frage ist auch für U&L wertvoll!

Referenz


Dies ist nur eine Warnung. Die Kernel-Build-Systeme haben eine Plausibilitätsprüfung durchgeführt und etwas herausgefunden, das ein Fehler sein könnte. Die Warnmeldung besagt, dass sich irgendwo im Kernel-Code Code befindet, der möglicherweise einen unzulässigen Querschnittszugriff ausführt. Beachten Sie, dass Ihr Kernel erstellt wurde!

Um zu verstehen, was die Warnung bedeutet, betrachten Sie das folgende Beispiel:

Ein Teil des Kernel-Codes im Kernel-Textabschnitt versucht möglicherweise, eine Funktion aufzurufen, die mit dem __initDatenmakro gekennzeichnet ist, das der Linker in den Kernel einfügtdrinAbschnitt, der nach dem Booten oder Laden des Moduls freigegeben wird.

Dies könnte ein Laufzeitfehler sein, da der Code in derTextruft den Code imdrinAbschnitt, nachdem der Initialisierungscode abgeschlossen ist, ruft er grundsätzlich einen veralteten Zeiger auf.

Allerdings kann dieser Aufruf vollkommen in Ordnung sein - es ist möglich, dass die Aufrufe im KernelTextAbschnitt hat einen guten Grund zu wissen, dass es nur die Funktion in derdrinAbschnitt, wenn seine Anwesenheit garantiert ist.

Dies ist natürlich nur ein Beispiel. Es gibt auch andere ähnliche Szenarien.

Die Lösung besteht darin, mit zu kompilieren. CONFIG_DEBUG_SECTION_MISMATCH=yDadurch erhalten Sie eine Ausgabe, die angibt, welche Funktion versucht, auf welche Daten oder Funktionen zuzugreifen und zu welchem ​​Abschnitt sie gehören. Sie können dann versuchen, herauszufinden, ob die Build-Time-Warnung gerechtfertigt ist, und sie ggf. beheben.

Derinit.hMakros __refund __refdatakönnen verwendet werden, um solchedrinReferenzen ohne Warnungen. Beispielsweise

char * __init_refok bar(void) 
{
  static int flag = 0;
  static char* rval = NULL;
  if(!flag) {
     flag = 1;
     rval = init_fn(); /* a function discarded after init */
  }
  return rval;
}

__init_refok, etc. können "gültige" Instanzen reparieren, also die Tatsache, dass sie existierenMaikein Vertrauen erwecken.

verwandte Informationen