2

我有一些硬件资源在完成时会触发中断。我想实现一个activateHw()仅在操作完成时才返回的函数(即触发中断时),但我不希望它浪费 CPU 时间(无中断轮询)。基本上,我想要的是:

bool activateHw() {
    trigger_hw();
    sleep_until_interrupt_arrived();
    return true;
}

如何在 Linux 中实现这一点?

4

2 回答 2

2

如果您正在编写内核模块,您可以使用它request_irq()来设置回调/中断处理程序。您的中断处理程序可以将数据写入字符设备。您的阻塞函数只需要调用poll字符设备上的系统调用。它将阻塞并休眠,直到数据可用。

查看gpio.txt,特别是如何通过配置应该触发中断的边缘来设置 gpio 引脚以写入 /sys/.../gpioxx/value。如果程序的时间要求不是很高,这也可以用于用户空间代码。

这是一个似乎相关的问题

于 2013-11-12T12:28:53.870 回答
1

我建议你使用等待队列。在中断处理程序中,您唤醒等待线程。这样你就不会浪费资源(例如使用自旋锁)。

看看这个教程

查看 linux 源代码,示例用法是/drivers/char/hpet.cor drivers/char/rtc.c

于 2013-11-12T12:35:41.407 回答