usb hid gadget调试 在PC上可以使用usbview 查看usb设备的信息, ubuntu可以下载tgz的包,编译一下就可以,感觉比较实用。 在调试hid gadget时,发现接收数据时多了一个数据头(struct usb_ctrlrequest),并且第一次接收不到数据,为了查找原因,看了一下内核代码,使用的是A20芯片。 gadget驱动,linux本身有框架可以看一下内核代码(drivers/usb/gadget)。usb接收过来的数据存放在struct usb_request结构中,发现此时的数据就是错误的,只能看udc驱动代码(负责从usb总线接收/发送数据,一般有芯片厂商编写),每个平台有差异,但框架是相同的,底层的所有数据传输主要是在 udc的中断控制函数中处理的,一般都是通过request_irq注册一个中断处理函数xx_udc_irq(),usb通信都是由host发起的,gadget只能通过中断来处理所有的操作。可以参考一下s3c2410_udc.c,发现大家的实现都是一样的,名字差不多。 中断处理函数xx_udc_irq()中处理,gadget的枚举操作,都在里面处理,通过EP0(控制传输)的处理根据中断调用xx_udc_handle_ep0(), 其他方式的传输(中断,批量,实时)调用xx_udc_handle_ep()。<