您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

内核函数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中断的基本控制流程:

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

然后看一下irq_domain_mappingdebugfs文件。例如在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
其他 2022/1/1 18:20:13 有694人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶