Linux中PowerPC的中断原理分析

    在了解中断处理机制前,先看一下PowerPC的中断源,这里使用的是e300c3的内核,从E300核的角度,中断源可分为异常和外部中断,异常是e300内核产生的,如出现非法指令,或者是访问存储器时出现TLB Miss等情况。这种情况太复杂了,没有深究,这里所说的中断为外部中断。所谓外部中断,就是通过e300外部引脚产生的中断。E300的外部中断主要有:int#, cint#, mcp#. 这三根pin分别对应一般中断,critical中断和machine check中断。

    在设备驱动过程中,用户可以使用request_irq函数将外设的中断服务例程挂载到外部中断处理程序中。外部中断处理程序,可以直接处理硬件中断,但是request_irq函数试用软件中断号进行挂载,因此linux必然采用了某种方式进行软硬件中断的映射。

    这里需要了解下中断向量表的概念,就是它将软件中断号与硬件中断号联系起来,在系统中,中断源有很多,当某一种中断发生时,处理器最早进入的是处理函数的地址,就是中断向量。每种类型对应一个中断向量号,一系列的中断号构成中断向量表。比如驱动程序关心的外部中断,当这种中断发生时,处理器内核(e300)就会到指定寄存器中去取得中断处理函数的入口地址。

    硬件中断号是当中断发生时,处理器从外部的PIC(Programable Interrupt Controller)上读到的数值。因为在PowerPC Linux中有dts的概念,驱动程序员需要知道自己所负责的设备对应的device node上的interrupt项如何写的问题,这里的interrupt上的数字就是硬件中断号。在Linux系统初始化期间,通过对PIC的配置,可以将硬件的连接转化成相应的硬件中断号,例如,8315上的8根外设中断线IRQ0~IRQ7,可以通过PIC的配置,分别映射成的硬件中断号为10~18,那么当IRQ0上有中断请求时,处理器通过读取PIC,就得到P1所对应的硬件中断号为10。这些都是硬件层面的东西,当驱动程序安装它们的中断处理程序时,是基于软件中断号的,也就是内核函数request_irq中的参数irq是个软件中断号。

    软件中断号是Linux下的概念,为了支持多平台的关系,Linux不直接用硬件中断号索引irq_desc。所以当外部中断发生时,在外部中断入口函数中会通过读取PIC来获得本次中断的硬件中断号,获得硬件中断号后,会将其映射成对应的软件中断号来索引irq_desc数组,从而获得该软件中断号上的中断处理函数。显然,这种硬件中断号到软件中断号的映射关系,应该在设备可以处理中断前就要建立好了。在Linux Powe

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值