2016-07-25 11 views
0

スイッチ/ GPIO割り込みを追加しようとしています。カーネルソースツリーの一部として書きたいと思います。カーネルイメージをビルドしてカスタムボードにデプロイしたら、proc/interruptsで表示する必要があります。私はすでにモジュールを書いており、insmodを実行している場合は動作しています。別々にコンパイルするのではなく、カーネルツリーの一部にしたいと思っています。 カーネルソースにirqを追加する手順は何ですか?あなたはカーネルツリーにモジュールを書かれている実際にはifカーネルで割り込みサービスルーチンを追加する

+0

なぜ私は知らないオフトピックです。私は作業コードを持っていると言いましたが、ソースコードの一部として含める必要があります。 –

答えて

1

は、非常に簡単です:

あなたはdriversディレクトリ内のソースコードを置くとしましょう、次のようになって階層は見えます: ドライバー/ hello kconfigを をMakefileの hello.cの次を追加する必要がありますドライバ/ Makefileで

ドライバー/ Kconfiで
obj-$(CONFIG-HELLO) += hello/ 

source "drivers/hello/Kconfig" 

ドライバのサンプル・コードを/ハロー/ kconfigを:あなたは以下を追加する必要がありますグラムのドライバーのための

obj-$(CONFIG_HELLO) += hello.o 

サンプルコード:ドライバ/こんにちは/ Makefileのための

config HELLO 
tristate "Hello world module" 
default n 
help 
    Enable Hello world module support 

サンプルコード/hello.c:

#include <linux/module.h> 
#include <linux/moduleparam.h> 

... 
... 

static int __init hello_init(void) 
{ 
    ... 
} 

static void __exit hello_exit(void) 
{ 
    ... 
} 

module_init(hello_init); 
module_exit(hello_exit); 

MODULE_AUTHOR("Obi One Kenoby"); 
MODULE_DESCRIPTION("Hello Driver"); 
MODULE_LICENSE("GPL"); 
MODULE_VERSION("1.0"); 

make menuconfigでhelloモジュールを見ることができるはずです。モジュールには 'm'を、組み込みには '*'を選択します。module_init/module_exitマクロは両方のオプションで動作します。

+0

こんにちは、私は同じことをしました、そして、私は問題なしでそれをコンパイルできるmenuconfigで見ることができます。今問題は、.koエントリがmodue.orderとmodule.builtinに存在しないことです。メインのmodule.builtinファイルにエントリがない場合、.koファイルは最終的なカーネルイメージの一部ではありません。 –

+0

コンパイルされたhello.oがあれば、カーネルに組み込まれているため、.koファイルは表示されません。プローブ関数にpr_err()を追加するだけで呼び出されます。 – tomereli

+0

私は/ proc/interruptsのエントリを見ることができません –

関連する問題