红联Linux门户
Linux帮助

驱动程序使用异步通信问题

发布时间:2009-06-01 15:49:14来源:红联作者:huyaoyu
小弟正在搞嵌入式Linux。LDD3上第六章高级字符驱动里有提到驱动的异步通信的内容。具体说就是从驱动程序编写时实现fasync接口,但是我尝试一下发现每次都是Oops错误。

编写Linux设备驱动,怎么样才能从驱动向应用程序发送一个信号,表示某事件发生(比如说数据就绪)?

我试着写了一个GPIO中断的驱动,每次中断就发送一个SIGIO信号到特定pid的进程上,代码是根据LDD3的示例代码写的。我把驱动和测试驱动的源代码附上,还有Oops报错内容,大家来看看怎么回事!
文章评论

共有 2 条评论

  1. huyaoyu 于 2009-06-03 09:17:42发表:

    问题已解决,原因是出在设备数据的注册上。我将cdev设备写到自己的一个结构里了,必须使用LDD3推荐的方式将自己的数据结构的各个部分都初始化好,在open方法中利用container_of宏将自己的数据结构的指针得到,这样再调用fasync_helper时才不会报Oops。这样看来可能传给fasync_helper的是非法的指针,所以才会报Oops。
    小弟是新手,大家共同进步!

  2. xht0529 于 2009-06-02 18:12:42发表:

    不懂,帮你顶下。