LoveFM

导航

2011年12月4日 #

Linux高级字符设备之Poll操作

摘要: 在用户程序中,select()和poll()也是与设备阻塞与非阻塞访问息息相关的,使用非阻塞I/O的应用程序通常会使用select和poll系统调用查询是否可对设备进行无阻塞的访问。select系统调用最终会引发设备驱动中的poll函数被执行。一、select()系统调用: 用于多路监控,当没有一个文件满足要求时,select将阻塞调用进程。1.select()原型:int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *exceptfds,const struct timeval *timeout);/**@max... 阅读全文

posted @ 2011-12-04 16:54 LoveFM 阅读(12676) 评论(0) 推荐(1) 编辑

Linux设备驱动之Ioctl控制

摘要: 大部分驱动除了需要具备读写设备的能力之外,还需要具备对硬件控制的能力。 一、在用户空间,使用ioctl系统调用来控制设备,原型如下:int ioctl(int fd,unsigned long cmd,...);/*fd:文件描述符cmd:控制命令...:可选参数:插入*argp,具体内容依赖于cmd*/ 用户程序所作的只是通过命令码告诉驱动程序它想做什么,至于怎么解释这些命令和怎么实现这些命令,这都是驱动程序要做的事情。二、驱动ioctl方法:int (*ioctl) (struct inode *inode,struct file *filp,unsigned int cmd,uns... 阅读全文

posted @ 2011-12-04 13:30 LoveFM 阅读(79966) 评论(7) 推荐(8) 编辑

linux设备驱动程序中的阻塞机制

摘要: 阻塞与非阻塞是设备访问的两种方式。在写阻塞与非阻塞的驱动程序时,经常用到等待队列。一、阻塞与非阻塞 阻塞调用是指调用结果返回之前,当前线程会被挂起,函数只有在得到结果之后才会返回。 非阻塞指不能立刻得到结果之前,该函数不会阻塞当前进程,而会立刻返回。 对象是否处于阻塞模式和函数是不是阻塞调用有很强的相关性,但并不是一一对应的。阻塞对象上可以有非阻塞的调用方式,我们可以通过一定的API去轮询状态,在适当的时候调用阻塞函数,就可以避免阻塞。而对于非阻塞对象,调用的函数也可以进入阻塞调用。函数select()就是这样一个例子。 二、等待队列 在linux设备驱动程序中,阻塞进程可以使... 阅读全文

posted @ 2011-12-04 11:03 LoveFM 阅读(9179) 评论(1) 推荐(1) 编辑