一旦urb被USB驱动程序正确地创建和初始化后,就可以递交到USB核心以发送到USB设备了。如果函数调用成功,当urb被HC处理结束的时候,urb的结束处理例程(urb->complete)正好被调用一次,当该结束处理函数被调用时,USB核心就结束了对urb的处理,此刻对urb的控制器权就返回给设备驱动程序了。 函数usb_submit_urb()用来递交U...
USB(Universal Serial Bus)是一种常见的外部总线标准,用于连接计算机和外部设备,例如键盘、鼠标、打印机和存储设备等。在Linux系统中,USB设备的操作由内核中的USB子系统管理。usb_submit_urb函数是USB子系统中的一个重要函数,用于处理USB设备与内核之间的通信。 在Linux系统中,USB设备不同于其他外设,它们通常会以一种...
为了提交 URB,客户端驱动程序使用IOCTL_INTERNAL_USB_SUBMIT_URB请求,该请求通过 I/O 请求数据包 (IRP) 类型IRP_MJ_INTERNAL_DEVICE_CONTROL传递到设备。 USB 驱动程序堆栈处理完 URB 后,驱动程序堆栈将使用URB结构的Status成员返回特定于 USB 的状态代码。
如果函数调用成功,当urb被HC处理结束的时候,urb的结束处理例程(urb->complete)正好被调用一次,当该结束处理函数被调用时,USB核心就结束了对urb的处理,此刻对urb的控制器权就返回给设备驱动程序了。 函数usb_submit_urb()用来递交URB,它在对URB进行设置后,调用主机控制器函数usb_hcd_submit_urb()来完成递交操作。
usb_init_urb(urb); return urb; } 这个函数有两个参数,一个是iso_packets.仅仅用于ISO传输.表示ISO数据包个数,如果用于其它类型的传输,此参数为0.另一个是mem_flags.是分配内存的参数. Usb_init_urb()如下: void usb_init_urb(struct 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发送结果。
IOCTL_INTERNAL_USB_SUBMIT_URB是內核模式 I/O 控制要求。 此要求以USB中樞 PDO 為目標。 主要程序代碼 IRP_MJ_INTERNAL_DEVICE_CONTROL 輸入緩衝區 Parameters.Others.Argument1指向 URB,這是可變長度的結構。URB 的 UrbHeader.Function成員會指定 URB 類型。 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)。
调用函数(如驱动程序创建并初始化一个访问特定USB设备特定端点的urb ,驱动程序为每一次数据传输准备一个URB结构体,并填充相关字段。 调用函数(如usb_submit_urb())将URB提交给USB core。 USB core提交该urb到USB主控制器驱动程序:USB主控制器驱动程序根据该urb描述的信息,来访问USB设备; 主机控制器负责数据到设备...