Linux内核模块发送信号进行硬件中断处理

时间:2017-08-13 22:34:34

标签: python c linux-kernel interrupt kernel-module

我正在使用 BeagleBone Black,它具有可通过内核模块配置的 gpio 引脚。在教育方面,我正在开发一个能够在 gpio 状态变化上附加中断的模块。

我的想法是我在Python中有一个接口,它将 pid 发送到设备(内核模块),从而等待来自内核空间的硬件中断信号以执行某个操作(方法)。

所以逻辑如下:

  • Python进程设置可在信号 SIGIO
  • 上调用的处理函数
  • Python进程将 pid gpio 引脚ID发送到内核模块
  • 内核模块从python进程接收 pid gpio id ;将gpio引脚注册到IVT表中的特定 irq 编号(使用简单的内核函数完成此操作)并为此 irq 编号注册内核处理函数
  • 在硬件中断( gpio 状态已更改)上,调用内核处理程序函数,并通过与 irq相关联的 pid 找到(python)任务 number和signal作为 SIGIO 发送到Python进程
  • Python进程接收此信号并调用python处理函数

这很有效,但我遇到了一个问题,如果Python进程有多个处理程序用于不同的gpio引脚会怎样。比调用所有处理函数,这是一种不好的行为。我在网上搜索并发现this问题,强烈建议不要进行这种内核用户空间通信,并使用民意调查来了解发生的事件。< / p>

作为替代方案,我应该在特定的 gpio 引脚上从python进程 poll 。问题是,中断技术不是更好吗?我的意思是这只是一个常见的逻辑,python进程不等待(忙)gpio状态改变,当调用硬件中断时,他只是被告知事件而不仅仅是使用cpu时间。

我可能不了解幕后发生的事情,这就是为什么不把民意调查技术看作是这样做的原因。

我也备份了一些工作代码,所以如果需要一些澄清,我可以展示它。

感谢您的帮助。

0 个答案:

没有答案