博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

驱动程序与用户程序之间的通信(原创)

Posted on 2009-03-30 11:22  breathing  阅读(382)  评论(0编辑  收藏  举报

    驱动程序也是一个进程,只不过运行在内核态。在用户程序里,我们对驱动程序的调用通常通过一些接口函数,如open, close, read, write, ioctl等。在驱动程序里可能还会有驱动处理函数。当驱动响应硬件的中断时,会调用这个函数。虽然在中断响应函数中只能做有限的事情,但是我们期望这个中断能告诉用户程序,去让用户程序做一些改变。

      驱动如何通知用户程序,一个是在内核态,一个是在用户态。

      我们可以使用linux 中的信号。让驱动中的中断响应函数发送信号给用户程序,用户程序捕捉这个信号,并注册一个函数指针来响应这个信号。这样当硬件中断到来的时候,用户程序就会做出响应。我们还需要做的一件事情是让驱动程序得到用户程序的进程PID, 这是因为在发送一个信号的时候,通常需要接收这个信号的进程的PID。可以在open这个驱动的时候将进程getpid() 取得的进程号,write到驱动中,供驱动调用。注意的是,驱动中发射信号的函数kill_proc();