2012-03-22 3 views
9

私はカーネルに対して2つの簡単なモジュールを開発しました。今私は1つのモジュールで関数を定義し、その後でそれを他のモジュールで使用したいと考えています。1つのLinuxカーネルモジュールで関数を定義し、別のモジュールでそれを使う方法は?

どうすればいいですか?

関数と呼び出し元を問題なく他のモジュールに定義するだけですか?

#include <linux/module.h> 

int fun(void); 
EXPORT_SYMBOL(fun); 

int fun(void) 
{ 
    /* ... */ 
} 

をそしてmodule2.cでそれを使用します:

+0

可能な重複[別のモジュールからエクスポートされたカーネルモジュールの関数を呼び出す方法?](のhttp:// stackoverflowの.com/questions/12311867/how-to-call-exported-kernel-module-functions-from-another-module) –

答えて

25

module1.cでそれを定義し

extern int fun(void); 
+0

私はまだ問題があります。ディレクトリ/ var/log/iにファイルメッセージを開き、printk done buy my関数を表示します。次のようなメッセージが表示されます: "module license" unspecified "taints kernel"、 "kernel taintによるロックデバッグの無効化"。私はちょうど1つのモジュールの機能を呼び出して、他のモジュールでメッセージを印刷します。 – Ricardo

+1

@Ricardo:これは関数のエクスポートには関係しませんが、モジュールのライセンスを定義していないという事実だけです。これを行うには 'MODULE_LICENSE'マクロを使います。 –

+0

作業中です。ありがとうございました。カーネルイメージ内のモジュールについては、同じプロセスですか? – Ricardo

関連する問題