(1)驱动中调用usb_unlink_urb( )或usb_kill_urb( )主动取消一个已经提交给usb控制器的URB 调用usb_unlink_urb( )之后,URB的status值为-104(ECONNRESET) 调用usb_kill_urb( )之后,URB的status值为-2(ENOENT) (2)当URB已经提交给某个usb设备,但该设备被remove了,硬件断开了,比如将模块从主机上拔掉,这种...
(1)驱动中调用usb_unlink_urb( )或usb_kill_urb( )主动取消一个已经提交给usb控制器的URB 调用usb_unlink_urb( )之后,URB的status值为-104(ECONNRESET) 调用usb_kill_urb( )之后,URB的status值为-2(ENOENT) (2)当URB已经提交给某个usb设备,但该设备被remove了,硬件断开了,比如将模块从主机上拔掉,这种...
在这个例子中,函数wait_for_urb_status会等待直到URB的状态变为expected_status,或者直到超时(timeout_ms毫秒)。 实现等待机制,直到USB URB达到期望状态: 等待机制可以基于上述的轮询方法,或者更高级一些,使用等待队列(wait queue)和信号量(semaphore)等同步机制。不过,由于USB URB的完成处理是异步的,通常更常见的是...
urb 参数指向要被初始化的urb 的指针;dev 指向这个urb 要被发送到的USB 设备;pipe 是这个urb 要被发送到的USB 设备的特定端点;transfer_buffer 是指向发送数据或接收数据的缓冲区的指针,和urb 一样,它也不能是静态缓冲区,必须使用kmalloc()来分配;buffer_length 是transfer_buffer 指针所指向缓冲区的大小;complet...
可是我驱动里没有设置超时的啊?我是想让驱动发出读请求后就一直等,直到设备端有数据返回。。。
为了提交 URB,客户端驱动程序使用IOCTL_INTERNAL_USB_SUBMIT_URB请求,该请求通过 I/O 请求数据包 (IRP) 类型IRP_MJ_INTERNAL_DEVICE_CONTROL传递到设备。 USB 驱动程序堆栈处理完 URB 后,驱动程序堆栈将使用URB结构的Status成员返回特定于 USB 的状态代码。
status:URB的当前状态。 transfer_flags:传输标志,如是否允许短包等。 transfer_buffer:发送数据到设备或从设备接收数据的缓冲区。 transfer_dma:用于DMA方式传输的缓冲区地址。 transfer_buffer_length:传输缓冲区的大小。 actual_length:URB结束后,实际发送或接收的数据长度。
使用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 ...
1.urb 结构体 USB 请求块(USB request block,urb)是USB 设备驱动中用来描述与USB 设备通信所用的基本载体和核心数据结构,非常类似于网络设备驱动中的sk_buff 结构体。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
USB 请求块的状态字段 (URB) 或fid_UsbdStatus在 Windows 驱动程序工具包 (WDK) 中以 inc\api\usb.h 中的USBD_STATUS的形式查找该值。 也可以使用USBD_STATUS。 本主题列出了符号名称和USBD_STATUS值的含义。 从问题事件向后读取 在错误事件之前记录的事件可能会提供有关错误原因...