【发布时间】:2011-07-19 18:40:12
【问题描述】:
我正在编写一个设备驱动程序来处理 PCIe 卡的中断,该卡目前适用于 IRQ 线上引发的任何中断向量。
但它有一些可以被引发的类型,由向量寄存器标记。所以现在我需要阅读矢量信息并聪明一点...
那么,我是否:-
1/ 每种中断类型都有单独的开发节点/dev/int1、/dev/int2 等,并且只需说明int1 用于向量类型 A 等?
1.1/ 由于每个文件/字符设备都有自己的minor 编号,打开时我会知道哪个是哪个。 我认为。
1.2/ ldd3 好像演示了这个方法。
2/ 有一个节点/dev/int (就像我现在所做的那样) 并且有多个进程挂在同一个read 方法上? 听起来更好?!
2.1/ 然后只唤醒正确的进程...?
2.2/ 我是否使用单独的wait_queue_head_t wait_queues?还是不同的flag/测试条件?
在read 方法中:-
wait_event_interruptible(wait_queue, flag);
在处理程序中不是真正的代码!:-
int vector = read_vector();
if vector = A then
wake_up_interruptible(wait_queue, flag)
return IRQ_HANDLED;
else
return IRQ_NONE/IRQ_RETVAL?
编辑:来自人民 cmets 的笔记:-
1) 我的用户空间代码 mmap 的所有 PCIe 固件寄存器
2)用户空间代码有几个线程,每个线程在设备驱动设备节点上执行一个阻塞read,然后在发生中断时从固件返回数据。我需要根据中断类型唤醒正确的线程。
【问题讨论】:
标签: linux device-driver linux-device-driver interrupt