最近在调试一个usb主芯片,外接了四个devices.芯片->hub->4 devices.

开机启动时,时好时坏.有时候能正常识别,有时候会崩溃掉.

现象为:

[  468.495391] PC is at UBIRunIntIN0+0x378/0x5d0 [hcd903x]

反汇编看代码总是崩溃在bulkin的数据接收上,一直没明白,以为是芯片驱动问题.

后来经过仔细测试发现开机启动时,每次启动时,只要识别不出devices时就会崩溃.

发现是hub_port_reset函数中的set_port_feature失败,发现进入cannot reset port %d (err = %d)\n",打印-110.内核中-110为,ETIMEDOUT.

跟踪代码发现是usb_fill_control_urb返回失败.

目前的现象纠结于两个问题:1,为什么hub会识别不出device.2,即使识别不出来device,也不应该崩溃掉.

现在没有什么结论.

问题已解决,主要是由于usb_submit_urb的参数用的是GFP_KERNEL,把其用到的地方,全改为GFP_ATOMIC,重启几十次,没有发现崩溃的现象.

总结得失:

这次崩溃现象之所以花了两天才解决,还是因为对linux的调度不熟悉.崩溃之后,总是纠结于最底层驱动的锁,信号量之类的地方,看结构体是否被抢占,而没有想到是驱动应用层直接调用时就是可抢占的权限.后来在网上查了查,有一英文网站提了一句这个地方,没想到真解决了.

以后得注意两方面:

1,加强利用网络知识,尤其是谷歌的利用.

2,多学习linux知识,多从原理上想问题.而不是去瞎猜.

作者:张亮校

写于:2012.12.27

更改:2012.12.28

usb host驱动程序崩溃的问题相关推荐

  1. 一步一步解决 kernel 2.6 usb host driver

    2.6在s3c2410上usb host不工作的直接结果就是提示110错误:  usb 1-1: device descriptor read/64, error -110 追踪错误代码,我们来看看能 ...

  2. USB Host Device And OTG

    USB是一种数据通信方式,也是一种数据总线,而且是最复杂的总线之一.  硬件上,它是用插头连接.一边是公头(plug),一边是母头(receptacle).例如,PC上的插座就是母头,USB设备使用公 ...

  3. 详解WinCE下USB Host驱动开发(2)

    当用户需要卸载USB Host设备驱动时,将会调用USBUnInstallDriver函数 BOOL USBUnInstallDriver();     它与USBInstallDriver类似,不过 ...

  4. 【移植驱动到Linux3.4.2内核之二】LCD,触摸屏,按键,USB等驱动程序的移植心得总结

    学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 文章目录 一移植驱动程序心得体会 二移植LCD驱动程序记录 三移植按 ...

  5. USB HOST与 USB OTG的区别及工作原理

    在SmartQ 7上面,同时存在USB HOST与 USB OTG两个接口,我想问一下,这两个接口有什么区别么?我怎么认为HOST属于是多余呢? 麻烦高手解答,感激不尽!!! 零 USB背景知识 US ...

  6. 关于kernel2.6中USB host controller driver 的问题

    2.6在s3c2410上usb host不工作的直接结果就是提示110错误:  usb 1-1: device descriptor read/64, error -110 追踪错误代码,我们来看看能 ...

  7. TI Cortex-M4 USB Host CDC 驱动详解及源代码

    1. USB CDC介绍 USB的CDC类是USB通信设备类(Communication Device Class)的简称.CDC类是USB组织定义的一类专门给各种通信设备(电信通信设备和中速网络通信 ...

  8. linux 重新加载驱动程序,在linux中模拟设备驱动程序崩溃。让python重新加载i

    你的代码现在崩溃的原因是,当驱动程序崩溃时,代表你的硬件的设备专用文件就会消失.您的代码仍然具有这些设备的打开文件句柄.根据您的代码在幕后到底在做什么,它可能会尝试向一个现在无效的文件句柄发出IOCT ...

  9. WINCE对USB HOST供电的控制

    上图的USBH_EN(对应于GPG6)是用于对USB HOST供电的,这个需要在BSP中进行控制,可在init.c文件的OEMInit() ->ConfigureGPIO()函数中假如下面的代码 ...

最新文章

  1. UI产品设计流程中的14个要点
  2. 《零基础入门学习Python》学习过程笔记【30模块中的函数,os模块,ospath模块中的函数(看了一点)】...
  3. 摘要:ASP.NET的路由
  4. mac下antlr4命令使用
  5. 少撸两局教你搭个博客玩
  6. HashMap的工作原理--重点----数据结构示意图的理解
  7. xcap工具使用心得
  8. 终于讲透了,史上最详细的RS485串口通讯!
  9. 魅族16s解决杀后台方法!
  10. sql 语句,主键外键详解
  11. 《老路用得上的商学课》96-100学习笔记
  12. Mac解决Error: No such file or directory @ rb_sysopen报错问题
  13. word如何用制表符对齐公式
  14. 名词性从句的时态规则
  15. .net 简单的后台合成图片
  16. Java 1082 射击比赛
  17. microsoftvisual c++ runtime library错误
  18. 数字藏品系统开发,APP小程序成品源码搭建开发
  19. linux barrier,Linux文件系统的barrier:启用还是禁用
  20. solr6 mysql_solr6.6.0学习(2)创建核心和与Mysql数据库连接

热门文章

  1. 给身份上把锁 阻截非法侵入
  2. 一小时快速掌握 SQL 语法
  3. Microsoft Project安装失败怎么办?
  4. 日元兑人民币用计算机怎么算,日元换算计算器(韩元换算人民币计算器)
  5. npm中 install -save 和 -save-dev以及缩写形式
  6. 9 个很酷的 CMD 命令
  7. Incorporating Copying Mechanism in Sequence-to-Sequence Learning
  8. Visual Studio 2013调试后弹不出窗口
  9. Linux-Audio Codec
  10. jenkins实现项目自动部署