川辺と申します。
>>>>> "えのきださん" == Yuichi Enokida <enokida@xxxxxxxxxxxxx> writes:
えのきださん> おはようございます。えのきだです。
すっかり夜です、ごめんなさい。(夜にならないと観ないことが多いので....)
えのきださん> ところで、この手のデバイス制御を行う場合、デバイスの割込
えのきださん> 解除はどのタイミングで行うべきでしょうか?
割り込み解除は速やかにだと思いますが、問題は割り込みハンドラとreadのエ
ントリとの関係だと思いますよ。
readで何を読み出そうとしているのか今一つ分からないのですが、割り込みハ
ンドラ内で割り込みが入ったこととハンドラ内で処理したデータを何処かに記
録し、それをreadで返すことで取りあえずのことは出来るとは思います。
(って滅茶苦茶基礎を抽象的に書いてますね。)
具体的には、[linux-users:102100]で"Naoto Shimazaki"さんが書いている様に
> Linux ではなんらかの既存のデバイス抽象化レイヤとインタフェースするか、
> さもなければ read, write, select (poll) でインタフェースするしか
> ないので、その先が pthread かどうかはあんまり関係ないというか。
デバイスのカテゴリ毎に抽象化するためのレイヤ(関数セットとか共通のデー
タ構造とか)が用意されていて、それを利用してしまう方が良いかと思います。
紹介した drivers/isdn/hisax/isac.c は、ISDNボード関係の共通インタフェ
イスにのっとって書かれています。
これは、 Documentation/isdn の下のドキュメント(特にINTERFACEと
README.HiSax)に説明が書かれています。
で、それを使わないとすると、自分で似たような仕掛けを用意しないといけま
せん。が、取りあえず、試すだけと言うレベルでしたら、
static int interrupt_count = 0;
static int interrupt_count_old = 0;
void
xxxx_intrerrupt_handler(…)
{
……
interrupt_count ++;
wake_up_interruptible(…);
……
}
int
xxxx_read(struct file *file, char *buf, size_t count, loff_t * off)
{
int intr_cnt;
……
割り込み禁止と他との排他
intr_cnt = interrupt_count;
if(intr_cnt <= interrupt_count_old) {
……
interruptible_sleep_on(…);
……
}
割り込み解除と他との排他
……
if(copy_to_user(buf, &intr_cnt, sizeof(intr_cnt))) {
エラー
}
……
}
とかすれば、少なくとも割り込みの発生を read で得ることは出来ると思いま
す。(とにかくはしょって書いてますが。)
ですが、これは最悪な例です。あくまで、実験用以上のものではありません。
アプリケーションで求めるものに適したやり方があるでしょうし、既存の
Linuxアプリケーションでも使えるドライバを目指す(その方が試験の面でも楽
だと思います)のならやはり既存の仕掛け(デバイスの抽象化レイヤ?)にのっ
とったものにした方がいいと思います。
で、PEB-3086がPEB-2085と大きな機能差が無ければ、あのドライバを元に
(PEB-3086向けに)改造すると動くのではないでしょうか。
で、先のソースですが、中途半端な紹介で申しわけ無かったのですが、
drivers/isdn/hisax/isac.c
は、
drivers/isdn/hisax/hisax_isac.c
とセットで見ないといけないですね。もちろん、README.HiSaxを読んでからの
方が良さそうです。(使う上でのオペレーション等色々書かれています。)
--------
Kawabe,Yoshihiro <ripula@xxxxxxxxxxxxxxx>
Who is calling me from where?
Knock on my shell and my mind? from Pearl song.
References:
- [linux-users:102092] Re: 組込Linuxドライバの作成方法Yoshihiro Kawabe
- [linux-users:102105] Re: 組込Linuxドライバの作成方法Yuichi Enokida
- Prev by Subject: [linux-users:102117] Re: DNSの同期が取れないのですが。
- Next by Subject: [linux-users:102119] Re: 組込Linuxドライバの作成方法
- Previous by thread: [linux-users:102105] Re: 組込Linuxドライバの作成方法
- Next by thread: [linux-users:102119] Re: 組込Linuxドライバの作成方法
- Indexes:[Main][Thread]