2011-07-20 16 views
0

カーネルモジュールをプログラミングするときに、sys_sendtoなどのシステムコールを使用しようとしました。しかし、コンパイラは「sys_sendto」というシンボルは定義されていないと私に警告しました。私はヘッダーファイルsyscalls.hをinculdedしていると確信していますので、私を助けてくれてありがとう。 P.S:私のLinuxバージョンは2.6.32linuxモジュールでsystemcallsを使う方法

答えて

0

モジュールがsys_sendto()のようなカーネル内のシンボルにリンクするためには、それをカーネルがエクスポートする必要があります。すべてのシステムコールがエクスポートされるわけではありません。 here

+0

ご回答ありがとうございます。ですから、これらのエクスポートされていないシステムコールシンボルを私のモジュールで使用する方法はありますか?もしそうでなければ、カーネルモードでソケットを使ってパケットを送信するには? –

+0

モジュールが使用されるカーネルを制御する場合、カーネルにパッチを適用してエクスポートすることができます。それ以外の場合は、カーネルの将来のバージョンのみを使用する場合は、カーネルのメーリングリストを公式カーネルにエクスポートすることについて議論を開始することができます。私はどちらもオプションだと推測しているので、それをハックするにはhttp://www.zyztematik.com/?p=65を見てください – damjan

0

http://www.ibm.com/developerworks/linux/library/l-system-calls/ ここでは、それらを記述して使用する方法について説明します。カーネルモードで実行する必要があるため、直接メソッド呼び出しでは使用されません。プロセッサはシステムコール番号をレジスタにロードし、システムコールを実行するためにカーネルが処理して処理するハードウェア割り込みを発行します。

関連する問題