1. static struct fasync_struct *button_async;

这里是建立一个fasync的结构体 此结构体将会被 kill_fasync(&button_async, SIGIO, POLL_IN); 调用。这个函数将会给APP程序发送信号。

2.  fasync_helper(fd, filp, on, &button_async);

这个函数将会把button_async 初始化

3. 在APP程序中 signal(SIGIO, my_signal_fun)

SIGIO 将会告诉内核APP可以从驱动里面搜索到信号 

4. my_signal_fun 是一个函数的handler 当得到信号之后,会调用这个函数

5. fcntl(fd, F_SETOWN, getpid())

//从驱动中得到pid 

oflags = fcntl(fd, F_GETFL);读出 从驱动中那个得到现在的FLAG

fcntl(fd, F_SETFL, oflags | FASYNC);  //set signal flag to this driver code 

把信号量的标志位写入flag的值

 

 

 

步骤: 1. 在驱动里面:需要利用fasync_helper 初始化结构体

2. kill_fasync 将会发送信号量给APP

3. APP需要知道驱动的pid 读出flag 然后写入FASYNC的信号才行。

 

posted on 2020-06-24 17:11  闲云潭影  阅读(216)  评论(0编辑  收藏  举报