zfnuaa
驱动牛犊
驱动牛犊
  • 注册日期2002-09-28
  • 最后登录2004-04-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1883回复:3

linux驱动和应用程序通信问题

楼主#
更多 发布于:2004-04-08 09:02
现在我在编写一块数据采集卡的linux驱动,该驱动有如下要求:

设备在运行中会遇到随机的数据采集事件,当该事件发生时,设备发生中断,并将指向设备内存的指针传递给应用程序。

一般linux驱动的中断使用方式是:让读或写操作处于睡眠状态,然后由中断唤醒。

但是本驱动要求中断直接通知应用程序,我就找不到实现方法了,望各位高手指点!! :(
lingzjl
驱动牛犊
驱动牛犊
  • 注册日期2001-10-06
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-04-09 13:14
我觉得驱动程序无法通知应用程序数据来到。
只能依靠应用程序的操作。
应用程序可以用轮训法去读,但是效率低。
还可以用select 或者poll I/O复用。
超级肥雀
zfnuaa
驱动牛犊
驱动牛犊
  • 注册日期2002-09-28
  • 最后登录2004-04-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-04-09 19:42
我已经找到方法了,进程和模块可以通过信号交互。不过我的驱动测试
程序使用curses,使用该库时,得到信号会产生段错误。原因查找中。。
rainyss
驱动牛犊
驱动牛犊
  • 注册日期2004-04-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-04-11 11:53
内核里常用到一个叫作semXX的东西,函数名我记不清了,你去查SEM一定能查到,它与用户态的信号量原理和使用方法是一样的,连名字都差不多。你把它放在内核里读写数据的地方,用户态进程进入内核后执行到这里就会被锁住挂起,你的目的也就达到了。当内核的进程得到数据时,解开该锁,被锁住的用户进程就会马上激活。
游客

返回顶部