免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1588 | 回复: 4
打印 上一主题 下一主题

[中断] 为什么没有触发中断程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-10-24 10:01 |显示全部楼层 |倒序浏览
我看了《LINUX内核API完全手册》中有关中断的例子,
请看(主要部分):
static int irq=10;
static irqreturn_t irq_handler(int data,void *dev_id)
{
        printk("<0>the data is :%d\n",data);
          printk("<0>in the interrupt handler function\n");
           return IRQ_HANDLED;
}

static int __init request_irq_init(void)
{
        int result=0;
        printk("<0>into request_irq_init\n");
        result=request_irq(irq,irq_handler,IRQF_DISABLED,"A_New_Device",NULL);
        disable_irq(irq);
        enable_irq(irq);
        printk("<0>the result of the request_irq is: %d\n",result);   
        printk("<0>out request_irq_init\n");
        return 0;
}

编译没有问题,可是我加载时,没有执行irq_handler函数,书上说只要:
disable_irq(irq);
enable_irq(irq);
就可以触发中断,请问:我错在哪了?

论坛徽章:
0
2 [报告]
发表于 2013-10-24 15:42 |显示全部楼层
书上说有
disable_irq(irq);
enable_irq(irq);
两个函数就可以了,我也不太清楚,所以想问问各位,我加了,也不行

论坛徽章:
0
3 [报告]
发表于 2013-10-24 15:54 |显示全部楼层
humjb_1983 发表于 2013-10-24 11:44
回复 1# netdoger
不行吧,这里的代码只是申请了irq,设置了handle,enable只是使能中断,即启用中断报告 ...

有没有办法让它触发?因为不是所有的中断都是硬件中断,还有软件中断,我记得在汇编中,软件中断
可以用int指令来调用,linux中应该也可以吧?

论坛徽章:
0
4 [报告]
发表于 2013-10-24 17:12 |显示全部楼层
请问:linux中的中断都是指硬件中断吗?有没有软件中断呢?如果有,怎么用?

论坛徽章:
0
5 [报告]
发表于 2013-10-25 15:06 |显示全部楼层
humjb_1983 发表于 2013-10-25 09:07
回复 6# netdoger
再确认了一下,应该可以通过INT指令触发,比如你申请irq号为10,则可以通过INT 42指令触 ...


我写了个汇编:
.text
.global _start
_start:
      int $0x2a

      movl $0,%ebx
      movl $1,%eax
      int $0x80

编译后运行,出现:Segmentation fault(core dumped)
然后我把 int $0x2a改成 int $0x0a,编译后运行,出现的
错误也一样。请问:我该怎么做才能触发呢?
(0x2a就是42,0x0a就是10)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP