2011-07-12 8 views
6

estoy incorporación de algún conductor en un kernel Linux cuando me sale este error (que estoy añadiendo el dispositivo en el archivo de placa y registrarlo):Cómo evitar el "error: 'símbolo' no declarado aquí 'a pesar de EXPORT_SYMBOL en un módulo kernel de Linux?

error: 'kxtf9_get_slave_descr' undeclared here (not in a function) 

localicé la función anterior en un archivo de controlador

struct ext_slave_descr *kxtf9_get_slave_descr(void) 
{ 
    return &kxtf9_descr; 
} 
EXPORT_SYMBOL(kxtf9_get_slave_descr); 

¿No debería haber sido "visible" por EXPORT_SYMBOL? El archivo de C que contiene el código anterior no tiene archivo de cabecera (que no he escrito, me acabo de enterar que here y estoy poniendo en práctica. Dicen que es probado así que supongo que no es necesaria una cabecera?

El resto del código compila perfectamente (por lo que "ve" el código en la carpeta) y el archivo que contiene el código anterior también compila!

+0

Ejemplo de trabajo mínimo: https://stackoverflow.com/questions/12311867/how-to-call-exported-kernel-module-functions-from-another-module/44614246#44614246 –

Respuesta

10

EXPORT_SYMBOL exporta el símbolo para la vinculación dinámica. Lo que usted tiene no es un error de enlace sino un error de compilación debido a una declaración de función faltante. Debe escribir un archivo de encabezado para el archivo C e incluir ese archivo de encabezado o declarar la función como el archivo C que está compilando.

Opción 1:

kxtf9.h:

#ifndef KXTF9_H 
#define KXTF9_H 

struct ext_slave_descr *kxtf9_get_slave_descr(void); 

#endif 

your_file.c:

#include "kxtf9.h" 
/* your code where you use the function ... */ 

Opción 2:

your_file.c:

struct ext_slave_descr *kxtf9_get_slave_descr(void); 
/* your code where you use the function ... */ 

También tenga en cuenta que EXPORT_SYMBOL en el archivo kxtf9.c tiene #ifdef __KERNEL__, por lo que debe configurar su entorno de compilación (Makefile) correctamente; de ​​lo contrario, obtendrá un error de enlace.

Cuestiones relacionadas