如果函数调用成功,当urb被HC处理结束的时候,urb的结束处理例程(urb->complete)正好被调用一次,当该结束处理函数被调用时,USB核心就结束了对urb的处理,此刻对urb的控制器权就返回给设备驱动程序了。 函数usb_submit_urb()用来递交URB,它在对URB进行设置后,调用主机控制器函数usb_hcd_submit_urb()来完成递交操作。
调用usb_submit_urb()提交一个USB请求之后,该函数调用usb_hcd_submit_urb(),并最终调用usb_hcd的驱动成员(hc_driver类型)的urb_enqueue()函数。 ehci_hcd -- ECHI主机 ECHI HCD驱动属于HCD驱动的实例,用ehci_hcd结构体来表示,它通常会作为usb_hcd结构体的私有数据(hcd_priv)。 API函数 该drivers/usb/ehci-h...
->usb_hcd_submit_urb(urb, mem_flags) (core/hcd.c) 将提交的urb指派给合适的host controller driver,这里的HC遵守OHCI规范 ->rh_urb_enqueue(hcd, urb); 如果是Root Hub,调用该函数 ->rh_queue_status (hcd, urb); 如果是中断传输 ->usb_hcd_link_urb_to_ep(hcd, urb); 把urb挂到ep上 ->mod...
如果函数调用成功,当urb被HC处理结束的时候,urb的结束处理例程(urb->complete)正好被调用一次,当该结束处理函数被调用时,USB核心就结束了对urb的处理,此刻对urb的控制器权就返回给设备驱动程序了。 函数usb_submit_urb()用来递交URB,它在对URB进行设置后,调用主机控制器函数usb_hcd_submit_urb()来完成递交操作。
1:URB的创建 URB的创建是由usb_alloc_urb()完成的.这个函数会完成URB内存的分配和基本成员的初始化工作.代码如下: struct urb *usb_alloc_urb(int iso_packets, gfp_t mem_flags) { struct urb *urb; urb = kmalloc(sizeof(struct urb) + iso_packets * sizeof(struct usb_iso_packet_descriptor), ...
urb(usb request block)是在USB通信过程中的数据载体, 相当于i2c子系统中的i2c_msg, 网络设备驱动中的sk_buff usb_hcd描述一个SoC中的USB控制器驱动 核心方法 usb_fill_int_urb是注册urb的API, 是整个USB通信的核心数据封装 核心结构和方法详述 首先说的是那9个描述设备信息的结构, 其中的硬件信息是相互独立的...
系统启动时,HCD(Host Controller Driver)驱动会对挂载在USB总线上的设备进行枚举(热插拔同样会触发这个过程),对发现的设备将会创建一个usb_device设备对象(device,interface,endpoint三者之间的关系见第一章描述)并记录下来。通过lsusb命令,我们可以看到设备信息:本例usample是处于第1号总线的第004号设备,其Vendor厂商ID...
HCD解析urb,拿到数据与USB设备通信。 -> step 4 HCD把urb的所有权交还给驱动程序。 协议层里最重要的函数就是usb_control/bulk/interrupt_msg(),这里就简单地理一条线索, usb_control_msg() => usb_internal_control_msg() => usb_start_wait_urb() => usb_submit_urb() => usb_hcd_submit_urb =>...
3、提交 urb 一旦urb 被正确地创建并初始化, 它就可以提交给 USB 核心以发送出到 USB 设备. 这通过调用函数 usb_submit_urb 实现: int usb_submit_urb(struct urb *urb, gfp_t mem_flags); //struct urb *urb :指向被提交的 urb 的指针
int usb_submit_urb(struct urb*urb, gfp_t mem_flags) 其中urb即为提交给hcd的urb,mem_flags为申请urb中的hcprv,endpoint descripotr和 transfer descriptor时要用到的申请内存标志。 将urb提交给控制器后,由控制器进行处理,并通过回调函数返回urb发送结果。