[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 メーリングリストの案内