现象:在对usb接口的5G模组灌包时出现异常打印,xhci-hcd xhci-hcd.0.auto:ERROR unkown event type 37
irq中断除了irq()回调函数xhci_msix_update()也在调用,是不是xhci_msi相关的更新也要合上去???
// https://blog.csdn.net/u011037593/article/details/127162045
/ USB Gadget Driver定义了很多trace event,使用者可以在用户空间通过ftrace接口,追踪USB Gadget Driver的行为;
/用户空间接口路径为/sys/kernel/debug/tracing/events/dwc3:包含了分配USB请求(dwc3_alloc_request)、释放USB请求(dwc3_free_request)、dwc3事件(dwc3_event)、控制请求(dwc3_ctrl_req)、USB请求回调(dwc3_gadget_giveback)、短点命令(dwc3_gadget_ep_cmd)、读写dwc3控制器寄存器(dwc3_readl、dwc3_writel)等;
/UDC Framework定义的trace event如下,用户空间接口路径为/sys/kernel/debug/tracing/events/gadget:包含了分配USB请求(usb_ep_alloc_request)、释放USB请求(usb_ep_free_request)、USB请求回调(usb_gadget_giveback_request)、清除端点halt状态(usb_ep_clear_halt)、设置端点halt状态等(usb_ep_set_halt)、使能端点(usb_ep_enable)、禁止端点(usb_ep_disable)、连接主机(usb_gadget_connect)、断开与主机的连接(usb_gadget_disconnect)等事件;
/ 扩大缓冲区
# 扩大缓冲区,避免trace log被覆盖。 for i in {0..3}; do echo 1024000 > ${TRACE_PATH}/per_cpu/cpu$i/buffer_size_kb done
/ Transfer Complete表示usb一个事件的完成
// https://zhuanlan.zhihu.com/p/256232317
/控制传输(Control Transfhttps://zhuanlan.zhihu.com/p/256232317ers)、中断传输(Interrupt Transfers)、批量传输(Bulk Transfers)、同步传输(Isochronous Transfers,iso package等时数据包)称之为四大传输
//kernel_patch
https://patchwork.kernel.org/project/linux-arm-kernel/list/
usb学习:
// https://www.cnblogs.com/wen123456/p/14281912.html
/USB XHCI HOST有三种RING: COMMAND, EVENT 与TRANSFER;
/TRANSFER TRB有以下几种类型:针对USB CONTROL TRANSFER的SETUP, DATA, STATUS TRBs;针对BULK, INTERRUPT, ISO TRANSFER的NORMAL TRB;针对ISO TRANSFER的ISOCH TRB (ISO TD由一个ISOCH TRB与0个或多个NORMAL TRB构成)
/usb为主从关系,设备不能主动向主机发送任何消息;驱动中的中断是从设备设定的一个时间间隔,主设备区轮询查看;
/OTG设备既能充当HOST,亦能充当SLAVE,也即DRD(Dual-role-devices)
/UDC(USB设备控制器)、HCD(host control)
/usb主机控制器驱动分析:drivers\usb\dwc3\Core.c -> static int dwc3_core_init_mode(struct dwc3 *dwc) { switch (dwc->dr_mode) case USB_DR_MODE_HOST:} -> ret = platform_device_add(xhci) -> 匹配平台驱动usb/host/xhci-plat.c
//驱动目录drivers/usb/*
usb/serial usb 串行设备驱动 (例如usb 3G卡、蓝牙等)
usb/storage usb 大储量磁盘驱动(u盘)
usb/host usb host usb主机控制器驱动(嵌入式otg:dwc_otg)
usb/core usb 核心一些处理代码,所有的驱动相关处理都在这里,也都注册到它里面。
usb/usb-skeleton.c 经典的usb客户驱动框架,可以参考
usb/atm usb猫驱动
usb/musb mtk和sprd的usb控制器驱动都是musb
usb/usbip usbip驱动提供了linux下USB 透传(bypass)的功能,或者说usb over tcp,利用以太网,将usb 设备共享到另外一端。
/《USB Complete》,全面介绍了 USB 相关的知识
《USB in a Nutshell》,介绍了 USB 的必要知识
//usb3.0驱动分析
/(5条消息) USB xHCI控制器使用总结_静思心远的博客-CSDN博客
xHCI控制器实际上有两个roothub,一个是roothub 2.0的,一个是roothub 3.0。因为xHCI的这个特性,在Linux内核里,如果发现了PCI或者PCIe总线上具有xHCI控制器,那么驱动会向USB Core子系统注册两个roothub控制器,一个是roothub 2.0,一个是roothub 3.0,代码参见xhci-pci.c中的xhci_pci_probe()函数。
//(5条消息) USB驱动之XHCI驱动调试总结一_Ming_Kernel的博客-CSDN博客
//x86平台的usb使用
(5条消息) USB xHCI控制器使用总结_静思心远的博客-CSDN博客
//urb
(10条消息) usb host 驱动之 urb_usb_submit_urb_Water Water Water的博客-CSDN博客
//awei:usb
/usb访问设备的两种途径:①通过设备驱动程序(也可以采用封装好的libusb库实现访问)-->host驱动-->设备 ②通过host驱动直接访问设备