KiNOKO-DAQ 関連情報 掲示板

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

アドレスを間違えた場合のエラーについて
2008 年 6 月 12 日 16 時 28 分
投稿者: 毛受弘彰

はじめまして、名古屋大学太陽地球環境研究所の学生(D3)の毛受(めんじょう)といいます。
現在、私どもが準備を進めているLHCf実験にてSBS bit3のドライバとしてvmedrvを使用させていただいております。

ご相談したいのは、PIOアクセスにて空のアドレスにアクセスした場合のエラーについてです。
現在、2台のbit3を、それぞれkernel2.4とkernel2.6のPCで運用しております。この2台で同様のPIOアクセスを空のアドレス(対応するファンクションがないアドレス)に対して行った場合に、挙動が異なるっております。kernel2.6のPCの場合は、read関数の戻り値として-1が返ってくるのですが、kernel2.4のPCの場合には戻り値が-1ではなく、意味のない値が読み出せてしまいます。

上記のPCは現在CERN研究所に設置されているためすぐに確認がとれないのですが、記憶の限りでは、ハードウェアの設定(ジャンパー等)は同じになっていると思います。
個人的には、kernel2.4とkernel2.6の違いによって起こっていると推測しているのですが、このようなことは起こりえますでしょうか?また、kernelのバージョンが原因である場合に、kernel2.4系にて空のアドレスにアクセスしたことを認識する方法はありませんでしょうか?

よろしくお願いします。


無題
2008 年 6 月 18 日 1 時 26 分
投稿者: 榎本 三四郎

返信が遅くなって申し訳ありません。

Kernel 2.4 と Kernel 2.6 で動作が異なるのは
vmedrv の責任です.

2007年1月にリリースした vmedrv より、read() の際にタイムアウト検出を行うようにしました。これにより、空のアドレスにアクセスしたときに,ー1が返されるようになりました。

しかし、このときに、手元に 2.4 のカーネルがなく、テストができないため、2.4 カーネル用のファイルは更新しませんでした.そのため、カーネルのバージョンによって動作が変わってしまっています。(テストができないという理由により,基本的に vmedrv の新機能の実装は最新普及カーネルにだけ行うことが多いです)。

とりあえず,2.4 カーネル用のコードに read() の際にタイムアウト検出をするコードを加えたものを作ってみました。おそらく問題なく動作するとは思うのですが,手元に 2.4 カーネルがないため、コンパイルすらしていません.問題がありましたら可能な限り対応したいと思いますので,おしらせください。

添付のファイルを vmedrv/Linux2.4_Bit3_617 にある vmedrv.c と置き換えてコンパイルからやりなおしてみてください.すでに動作中の vmedrv があるときは、起動時の自動組み込みを解除した上で一度リブートすることをおすすめします.あと,念のため現在動作中のドライバは保存しておいてください.vmedrv ディレクトリごとバックアップをとっておくのが良いと思います。


添付ファイル: vmedrv.c (49.2 kb)


回答
2008 年 6 月 30 日 17 時 17 分
投稿者: 毛受弘彰

返信が遅くなってしまってすみません。
回答ありがとうございました。

私ごとなのですが、私達のDAQシステムが設置してあるCERN研究所に昨日到着しました。近日中に頂いたvmedrv.cでのテスト結果をお知らせできるかと思います。

毛受


テスト結果
2008 年 7 月 10 日 0 時 29 分
投稿者: 毛受弘彰

頂いたvmedrv.cを用いて動作しました。
PIO readでFunctionがないアドレスにアクセスした場合にエラーを受け取ることができました。

ありがとうございました。


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