KiNOKO-DAQ 関連情報 掲示板

このスレッドに記事を投稿する
前のスレッド | 次のスレッド | 掲示版ホーム

Fedora15でのコンパイル
2011 年 10 月 26 日 18 時 49 分
投稿者: 葛西和夫

Fedora1564bit版でvmedrvをコンパイルすると
ioctlでエラーが出たため

.ioctl = vmedrv_ioctl を
.compat_ioctl = vmedrv_ioctl,
関数定義を
static long vmedrv_ioctl(struct file *filep, unsigned int cmd, unsigned longarg);
にそれぞれ変更。
そうすると、無事コンパイルは通りますが。テストしたところ

mmap vmeread vmewrite は問題なく動作しました。
vmedmareadを行うと割り込みが無くtimeoutが発生した旨のエラーが出たため、
(ハングアップします)
start_dma関数を
/*****************
timeout = ((size*HZ)/100000 + HZ/10); /* 100kB/sec+100msec; slow enough */
remaining_time = wait_event_timeout(
vmedrv_dmadone_wait_queue,
(! is_dma_running),
timeout
);
*****************/
fg = 1;
while(fg){
mdelay(1000);/*wait 1sec*/
status = ioread8(bit3.mapped_node_io_base + regDMA_COMMAND);
if (status & dcDMA_DONE_FLAG) {
is_dma_running = 0;
fg = 0;
}
}
iowrite8(0, bit3.mapped_node_io_base + regDMA_COMMAND);

のような感じで変更し、initiate_dma関数のenable_normal_interrupt()をコメントアウトし実行してみると
vmedmareadは成功しますが、正しいデータが読めません(vmereadでは正しく読めます)
マウスを動かすとハングアップします。
そこで元に戻し、TRACE_INTERRUPT、TRACE_DMAを有効にし実行してみたのが添付t.txtファイルです。

ちなみにFedora12の32bit版に変えてやってみてもdmaがうまくいきません。
どうもPCが新しいのが(チップセット intel H61NH)問題のようです。
そんなに緊急事態ではないのですが一応ご報告まで。

添付ファイル: t.txt (14.8 kb)



2011 年 10 月 27 日 0 時 24 分
投稿者: 榎本三四郎

詳細な報告ありがとうございます。
詳しい記述のおかげで、状況の把握が容易でした。

コンパイルエラーについては、すぐに再現できると思うので、時間を見つけて対応したいと思います。

DMA のタイムアウトは、割り込みが絡んでいるようなので、再現は難しい気がします。マウス操作でシステムが固まるのも、割り込みが関与している可能性が高いです。"lspci -v" などのコマンドで、割り込みの割り当てなどを確認してみたら、何か分かるかもしれません。もし可能ならば、vmeint などの割り込み関連が動作するかも興味のあるところです。割り込みではなくポーリングループに変更した場合でも読み出したデータがおかしいというのは不思議ですが... ちなみに、enable_normal_interrupt() をコメントアウトしても、ドライバはその割り込みの通知を受けるようにカーネルに登録されているので、マウスなどと競合する部分はそのまま残ることになります。競合しても良いように作っているつもりではありますが。

もし、vmedrv の不具合のため、割り込みの競合が障害を引き起こしているのであれば、BIOS 設定をいじったりデバイスを差し替えたりして問題を一時的に回避できるかもしれません。もちろん、根本解決にはなっていませんが。

もしかしたら vmedrv の実装が古い可能性があるので、調べてみようと思います。ただ、12月まで海外出張中で、時間も機器もないので、対応がとても遅くなってしまいます。申し訳ありませんが、ご了承ください。


早速の御返答ありがとうございます。
2011 年 10 月 27 日 11 時 15 分
投稿者: 葛西和夫

早速の御返答ありがとうございます。
ご指摘のirqはdmesgの表示によると
vmedrv: SBS(Bit3) Model 618/620 VME-PCI Bus Adapter is detected at ioport 0xc000 on irq 7.
vmedrv: successfully installed at 0xc000 on irq 18 (major = 250).
になっており、これは両方ともに他では使われていません。
マウス以外でも、マウスを抜いてテキスト画面でログインしDMA読み込みをし、その後"rmmod vmedrv"で終わらせてからLinuxを終了すると、終了時に固まり終了できません。



2011 年 10 月 27 日 19 時 17 分
投稿者: 榎本三四郎

ご確認ありがとうございます。
やはり、割り込みを含めて、ドライバ登録関連のカーネル仕様がドライバを書いたときと異なっているように見えます。もう一度カーネル仕様を確認しようと思いますが、現在は出張中で困難なので、しばらく時間がかかってしまうと思います。もし差し支えなければ、メールフォームから連絡いただければ、ドライバの修正を公開したときにこちらから連絡をいたします。


このスレッドに記事を投稿する