关于“Process xxx called USBDEVFS_CLEAR_HALT for active endpoint xx”

当用户级别的应用错误调用USBDEVFS_CLEAR_HALT导致USB设备异常,尤其是在一个USB键盘接口的Android板上,可能会出现通信混乱。问题源于Linux系统对这种操作的警告。通过分析设备MCU的USB库代码,发现当接收到clear_feature请求时,如果端点未处于stall状态,设备不应响应。修复方案是检查端点状态,仅在stall时响应,避免了异常数据导致的系统紊乱。该问题在国产MCU库中尤为明显,相比STM32等其他品牌,其异常处理不够健壮。
摘要由CSDN通过智能技术生成

这本来是linux下的问题,由于在用户级的app里调用了驱动函数对usb设备进行了clear halt的操作,linux的开发者于是在log里打印出这个警告,用以提示程序员们:这样做可能有问题!具体请膜拜这个帖子:[PATCH] USB: complain if userspace resets an active endpoint — Linux USB

于是,真的有问题了。我的设备实现了一个usb键盘接口,接在一个android板上,没招谁没惹谁的跑着,偶尔发点数据给上位机而已。突然之间,收到了上位机给的这个clear_halt的请求,于是听话地来了个clear,然后本来好好的通信变得紊乱,链路上的数据直接被当做键盘值丢给主机,从抓取数据上看,完全是不合理的按键的组合,导致android系统瞎响应,随机打开某些app。。。

我真难,真的----linux我还没真正上过项目呢。。后来主板驱动开发人员说,这个命令不是发给你的设备的。。。但为什么我受到了,搞不懂哎。。既然主机那边不归我管,那就练练内功吧,看自己设备mcu的usb库代码。当然少不了mcu的支持朋友啦,人家给了个usb协议分析仪,神器!!确定了,设备真的收到了clear_feature请求,随后就抓到一段乱七八糟的键盘码数据。结合支持方 建议,对usb协议库中对应的代码做了处理:

如果接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值