还记得去年10月,我就买了块板子,准备学嵌入式开发。直到现在才开始认认真真地写驱动玩玩。这个键盘驱动我以前就弄过的,不过当时知识学的不扎实。光会纯搬别人的程序,出现了问题都不知道怎么解决。经过这么几个月的努力,现在做起来就舒服多了 。 在写和调试的过程中也遇到了许多的问题。下面就是一些记录:
POLL函数的实现方法:
static unsigned int key_dev_poll(
struct file *file,
struct poll_table_struct *wait)
{
unsigned int mask = 0;
poll_wait(file, &key_dev->wq, wait);
if (key_dev->head!=key_dev->tail)
mask |= POLLIN | POLLRDNORM;//mark the file can be read!
return mask;
}
err = copy_to_user(buff,(const void*)key_dev->buf,count);
//if success, return 0!!!!!!!!!!!!!!!!!!!
return ret ? -EFAULT : count;//it is vital!!!
这个函数弄了很久! 开始没有注意到它调用成功,就返回0!!!!导致应用程序一直出错(读不到数据)。
下一步,为了学习,我会尝试着实现更多的函数,来做这个键盘驱动。从而巩固我之前学到的很多理论知识。
最后提醒自己,一定要多注意函数运行成功或出错时的返回值/错误码!