2012-10-15 54 views
3

我正在編寫用戶空間程序和內核空間設備驅動程序。內核如何通知用戶空間程序發生中斷

目標:一旦發生中斷,用戶空間程序需要快速做一些事情。

我的天真方法:用戶空間程序使用ioctl來調用wait_event_interruptible(),內核ISR調用wake_up_interruptible()來喚醒用戶空間程序。事實證明,從中斷到用戶空間需要花費太多時間。

有沒有更好的方法?

謝謝!

+0

您是否使用過「nice」來增加程序的優先級? –

+0

我正在使用uClinux。沒有「好」的命令。但是,我確實嘗試使用sched_get_priority_max(); sched_setscheduler();在我的用戶空間程序中,但它並沒有真正的幫助。 :( – user1747565

+0

'busybox'有'nice','renice'和'chpst'。如果任何一個applet被啓用,你可以使用它們以不同的優先級運行你的用戶空間程序。它以root身份運行只有超級用戶可以提高優先級) –

回答

2

也有同樣的問題在這裏問:

Notify gpio interrupt to user space from a kernel module

請查看以上問題。不過,我可以提供我在那裏提出的方法。

您可以從內核API將信號發送到用戶空間的線程,它可以幫助ü運行無阻塞:

send_sig(int sig, struct task_struct *p, int priv); 

你需要知道的核心用戶線程的pid。你可以通過/ proc寫入用戶進程的pid,然後讀取pid的內核來完成。通過這種安排,當發生中斷時,內核可以向用戶線程發送信號。如果您的進程重新啓動或死亡,您將不得不通過proc更新pid。僅用於狀態通知,您可以使用此方法;然而,如果你喜歡傳輸數據以及狀態比Netlink或字符驅動程序機制是好方法。

相關問題