阅读:1883回复:3
linux驱动和应用程序通信问题
现在我在编写一块数据采集卡的linux驱动,该驱动有如下要求:
设备在运行中会遇到随机的数据采集事件,当该事件发生时,设备发生中断,并将指向设备内存的指针传递给应用程序。 一般linux驱动的中断使用方式是:让读或写操作处于睡眠状态,然后由中断唤醒。 但是本驱动要求中断直接通知应用程序,我就找不到实现方法了,望各位高手指点!! :( |
|
沙发#
发布于:2004-04-09 13:14
我觉得驱动程序无法通知应用程序数据来到。
只能依靠应用程序的操作。 应用程序可以用轮训法去读,但是效率低。 还可以用select 或者poll I/O复用。 |
|
|
板凳#
发布于:2004-04-09 19:42
我已经找到方法了,进程和模块可以通过信号交互。不过我的驱动测试
程序使用curses,使用该库时,得到信号会产生段错误。原因查找中。。 |
|
地板#
发布于:2004-04-11 11:53
内核里常用到一个叫作semXX的东西,函数名我记不清了,你去查SEM一定能查到,它与用户态的信号量原理和使用方法是一样的,连名字都差不多。你把它放在内核里读写数据的地方,用户态进程进入内核后执行到这里就会被锁住挂起,你的目的也就达到了。当内核的进程得到数据时,解开该锁,被锁住的用户进程就会马上激活。
|
|