SL6.2でCAEN A1303を使うための準備


SL308,32bit環境で使ていたCAENETコントローラ A1303 PCI-Cardを、SL6.2,64bit環境で使ってみる。 そのための準備として、CAENからHSCAENETLibをダウンロード。バージョンは1.7.511なのかな。 ReadMeに従ってコンパイルしていみるけど、いくつかエラー。includeファイルが見つからないとか。 それでa1303.cに追加したのが、


#include <linux/sched.h>
#include <linux/wait.h> //これはいらないかもね。
  

の二文。しかしこれでもエラー。SA_SHIRQがどーのこーの。どうも新しいカーネルにはないらしい。 そこで、IRQF_SHAREDを使うことに。


//-->
        //      if (request_irq(s->irq, a1303_interrupt, SA_SHIRQ, "a1303", s)) {
        if (request_irq(s->irq, a1303_interrupt, IRQF_SHARED, "a1303", s)) {
//<--
  

とりあえずこんな感じにしてみると、コンパイルができました。 もっときれいに書いてバージョンに応じて対応するようにしたらいいね。

さて、動くかどうか。試してみよう。・・・、失敗。カーネルパニック。どうしたものか。 ライブラリは64bitを想定しているようだけどダメなのかな。

ここに、 ちょっと参考になるものあり。Warningが減った。でもまだだめですね。なんかなぁ。

ソースファイルにある関数をひとつづつつぶしてモジュールを作ると、なんかわかる。 どうも、モジュールをカーネルメモリにどう置くかで困っているようだ(正しいかな)。 request_mem_regionやioremapあたりが関係しているかも?

...

その後、大田さんの助けもあって、解決。ボードのinitializeのときに仮想メモリ上のアドレスを探すのですが、それができていなかったためにkernel panicだった模様。ioremapしている場所を変えたところ、うまくいきました。ちゃんちゃん。