2011-07-12 9 views
6

mam osadzanie jakiś sterownik do jądra Linux, kiedy ten błąd (Dodaję urządzenie w pliku pokładzie i zarejestrowanie go):Jak zapobiec "nieopisanemu tutaj" symbolowi błędu: "mimo EXPORT_SYMBOL w module jądra Linuksa?

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

I znajduje funkcję powyżej w pliku sterownika

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

Czy nie powinno być "widoczne" przez EXPORT_SYMBOL? Plik C zawierający powyższy kod nie ma nagłówka pliku (nie pisać, po prostu okazało się, że here i jestem wykonawczych. Mówią to przetestowane, więc zakładam, nagłówek nie jest potrzebny?

Reszta kodu kompiluje się idealnie (więc "widzi" kod w folderze), a plik zawierający powyższy kod również się kompiluje!

+0

Minimalny przykład pracy: https://stackoverflow.com/questions/12311867/how-to-call-exported-kernel-module-functions- from-another-module/44614246#44614246 –

Odpowiedz

10

eksportuje symbol dynamicznego linkowania. błąd kompilacji spowodowany brakującą deklaracją funkcji Musisz napisać plik nagłówkowy dla pliku C i dołączyć ten plik nagłówka lub zadeklarować funkcję kompilowanego pliku C.

Opcja 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 ... */ 

Opcja 2:

your_file.c:

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

Należy również zauważyć, że plik EXPORT_SYMBOL w pliku kxtf9.c ma #ifdef __KERNEL__ wokół niego, więc należy poprawnie skonfigurować środowisko kompilacji (Makefile) - w przeciwnym razie pojawi się błąd łącza.

Powiązane problemy