Linux 异步通知使用任意信号SIGUSR1的说明 kill_fasync(&a.async_queue, SIGUSR1,&
(2017-05-27 16:37:26)分类: Driver |
参考
http://bbs.csdn.net/topics/391000942?page=1
一般的,Linux使用异步通知发送信号都是SIGIO,在默认的情况下,即使调用
kill_fasync(&a.async_queue, SIGUSR1, POLL_IN);
应用层接收到的信号还是SIGIO
怎么能让驱动发出啥信号,应用就收到啥信号。
根据man说的,是用F_SETSIG。以信号SIGURG为例,我就加了一句:
fcntl(fd, F_SETSIG, SIGURG);
发现这个F_SETSIG奇葩啊~~~~~~编译的时候还要额外加编译选项,否则说未定义这个东西:
gcc -D_GNU_SOURCE xxx.c
之后我让驱动发SIGURG,应用就能够收到SIGURG了并执行相应的处理函数
对于Makefile加入-D_GNU_SOURCE
OBJS := usb_probe.o cmd.o main.o
HDRS := usb_probe.h
cmd.h
LIBS := -I/zynq/usb/libusb-1.0.9/_install/include/libusb-1.0
-L/zynq/usb/libusb-1.0.9/_install/lib -lusb-1.0
CC := arm-xilinx-linux-gnueabi-gcc -D_GNU_SOURCE
zynq_psw : $(OBJS) $(HDRS)
$(CC) $(OBJS) -o zynq_psw $(LIBS)
%.o:%.c $(HDRS)
$(CC) -Wall -c $< -o $@ $(LIBS)
.PHONY : clean
clean:
rm -rf *.o