mengchen303
驱动牛犊
驱动牛犊
  • 注册日期2007-12-27
  • 最后登录2008-01-14
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望4点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:1940回复:3

嵌入式linux中usb插拔问题

楼主#
更多 发布于:2007-12-27 20:36
问题是这样的:
 在嵌入式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 ,难道它没有释放资源么?

请大侠多多解疑指点!
llss2007
驱动小牛
驱动小牛
  • 注册日期2007-09-25
  • 最后登录2010-03-16
  • 粉丝5
  • 关注0
  • 积分1001分
  • 威望123点
  • 贡献值0点
  • 好评度112点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-12-29 09:36
集线器监视着连接端口上每一条信号线的电压。外部设备在USB信号线上都有电阻,接入主机后集线器的信号线上的电压会上升,拔下设备后会降低。USB总线驱动程序会检测到这一变化,然后告诉系统。
在交流中前进
mengchen303
驱动牛犊
驱动牛犊
  • 注册日期2007-12-27
  • 最后登录2008-01-14
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望4点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-12-28 17:27
我的驱动当然不是我自己写的了,不过觉得应该是驱动的问题。正在调试跟踪。
另外想请教一下,拔掉usb时,linux是如何知道的呢?
是内核发送信号告诉驱动的么?
lelee007
驱动牛犊
驱动牛犊
  • 注册日期2007-12-28
  • 最后登录2011-04-03
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-12-28 15:35
看你的驱动里面怎么做的了
跟踪一下
游客

返回顶部