如果函数调用成功,当urb被HC处理结束的时候,urb的结束处理例程(urb->complete)正好被调用一次,当该结束处理函数被调用时,USB核心就结束了对urb的处理,此刻对urb的控制器权就返回给设备驱动程序了。 函数usb_submit_urb()用来递交URB,它在对URB进行设置后,调用主机控制器函数usb_hcd_submit_urb()来完成递交操作。
staticvoidrx_urb_complete(struct urb *urb){intr;structzd_usb*usb;structzd_usb_rx*rx;constu8 *buffer;unsignedintlength;switch(urb->status) {case0:break;case-ESHUTDOWN:case-EINVAL:case-ENODEV:case-ENOENT:case-ECONNRESET:case-EPIPE: dev_dbg_f(urb_dev(urb),"urb %p error %d\n", urb, ...
submit urb是指用户空间请求内核提交一个USB请求块(URB)以进行与USB设备的通信。在Linux内核中,URB用于将数据传输到USB设备或从USB设备中接收数据。 出现submit urb错误可能会导致USB声卡无法正常工作,用户可能会听不到声音或者遇到其他声音相关的问题。提交urb错误可能是由多种原因引起的,包括驱动程序问题、硬件故障以及...
IOCTL_INTERNAL_USB_SUBMIT_URB是內核模式 I/O 控制要求。 此要求以USB中樞 PDO 為目標。 主要程序代碼 IRP_MJ_INTERNAL_DEVICE_CONTROL 輸入緩衝區 Parameters.Others.Argument1指向 URB,這是可變長度的結構。URB 的 UrbHeader.Function成員會指定 URB 類型。 URB 的長度以及任何其他成員的意義取決於...
linux usb_submit_urb是Linux内核中与USB通信相关的一个重要函数。在红帽操作系统中,USB设备的驱动程序会使用这个函数来向内核发送USB Request Blocks(URB),以实现USB设备与操作系统之间的通信。 USB(Universal Serial Bus)是一种常见的外部总线标准,用于连接计算机和外部设备,例如键盘、鼠标、打印机和存储设备等。在Li...
使用usb_alloc_urb()函数分配urb结构体,结束后使用usb_free_urb()释放这个结构体。 struct urb *usb_alloc_urb(int iso_packets, gfp_t mem_flags) /*用于分配urb结构体给usb驱动使用*/ /* If the driver want to use this urb for interrupt, control, or bulk ...
记录一次报错信息【usb_submit_urb(Ctrl) failed: -19】 原因:插入的USB设备(如鼠标、键盘)有问题 解决:重新插拔一下,或者换个USB接口试一试。
调用函数(如驱动程序创建并初始化一个访问特定USB设备特定端点的urb ,驱动程序为每一次数据传输准备一个URB结构体,并填充相关字段。 调用函数(如usb_submit_urb())将URB提交给USB core。 USB core提交该urb到USB主控制器驱动程序:USB主控制器驱动程序根据该urb描述的信息,来访问USB设备; 主机控制器负责数据到设备...
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,客户端驱动程序使用IOCTL_INTERNAL_USB_SUBMIT_URB请求,该请求通过 I/O 请求数据包 (IRP) 类型IRP_MJ_INTERNAL_DEVICE_CONTROL传递到设备。 USB 驱动程序堆栈处理完 URB 后,驱动程序堆栈将使用URB结构的Status成员返回特定于 USB 的状态代码。