[Armadillo:03788] PC/104バスの割り込み番号を登録できません

Ikuta email@hidden
2008年 12月 7日 (日) 18:14:14 JST


お世話になっております.
生田と申します.

割り込み処理に関しては,最近,勉強し始めたばかりの初心者です.

現在,Armadillo-9上でPC/104バスからの割り込みを登録(request_irq)しようとする
と,Linuxがハングしてしまいますので,原因を調べています.

メーリングリストの内容等を参照し,テストモジュールを作成したのですが,IRQ番号
にPC/104バスのもの(例えば,IRQ_ISA3〜IRQ_ISA5)を指定してinsmodを実行すると,
Linuxがハングしてしまいます(IRQ番号に例えば7を指定するとハングせず,モジュール
がインストールされます).環境は
 
  OS:Debian3.1(sarge)
  使用Kernel:2.6.12.3-a9-14

です.また,テストモジュールのソースは下記の通りです.

============================== ここから ===================================
#include <linux/interrupt.h>
#include <linux/config.h>
#include <linux/init.h>
#include <linux/ioport.h>
#include <linux/kdev_t.h>
#include <linux/fs.h>
#include <linux/cdev.h>
#include <asm/io.h>
#include <asm/uaccess.h>
#include <asm/arch/platform.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>

static char *devname = "test";
static int irq = IRQ_ISA3;
static char *id = "null";

module_param(irq, int, S_IRUGO);

irqreturn_t test_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
  printk("interrupted irq:%d dev_id:%s\n", irq, (char *)dev_id);

  return IRQ_HANDLED;
}

static int test_open(void)
{
  int result;

  printk(KERN_ALERT "install '%s' into irq %d\n", devname, irq);

  result = request_irq(irq, test_interrupt, SA_INTERRUPT|SA_SHIRQ, devname, id);

  if (result) {
    return -EBUSY;
  }

  return 0;
}

static void test_close(void)
{
  printk(KERN_ALERT "remove '%s' from irq %d\n", devname, irq);
  free_irq(irq,id);
}

module_init(test_open);
module_exit(test_close);
============================== ここまで ===================================
  
いろいろと調べてみたのですが,なぜPC/104バスのIRQ番号を指定すると,Linuxがハ
ングしてしまうのかが分かりません.理由をご教授いただければ,幸いです.

以上,よろしくお願い致します.

--
生田 直史 <email@hidden>



armadillo メーリングリストの案内