計算器您好親愛的參與者投票機制,實施字符設備驅動程序
我新的內核空間開發仍處於道路的起點。 我開發了一個基本的字符設備驅動程序,可以讀取打開關閉等。但找不到合適的來源以及如何爲Poll/select機制示例進行教程。
我寫的代碼示例下面查詢功能:
static unsigned int dev_poll(struct file * file, poll_table *wait)
{
poll_wait(file,&dev_wait,wait);
if (size_of_message > 0){
printk(KERN_INFO "size_of_message > 0 returning POLLIN | POLLRDNORM\n");
return POLLIN | POLLRDNORM;
}
else {
printk(KERN_INFO "dev_poll return 0\n");
return 0;
}
}
它工作正常,但不能一已瞭解幾件事情。
當我打電話從用戶空間程序選擇爲
struct timeval time = {5,0 } ;
select(fd + 1 , &readfs,NULL,NULL,&time);
在驅動程序中的功能dev_poll調用一次,並以緩衝大小爲零或POLLIN。然後再也沒有打過電話。在用戶空間中,5秒後程序繼續,如果dev_poll返回0. 我無法理解的是在這裏,驅動程序代碼將如何決定並讓用戶空間程序,如果緩衝區中有東西可讀取5秒,如果它被調用一次並立即返回。
反正在內核模塊中收集來自用戶空間的timeval參數信息嗎?
謝謝你從現在開始。
問候,
非常感謝您的回覆,那麼我該如何處理讓內核在超時時有內存數據的情況? 例如,用戶空間呼叫選擇時間爲5秒超時。 在選擇的開始我沒有設備中的數據。然後我有2秒的數據。所以我想喚醒用戶空間程序。我如何實現這一點? – Ozan
正如答案中所寫,當隊列變爲非空時,您需要調用'wake_up'來獲得您正在用於'poll'的等待隊列。 – Tsyvarev