分类: LINUX
2013-03-24 12:28:25
很固定的三步
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:
handler是处理函数
意思是当收到某一个特定类型信号时候执行某一个处理函数~~!