一,usb composite device driver的编写过程
usb gadget三个层次的整合
probe()函数就是将上层的驱动赋值给底一层的驱动,而bind()函数则是从底层依次给上层的函数分配资源。
linux usb gadget体系结构,从下层到上层的三个层次分别为:UDC Driver,Linux Gadget Framework,composite driver。
二,抓取USB数据包的相关工具
BUS Hound(软件抓取数据包)
专业的USB数据包抓取仪器
三,android平台usb底层驱动和上层的交互
usb上层主要是依靠Usbdevicemanager.java类,Usbdevicemanager.java是在UsbService.java中启动的。
Android.c中的android_work()函数负责向上层上报消息,主要是通过kobject_uevent_env()函数,上层UEventObserver Class的主要作用是监听底层kernel发来的消息,kobject_uevent_env()
usbdevicemanager()函数:在该函数中会创建一个HandlerThread的线程,然后调用UsbHandler(thread.getLooper函数,该函数会调用UsbHandler(Looper looper)函数
上层界面对usb function的设置主要是在usbSettings.java文件里。
四,USB枚举的过程
枚举的含义:枚举就是从设备读取一些信息,知道设备是什么样的设备,如何进行通信,这样主机就可以根据这些信息来加载合适的驱动程序。主机通过获取设备描述符(主要是VID,PID,SN)来加载合适的驱动程序。
所有的传输都由主机发起,任何时刻整个USB体系内仅允许一个数据包的传输,即不同物理传输线上看到的数据包都是同一被广播的数据包USB 采用“令牌包”-“数据包”-“握手包”的传输机制
1 获取设备描述符
2 复位
3 设置地址
4 再次获取设备描述符
5 获取配置描述符
6 获取接口、端点描述符
7 获取字符串描述符
8 选择设备配置
五,USB眼图
眼图是用余辉方式累积叠加显示采集到的串行信号的比特位的结果,叠加后的图形形状看起来和眼睛很像,故名眼图。分析信号质量优劣;眼图测试又称“信号质量测试”
“眼”张开的大小表示了失真的程度,反映了码间串扰的强弱。在无码间串扰和噪声的理想情况下,波形无失真,每个码元将重叠在一起,最终在示波器上看到的是迹线又细又清晰的“眼睛”,“眼”开启得最大。当有码间串扰时,波形失真,码元不完全重合,眼图的迹线就会不清晰,引起“眼”部分闭合。若再加上噪声的影响,则使眼图的线条变得模糊,“眼”开启得小了.