Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1319621
  • 博文数量: 168
  • 博客积分: 2124
  • 博客等级: 大尉
  • 技术积分: 2590
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-16 23:51
文章分类

全部博文(168)

文章存档

2014年(6)

2013年(74)

2012年(71)

2011年(17)

分类: LINUX

2013-03-24 12:28:25

ldd3 p169


应用程序        

  很固定的三步

        fcntl(fd, F_SETOWN, getpid());//指定一个文件为属主,与驱动程序联系起来

        Oflags = fcntl(fd, F_GETFL); //取得open时代文件标志符        

        fcntl(fd, F_SETFL, Oflags | FASYNC); //每当FASYNC标志状态改变时,linux设备驱动程序中的fasync()函数将得以执行。

当然还有一步
signal(SIGIO, my_signal_fun);//底层驱动发上来SIGIO的信号,然后调用my_signal_fun

驱动程序



1.定义一个fasync_struct 类型的变量
2.在fops中增加要使用的函数.fasync = xxx_fasync
3.实现这个函数
4.调用fasync_helper进行初始化
return fasync_helper (fd, filp, on, &button_async);
(往往就作为第三步的返回值
5.在需要发信号的地方使用

kill_fasync (&button_async, SIGIO, POLL_IN);
/*将button_async,发一个SIGIO信号,告诉设备可读*/

6.在release中
从异步通知列表中删除该flip
fasync(-1,filp,0)



ps:

表头文件 #include
功 能: 设置某一信号的对应动作
函数原型 :void (*signal(int signum,void(* handler)(int)))(int);
或者:typedef void(*sig_t) ( int );
sig_t signal(int signum,sig_t handler);
明白了吧,signum,是信号类型

handler是处理函数

意思是当收到某一个特定类型信号时候执行某一个处理函数~~!


阅读(6061) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~