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的信号才行。