4.4.1 timer中断的3个逻辑中断号

点击查看系列文章 =》 Interrupt Pipeline系列文章大纲-CSDN博客

原创不易,需要大家多多鼓励!您的关注、点赞、收藏就是我的创作动力!

4.4 timer中断从Xenomai流向Linux

4.4.1 timer中断的3个逻辑中断号

以timer中断为例,来说明在引入了IPIPE Patch后,从Xenomai到Linux的中断处理流程。在之前的章节《4.2.1 通过DTS传递物理中断号给Linux》和《4.2.4 根据DTS完成timer初始化》,已经系统的讨论了timer的初始化,先简单总结一下。

DTS中timer节点定义的4个物理中断号,都转换成Linux virq存到数组arch_timer_ppi中。以我用的QEMU virt为例,arch_timer_of_init调用arch_timer_select_ppi()选择了ARCH_TIMER_VIRT_PPI,它的hwirq 等于27,它的virq等于3,存在arch_timer_ppi[ARCH_TIMER_VIRT_PPI]。

把IPIPE引入的Head域和Root域也加进来一起考虑,它们的XIRQ用与virq的相同的数值,来完成映射。如下图所示,展示了timer中断ARCH_TIMER_VIRT_PPI(hwirq 27)对应的3个逻辑中断号:

  1.  Linux virq: 3
  2. Head domain XIRQ: 3
  3. Root domain XIRQ: 3 

对应上述3个逻辑中断号,分别注册了三个中断处理程序:

  • Linux virq 3: 中断处理程序arch_timer_handler_virt

在timer驱动初始化过程中,arch_timer_register会调用API request_percpu_irq,注册中断处理程序arch_timer_handler_virt。根据《4.3 Linux的中断处理流程》,arch_timer_handler_virt实际上是注册到irqaction->handler。

  • Root domain XIRQ 3: 中断处理程序__ipipe_do_IRQ

参考《3.5.2__ipipe_init()之完成中断处理程序设置》,调用了ipipe_request_irq,设置ipipe_root_domain.irqs[3].handler设置为__ipipe_do_IRQ。

  • Head domain XIRQ 3: 中断处理程序xnintr_core_clock_handler

参考《4.1 Xenomai如何初始化》,调用了ipipe_request_irq,设置ipipe_head_domain.irqs[3].handler设置为xnintr_core_clock_handler。

接下来讨论timer中断在中断处理程序之间的流动。

点击查看系列文章 =》 Interrupt Pipeline系列文章大纲-CSDN博客

原创不易,需要大家多多鼓励!您的关注、点赞、收藏就是我的创作动力!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值