[应用方案] M484通过脚本测试iOS 11.4+的USB BUG

[复制链接]
1303|6
 楼主| vsfopen 发表于 2018-7-20 14:06 | 显示全部楼层 |阅读模式
iOS 11.4更新中,苹果为USB加上了第5个配置,在第4个的基础上,用ncm网卡换掉了性能不佳的ipheth。不过,貌似在读取字符串描述符的时候,会引起错误,从而引起内核崩溃,手机重启。

VSF最近正好做了脚本系统,可以通过脚本控制USB外设,就用这套脚本系统,测试以下iOS里的这个BUG。

iOS_reset_bug.png
这里,接上iPhone手机后(11.4+),系统检测到之后,会先读取product字符串和vendor字符串,这里没有问题,然后会读取配置5的配置字符串。读取配置5字符串的时候,脚本卡住,因为urb执行没返回,这个时候断开iPhone手机,然后urb出错返回,可以看到描述符数据是正常的,但是,这时手机重启。

贴上M484测试用的脚本代码:
  1. wait_dev(pid, vid)
  2. {
  3.         var dev;
  4.         while (1)
  5.         {
  6.                 dev = usbhdev_find(pid, vid);
  7.                 if (dev != 0)
  8.                 {
  9.                         return dev;
  10.                 }
  11.                 timer_delayms(100);
  12.         }
  13. }

  14. var usbhdev dev = wait_dev(0x05AC, 0x12A8);
  15. print('iPhone Connected\r\n');

  16. var vendor_str = dev.transfer(0 | USBH_EPIN, USBH_TRANS_CTRL, 0x80, 0x06, 0x0301, 0x0409, 255);
  17. print('vendor string: ', vendor_str, '\r\n');

  18. var dev_str = dev.transfer(0 | USBH_EPIN, USBH_TRANS_CTRL, 0x80, 0x06, 0x0302, 0x0409, 255);
  19. print('device string: ', dev_str, '\r\n');

  20. var config5_str = dev.transfer(0 | USBH_EPIN, USBH_TRANS_CTRL, 0x80, 0x06, 0x030C, 0x0409, 255);
  21. print('config5 string descriptor: ', config5_str, '\r\n');


想试一下的话,可以看这里:
https://bbs.21ic.com/icview-2530324-1-1.html
这个是GD32运行脚本系统的说明,如果是用M484(带USB主机口)的话,工程位于:vsf/example/vsfaio/proj/EWARM_M480/demo.eww
huangcunxiake 发表于 2018-7-20 22:33 | 显示全部楼层
看不懂,看来我太菜了。
zhuotuzi 发表于 2018-7-20 22:53 | 显示全部楼层
iOS是苹果手机吧
 楼主| vsfopen 发表于 2018-7-21 10:06 来自手机 | 显示全部楼层
zhuotuzi 发表于 2018-7-20 22:53
iOS是苹果手机吧

是的,还有ipad
 楼主| vsfopen 发表于 2018-7-21 11:05 | 显示全部楼层
huangcunxiake 发表于 2018-7-20 22:33
看不懂,看来我太菜了。

https://bbs.21ic.com/icview-2532468-1-1.html
MCU脚本系统的一些简单介绍。
jasontu 发表于 2018-7-23 08:54 | 显示全部楼层
建议还是抓usb package,因为看起来像get config report. 而已。
有回应该是封包有发成功,但後面的流程才有问题才对,才会让usb devices产生reset,或halt住。


 楼主| vsfopen 发表于 2018-7-23 09:44 | 显示全部楼层
jasontu 发表于 2018-7-23 08:54
建议还是抓usb package,因为看起来像get config report. 而已。
有回应该是封包有发成功,但後面的流程才 ...

在看一下,这个是读取1,2,12号字符串描述符。出问题的原因已经知道,iOS会识别主机系统。不过即使错误的USB请求,引起手机复位的话,也是不应该的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

90

主题

325

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部