team-ebi

技術系の情報共有

GPIO割込みシグナルドライバコンパイルや使い方

gpiisig.cはKernel​ ​module(デバイスドライバ)だからコンパイルすると *.ko になる。 コンパイル手順はスクリプト見たほうが早い。

make.zip/mkdev.sh

で環境をつくって、

make.zip/Makefile

コンパイル。 Mは大文字なので注意。

こうすることにより、Kernel丸ごとコンパイルすることなく、Kernelの部品であるKernel​ ​moduleだけをコンパイルできる。

Kernel​ ​module(デバイスドライバ)*.koを実行する手順は次の通り。

まず、デバイスを登録する。

make.zip/insdev.sh

ここで作られるデバイスファイル/dev/*をアプリからopenすることによって使える。

そして、アプリからopenしてアプリ上に用意したsignal​ ​handlerを登録すると、割込み発生時にこのシグナルハンドラが呼ばれる。

次はアプリの書き方かな?

GPIO割込みをシグナル(ソフト割り込み)でもらったら応答速度改善

結構必要としてる人はいるはず。

GPIOからの割込み信号を使う場合、楽なのはgpioディレクトリopenしてpollかselect。
そしたら遅延がひどい。ミニマムは良いのにワーストが酷いらしい。
じゃあやっぱりデバドラで割込み拾わんと、って言っても、
割込みもらった後の処理がかなり膨大でデバドラでは無理そうだ、
だそうだ。シグナルならいわゆるソフト割込みだから遅延少ないはず。しらんけど。
て言ったら書く羽目になった。なんでだ。

というわけで、これはGPIO入力をハードウェア割込みで受けて、アプリにソフトウェア割込み=シグナルで渡すドライバ。
今まで数十msあった最大遅延が1ms以下になった、まじかとのお言葉。

はい。マジすか頂きました。

使い方は、、、他のdriver群と一緒にmakeしてもらって、
insdevして、それをアプリからopen("/dev/gpii"...)云々したら
シグナルハンドラが呼ばれるようになる、、、
アプリはいいか。また今度ね。


追記:組込みLinuxの話でした。


GPLにしといたから使ってみて。

ソース gpiisig.c