3

我创建了一个处理中断的内核模块。此外,还有一个 C 程序。

该程序在执行期间会导致中断。当中断到来时,程序应该被挂起,并保持挂起 - 直到内核模块中的中断处理程序完成处理这个中断。

请告诉我,如何实现?

4

2 回答 2

1

您可以在内核模块执行此操作时等待具有属性PTHREAD_PROCESS_SHARED集的互斥锁,当内核模块完成后,您可以向互斥锁发出信号,以便您的进程可以继续。

要设置它,您可以使用pthread_mutexattr_setpshared

还有这个:


对于进程间同步,需要在这些进程之间共享的内存中分配互斥锁。由于必须动态分配此类互斥锁的内存,因此需要使用 mutex_init() 显式初始化互斥锁。

于 2013-03-06T11:56:28.030 回答
1
This program causes interrupts during its execution

我假设用户空间程序正在执行软中断/系统调用,并且您已经编辑了内核系统调用表,并分配了自定义系统调用的编号,并使用自定义系统调用/软中断重新编译和安装了内核。

当中断到来时,程序应该被挂起,并保持挂起 - 直到内核模块中的中断处理程序完成处理这个中断。

为了在您的程序调用软中断时发生这种情况,您必须使您的 irq 以原子方式运行,这样,在您的程序调用另一个软中断之前,前一个中断将被立即处理,而不会被任何其他中断抢占。 ,更高优先级的中断。要实现这种原子性,您可以在 irq 处理程序中使用自旋锁。

例子

spinlock_t mLock = SPIN_LOCK_UNLOCK;
unsigned long flags;

spin_lock_irqsave(&mLock, flags); // save the state, if locked already it is saved in flags
// IRQ Handler Code here
spin_unlock_irqsave(&mLock, flags); // return to the formally state specified in flags
于 2013-03-06T12:08:07.220 回答