
¿Este mensaje de error es algo que debería preocuparme?
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'
Respuesta1
Copia pura de estas preguntas y respuestas de SO. ¡Una solución a esta pregunta también es valiosa para U&L!
Referencia
Esto es sólo una advertencia. Los sistemas de compilación del kernel hicieron una verificación de integridad y descubrieron algo que podría ser un error. El mensaje de advertencia dice que en algún lugar del código del kernel hay código que podría realizar un acceso inapropiado a la sección transversal. ¡Tenga en cuenta que su kernel se compiló!
Para comprender lo que significa la advertencia, considere el siguiente ejemplo:
Algún código del kernel en la sección de texto del kernel podría estar intentando llamar a una función marcada con la __init
macro de datos, que el vinculador coloca en el kernel.en esosección que se desasigna después del arranque o la carga del módulo.
Esto podría ser un error de tiempo de ejecución ya que si el código en eltextoLa sección llama al código en elen esosección después de que el código de inicialización ha finalizado, básicamente está llamando a un puntero obsoleto.
Dicho esto, esa llamada puede estar perfectamente bien; es posible que las llamadas en el kerneltextoLa sección tiene buenas razones para saber que solo llama a la función en elen esosección cuando se garantiza que estará allí.
Esto, por supuesto, es sólo un ejemplo. También existen otros escenarios similares.
La solución es compilar con CONFIG_DEBUG_SECTION_MISMATCH=y
lo que le dará un resultado de qué función está intentando acceder a qué datos o función y a qué sección pertenecen. Luego puede intentar averiguar si la advertencia de tiempo de compilación está justificada y, de ser así, con suerte solucionarla.
Elinicio.hmacros __ref
y __refdata
se puede utilizar para permitir talesen esoReferencias sin advertencias. Por ejemplo,
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. pueden arreglar instancias "válidas", por lo que el hecho de que existanpuedeno inspirar confianza.