3
我正在編寫用戶空間程序和內核空間設備驅動程序。內核如何通知用戶空間程序發生中斷
目標:一旦發生中斷,用戶空間程序需要快速做一些事情。
我的天真方法:用戶空間程序使用ioctl來調用wait_event_interruptible(),內核ISR調用wake_up_interruptible()來喚醒用戶空間程序。事實證明,從中斷到用戶空間需要花費太多時間。
有沒有更好的方法?
謝謝!
我正在編寫用戶空間程序和內核空間設備驅動程序。內核如何通知用戶空間程序發生中斷
目標:一旦發生中斷,用戶空間程序需要快速做一些事情。
我的天真方法:用戶空間程序使用ioctl來調用wait_event_interruptible(),內核ISR調用wake_up_interruptible()來喚醒用戶空間程序。事實證明,從中斷到用戶空間需要花費太多時間。
有沒有更好的方法?
謝謝!
也有同樣的問題在這裏問:
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或字符驅動程序機制是好方法。
您是否使用過「nice」來增加程序的優先級? –
我正在使用uClinux。沒有「好」的命令。但是,我確實嘗試使用sched_get_priority_max(); sched_setscheduler();在我的用戶空間程序中,但它並沒有真正的幫助。 :( – user1747565
'busybox'有'nice','renice'和'chpst'。如果任何一個applet被啓用,你可以使用它們以不同的優先級運行你的用戶空間程序。它以root身份運行只有超級用戶可以提高優先級) –