阅读:1939回复:3
嵌入式linux中usb插拔问题
问题是这样的:
在嵌入式linux中,插上摄像头,写了一个程序开一个线程去不间断地采集视频数据,而主函数是做socket通信服务器端,将采集的视频数据发给客户端。当我拔掉摄像头时,问题就来了:采集视频数据的线程意外终止,并且在终端打印信息: usb.c: USB disconnect on device 4。 但整个程序进程没有退出,通过ps可以看到进程,而当我再插上摄像头,linux也没探测到usb已插上。只有当我kill哪个进程后,linux才意识到有usb插上了,输出: hub.c: USB new device connect on bus1/1, assigned device number 5 spca_core.c: USB SPCA5XX camera found. Type Vimicro Zc301P 0x303b 我不明白这是为什么?这个程序对linux探测usb有什么影响吗?难道是因为该程序一直占用着设备文件标识符的缘故?可当usb拔掉时,linux是已经知道USB disconnect ,难道它没有释放资源么? 请大侠多多解疑指点! |
|
沙发#
发布于:2007-12-28 15:35
看你的驱动里面怎么做的了
跟踪一下 |
|
板凳#
发布于:2007-12-28 17:27
我的驱动当然不是我自己写的了,不过觉得应该是驱动的问题。正在调试跟踪。
另外想请教一下,拔掉usb时,linux是如何知道的呢? 是内核发送信号告诉驱动的么? |
|
地板#
发布于:2007-12-29 09:36
集线器监视着连接端口上每一条信号线的电压。外部设备在USB信号线上都有电阻,接入主机后集线器的信号线上的电压会上升,拔下设备后会降低。USB总线驱动程序会检测到这一变化,然后告诉系统。
|
|
|