iOS 11.4更新中,苹果为USB加上了第5个配置,在第4个的基础上,用ncm网卡换掉了性能不佳的ipheth。不过,貌似在读取字符串描述符的时候,会引起错误,从而引起内核崩溃,手机重启。
VSF最近正好做了脚本系统,可以通过脚本控制USB外设,就用这套脚本系统,测试以下iOS里的这个BUG。
这里,接上iPhone手机后(11.4+),系统检测到之后,会先读取product字符串和vendor字符串,这里没有问题,然后会读取配置5的配置字符串。读取配置5字符串的时候,脚本卡住,因为urb执行没返回,这个时候断开iPhone手机,然后urb出错返回,可以看到描述符数据是正常的,但是,这时手机重启。
贴上M484测试用的脚本代码:
wait_dev(pid, vid)
{
var dev;
while (1)
{
dev = usbhdev_find(pid, vid);
if (dev != 0)
{
return dev;
}
timer_delayms(100);
}
}
var usbhdev dev = wait_dev(0x05AC, 0x12A8);
print('iPhone Connected\r\n');
var vendor_str = dev.transfer(0 | USBH_EPIN, USBH_TRANS_CTRL, 0x80, 0x06, 0x0301, 0x0409, 255);
print('vendor string: ', vendor_str, '\r\n');
var dev_str = dev.transfer(0 | USBH_EPIN, USBH_TRANS_CTRL, 0x80, 0x06, 0x0302, 0x0409, 255);
print('device string: ', dev_str, '\r\n');
var config5_str = dev.transfer(0 | USBH_EPIN, USBH_TRANS_CTRL, 0x80, 0x06, 0x030C, 0x0409, 255);
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
|