GPIO割込みシグナルドライバコンパイルや使い方
gpiisig.cはKernel module(デバイスドライバ)だからコンパイルすると *.ko になる。 コンパイル手順はスクリプト見たほうが早い。
で環境をつくって、
でコンパイル。 Mは大文字なので注意。
こうすることにより、Kernel丸ごとコンパイルすることなく、Kernelの部品であるKernel moduleだけをコンパイルできる。
Kernel module(デバイスドライバ)*.koを実行する手順は次の通り。
まず、デバイスを登録する。
ここで作られるデバイスファイル/dev/*をアプリからopenすることによって使える。
そして、アプリからopenしてアプリ上に用意したsignal handlerを登録すると、割込み発生時にこのシグナルハンドラが呼ばれる。
次はアプリの書き方かな?
GPIO割込みをシグナル(ソフト割り込み)でもらったら応答速度改善
結構必要としてる人はいるはず。
GPIOからの割込み信号を使う場合、楽なのはgpioディレクトリopenしてpollかselect。
そしたら遅延がひどい。ミニマムは良いのにワーストが酷いらしい。
じゃあやっぱりデバドラで割込み拾わんと、って言っても、
割込みもらった後の処理がかなり膨大でデバドラでは無理そうだ、
だそうだ。シグナルならいわゆるソフト割込みだから遅延少ないはず。しらんけど。
て言ったら書く羽目になった。なんでだ。
というわけで、これはGPIO入力をハードウェア割込みで受けて、アプリにソフトウェア割込み=シグナルで渡すドライバ。
今まで数十msあった最大遅延が1ms以下になった、まじかとのお言葉。
はい。マジすか頂きました。
使い方は、、、他のdriver群と一緒にmakeしてもらって、
insdevして、それをアプリからopen("/dev/gpii"...)云々したら
シグナルハンドラが呼ばれるようになる、、、
アプリはいいか。また今度ね。
追記:組込みLinuxの話でした。
GPLにしといたから使ってみて。
ソース gpiisig.c