2011-06-17 7 views
0

私は、複数のカーネルモジュールで構成されるプロジェクトに取り組んでいます。異なるモジュール間にはいくつかの共有機能がありますが、各モジュールに同じコードを含めたくありません。 Linuxカーネルに「共有オブジェクトライブラリ」があるのですか、共通コードが別のモジュールに入っていますか?カーネルモジュールを分割する

+0

@amrzar 25%はあなたがより良いことを示唆していたものでした。 StackOverflowは、人々が学ばなければならない質問で満たされているからではなく、多くの人々が良い答えを書く時間を費やすためです。あなたが良い答えを得た場合、あなたはそのようにマークするか、答えを出す手助けをする価値があると人々は考えないでしょう。あなたが良いアドバイスを受けるときに "あなたのお尻を引っ張る"のようなことは、おそらくもっと助けを得るための非常に巧妙な方法ではないと言います。 – Fredrik

+0

@Fredrik私は、 "Accept"という単語とは異なる理解を持っていると思います。人々はいつも誰かの意見を聞いて、他の人を尊重しなければならないと思います。 「尊重」するだけですべての人々の意見を受け入れるならば、宗派間の暴力や政党は存在せず、これらの手を詰めるでしょう!人々の作品を尊重することは、甘いコメントを書いて成功することを喜んで文学的に示しています! – amrzar

+0

@Fredrikはあなたが正しいと思われ、このフォーラムのためのルールと規制のタイプです!私は今、そうするでしょう、時間のおかげで! – amrzar

答えて

2

通常、モジュールに共通の機能を別のモジュール自体に組み込みます。これの良い例は、他のSAS(Serial Attached SCSI)デバイスドライバで使用されているdrivers/scsi/libsasモジュールです。このルートに行く場合は、他の外部モジュールからのシンボルの参照に関する提案については、Documentation/kbuild/modules.txtの6.3節にあるカーネルのドキュメントを参照してください。

1

モジュール間で機能を共有する方法をお探しの場合は、EXPORT_SYMBOLマクロをご覧ください。簡単な例:

ファイルsuper.cここ

void call_me(){ 
    printk("Hello from super.\n"); 
} 
EXPORT_SYMBOL(call_me); 

ファイルsuper.h

extern void call_me(); 

ファイルbase.c

#include "super.h" 

void call_super(){ 
    call_me(); 
} 

super.cとbase.cがあります異なるモジュール。

お探しの場合はお知らせください。私はあなたにメイクファイルやものでもっと複雑な例を送ることができます。それが役に立てば幸い。

注:私はこれを多くのディストリビューションで使用しました...しかし、私がやったたびにモジュールファイルを他のモジュールディレクトリにコピーする必要がありました。

あなたはAからの関数を使用するモジュールAとモジュールBを持っています.Aをコンパイルすると、Modules.symversという名前のファイルが作成されます。コンパイルする前にそのファイルをBのフォルダにコピーする必要がありました。 Modules.symversをコピーした後でBのフォルダにmake cleanを発行しないでください。そうしないと、削除されます。

+0

私はすでにあなたのポイントを持って、非常にありがとう – amrzar

関連する問題