计算器您好亲爱的参与者投票机制,实施字符设备驱动程序
我新的内核空间开发仍处于道路的起点。 我开发了一个基本的字符设备驱动程序,可以读取打开关闭等。但找不到合适的来源以及如何为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