当前位置: 技术问答>linux和unix
Linux下USB驱动问题
来源: 互联网 发布时间:2016-06-27
本文导语: 现在我要处理的是usb gadget serial driver ,在USB连接或者拔出的时候,有一个用户态驱动需要准确获取到通知并开始相关工作. usb连接上的时候,开始读写/dev/ttyGS0,与系统的另一个驱动之间进行全双工的交换数据,当usb断...
现在我要处理的是usb gadget serial driver ,在USB连接或者拔出的时候,有一个用户态驱动需要准确获取到通知并开始相关工作. usb连接上的时候,开始读写/dev/ttyGS0,与系统的另一个驱动之间进行全双工的交换数据,当usb断开的时候,需要停止相关的操作.因为是双向通讯,所以select()里面有/dev/ttyGS0跟系统另一个驱动的两个fd.
现在的问题是:/dev/ttyGS0并不是动态创建,是静态就已经在系统里面的.无论usb有没有连接上,/dev/ttyGS0都能够被成功open.检测USB拔插不能通过udev脚本或者NETLINK消息,也要求尽量不修改usb gadget serial driver.
所以我使用了异步IO,也就是检测/dev/ttyGS0上的SIGIO, 第一个SIGIO来的时候,我认为USB已经连接上,可以开始工作了,但是当USB断开的时候,读写部分会停在select()处等待,没有机会去调用read来触发一个EOF错误. 也就是说,现在没有办法知道USB断开的消息.
不知道有没有别的办法能够检测usb gadget serial driver里面USB的断开与连接的,是不是一定得去修改usb gadget serial driver
现在的问题是:/dev/ttyGS0并不是动态创建,是静态就已经在系统里面的.无论usb有没有连接上,/dev/ttyGS0都能够被成功open.检测USB拔插不能通过udev脚本或者NETLINK消息,也要求尽量不修改usb gadget serial driver.
所以我使用了异步IO,也就是检测/dev/ttyGS0上的SIGIO, 第一个SIGIO来的时候,我认为USB已经连接上,可以开始工作了,但是当USB断开的时候,读写部分会停在select()处等待,没有机会去调用read来触发一个EOF错误. 也就是说,现在没有办法知道USB断开的消息.
不知道有没有别的办法能够检测usb gadget serial driver里面USB的断开与连接的,是不是一定得去修改usb gadget serial driver
|
假如你的驱动名字叫 usb-gadget-serial
ls /sys/bus/usb/drivers/usb-gadget-serial
看看目录下有没有设备,如果没有就是设备已经拔掉了。
你可以使用 inotify 来监视该目录,来实现热插拔事件的效果。
http://www.ibm.com/developerworks/cn/linux/l-inotify.html
ls /sys/bus/usb/drivers/usb-gadget-serial
看看目录下有没有设备,如果没有就是设备已经拔掉了。
你可以使用 inotify 来监视该目录,来实现热插拔事件的效果。
http://www.ibm.com/developerworks/cn/linux/l-inotify.html