栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

内核函数asm_do_IRQ()中的irq与我在模块中请求的irq不同

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

内核函数asm_do_IRQ()中的irq与我在模块中请求的irq不同

这种观察可能是由于物理和虚拟IRQ编号之间的映射。驱动程序中显示的数字是虚拟IRQ数字,仅在使用通用Linux中断处理子系统时有效。中的中断号

asm_do_IRQ
将是内核中断结构提供的物理中断号。

我相信OMAP处理器支持GPIO引脚上的中断。通常的实现方式是为一组GPIO输入(例如32位)分配一条IRQ线。当任何GPIO发生中断时,该IRQ线将被激活。这可能是处理器上的数字62。如果查看处理器手册,则应该看到IRQ
62对应于GPIO组中的中断。

现在,Linux GPIO子系统将允许您将中断处理程序分配给任何GPIO,从而为您提供从linux irq号到物理irq号的映射。您的linux
irq数为196。GPIO子系统配置为处理所有GPIO中断(例如中断62),读取GPIO寄存器以确定存储库中的哪些GPIO位可能已产生中断,然后调出您分配给的中断处理程序

request_irq

这是GPIO中断的基本控制流程:

  1. GPIO组中的中断发生更改。IRQ 62升高。
  2. asm_do_IRQ
    在IRQ 62上运行。GPIO子系统已通过平台初始化代码注册为处理IRQ 62。
  3. GPIO子系统读取GPIO寄存器,并确定GPIO位X引起了中断。它计算从位X到linux虚拟IRQ编号的映射,在这种情况下为196。
  4. GPIO中断处理程序然后
    generic_handle_irq
    使用196 调用该函数,该函数调用您的中断处理程序。

平台通常在虚拟IRQ编号和物理IRQ编号之间定义 静态映射 。要查看此映射,

  • CONFIG_VIRQ_DEBUG
    在早于linux-3.4的内核上启用,或
  • CONFIG_IRQ_DOMAIN_DEBUG
    在较新的内核上启用。

然后看一下

irq_domain_mapping
debugfs文件。例如在PowerPC上:

# mount -t debugfs none /sys/kernel/debug# cat /sys/kernel/debug/irq_domain_mapping irq    hwirq    chip name        chip data   domain name   16  0x00009  IPIC  0xcf801c80  /soc8347@e0000000/pic@700   18  0x00012  IPIC  0xcf801c80  /soc8347@e0000000/pic@700   19  0x0000e  IPIC  0xcf801c80  /soc8347@e0000000/pic@700   20  0x0000f  IPIC  0xcf801c80  /soc8347@e0000000/pic@700   21  0x00010  IPIC  0xcf801c80  /soc8347@e0000000/pic@700   77  0x0004d  IPIC  0xcf801c80  /soc8347@e0000000/pic@700


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/405709.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号