周末这两天,过的太失败了,诸事不顺,下次出门前一定先看看黄历。
用USB协议分析仪抓了一个U盘启动流程的包,对于了解USB协议和U盘启动有很大的帮助。
原始抓包是一帧一帧的USB协议包,很不直观,LeCroy这个软件提供了强大的分析功能,抓包时设置了过滤条件,解析SCSI命令,并按应用层展开,最终的效果如上图所示。
从左向右,最左一栏是transaction,HS表示High Speed, Control是传输模式,其它传输模式是Bulk,Interrupt,Isochronous。ENDP是端点。点击Data左上方的箭头,可以展开查看当前数据,可以用文本和16进制两种方式。
制作启动U盘时,有三种方式,FDD HDD ZIP,通常都是HDD,如果用extlinux制作的话,默认就是HDD,这个兼容性最好。
USB启动流程,首先读取固件的描述符,得到设备类型,接口信息,端点信息,识别为Mass Storage,就发送标准的SCSI命令,读取U盘的第一个扇区,即MBR,读完后,读取引导信息。
关于启动U盘的制作,参见extlinux的官网,USB的重枚举,可以看Cypress的官方文档和USB2.0协议。这里只是做个抛砖引玉的简单介绍。