linux usb驱动——Gadget代码介绍

通常网上关于介绍USB Gadget的资料都是基于Linux2.6.32或在这以前的版本,做者在关注了Linux2.6.37和Linux3.0.4版本的内核,USB Gadget的一些API已经与Linux2.6.32的不一样了。可是那些关键的数据结构仍是同样滴。
Linux USB Gadget分三层架构:
层次关系从上到下
一层:USB Gadget功能层。BSP/Driver开发者一般是要实现这一层,从而实现一个具体的设备驱动,如Anddroid在此层实现了adb,mtp,mass_storage等。浏览参考关注此层代码时,会发现“composite”是此层的关键字,此层中关键的数据结构是:struct  usb_composite_driver。这一层的驱动文件通常为:driver/usb/gadget/android.c(android实现的)或driver/usb/gadget/serial.c(传统Linux实现的USB转串口)。
二层:USB设备层。这一层是Linux内核开发维护者实现的,与咱们没太大关系,不用咱们操心,咱们只关心其的一些接口就行。浏览参考关注此层时,会发现“gadget”是此层的关键字,此层的关键数据结构是:usb_gadget_driver,usb_composite_dev。这层主要的一个驱动文件为:driver/usb/gadget/composite.c
三层:USB设备控制器驱动层。这一层主要是与CPU、CPU USB控制器有关,与硬件紧密相关,这一层也比较头痛,主要它和USB控制器牵扯在一块儿,涉及有寄存器、时钟、DMA等等。可是这一层每每是由芯片厂商去实现。咱们通常仅需在板级文件中处理好所须要的USB接口便可。这层的关键字就是“UDC”,主要驱动文件命名含“udc”关键字,通常与CPU或芯片厂商有关,如driver/usb/gadget/xxx_udc.c。
相关文章
相关标签/搜索