2012-08-08 14 views
5

私はhrtimerインタフェースを使用してカーネルモジュールを構築しています。私は、モジュールが正常にコンパイルしていて、それがMODULE_LICENSE("GPL")セット持っている:カーネルモジュール:hrtimer_start「モジュール内の未知のシンボル」

make -C /lib/modules/3.0.0-23-server/build SUBDIRS=/home/projects/net-modeler modules 
make[1]: Entering directory `/usr/src/linux-headers-3.0.0-23-server' 
    CC [M] /home/projects/net-modeler/nm_injector.o 
    CC [M] /home/projects/net-modeler/nm_scheduler.o 
    LD [M] /home/projects/net-modeler/net-modeler.o 
    Building modules, stage 2. 
    MODPOST 1 modules 
    CC  /home/projects/net-modeler/net-modeler.mod.o 
    LD [M] /home/projects/net-modeler/net-modeler.ko 
make[1]: Leaving directory `/usr/src/linux-headers-3.0.0-23-server' 

を...しかし、私はinsmodにそれを試して、dmesgの出力

[111853.094925] Unknown symbol hrtimer_init (err 0) 
[111853.094931] Unknown symbol hrtimer_start (err 0) 
[111853.094942] Unknown symbol hrtimer_cancel (err 0) 

これらの関数は、<linux/hrtimer.h>の内側externed、およびエクスポートされますカーネル/ hrtimer.cで次のようにある3つの関数の結果を得るために

/** 
* hrtimer_init - initialize a timer to the given clock 
* @timer: the timer to be initialized 
* @clock_id: the clock to be used 
* @mode: timer mode abs/rel 
*/ 
void hrtimer_init(struct hrtimer *timer, clockid_t clock_id, 
     enum hrtimer_mode mode) 
{ 
    debug_init(timer, clock_id, mode); 
    __hrtimer_init(timer, clock_id, mode); 
} 
EXPORT_SYMBOL_GPL(hrtimer_init); 

cat /proc/kallsyms | grep <func>

0000000000000000 T hrtimer_init 
0000000000000000 T hrtimer_cancel 
0000000000000000 T hrtimer_start 

何が起こっているのか理解できる人はいますか?すべての機能がエクスポートされ、見つかるはずですが、何らかの理由でそうでないと思われます。私は何か愚かなことをしていますか?この問題を解決しようとする他の誰のために

答えて

4

MODULE_LICENSE("GPL")だけではなく、メイン1、モジュールファイルの全てでなければなりません。それがなければ

、実際に関数呼び出しが含まれていたファイルはEXPORT_SYMBOL_GPLによってそれらへのアクセスが制限されていました。

関連する問題