usb_submit_urb
时间: 2023-07-08 12:47:42 浏览: 289
usb_submit_urb() 函数是 Linux USB 核心中的一部分,它用于将 USB URB (USB Request Block) 提交到 USB 设备上进行异步传输。在 USB 通信过程中,主机和设备之间的数据传输是通过 URB 进行的。函数原型如下:
```
int usb_submit_urb(struct urb *urb, int mem_flags);
```
其中,`urb` 参数是要提交的 USB URB 结构体指针,`mem_flags` 参数指定了 URB 内存的分配方式。
该函数的返回值为 0 表示提交成功,否则表示提交失败。在提交 URB 之前,需要先初始化 URB 结构体并设置相应的回调函数以处理传输完成时的事件。
相关问题
usb_submit_urb代码解释
`usb_submit_urb()`是User Space到Kernel Space交互的一个函数,它是USB(Universal Serial Bus)编程中的关键部分,在Linux内核中主要用于异步传输控制请求(URB, Uneral Request Buffer)。URB是一个包含描述USB数据传输任务的数据结构,包括传输类型、数据缓冲区、回调函数等信息。
代码解释如下:
```c
struct urb {
struct list_head list;
struct device *device; // 设备句柄
struct usb_host_interface *interface; // 接口描述符
union {
struct usb_ctrlrequest *ctrl_request; // 控制传输
struct scatterlist sg[0]; // 数据传输
};
gfp_t mem_flags; // 内存分配标志
struct completion done; // 完成事件通知
struct task_struct *context; // 回调线程上下文
struct usb_dev_instance *dev_instance; // 设备实例
};
void usb_submit_urb(struct urb *urb, gfp_t mem_flags);
```
在实际使用中,开发者首先会创建一个`struct urb`实例,填充必要的参数(如设备句柄、传输类型、数据缓冲区等),然后调用`usb_submit_urb()`将该URB提交给USB主机控制器。函数会在后台处理这个请求,一旦完成,就会触发回调函数(在`urb->done`事件中指定),通知应用程序数据已经准备好或者发生了错误。
usb_fill_bulk_urb
"usb_fill_bulk_urb" 是 Linux USB 核心中的一个函数,用于填充一个 USB 批量数据传输请求结构体(URB)。批量传输是 USB 设备和主机之间进行大量数据传输的一种机制,用于在数据传输期间提供可靠性和效率。"usb_fill_bulk_urb" 函数将给定的 URB 结构体填充为一个批量数据传输请求,并指定传输的方向、数据缓冲区、数据长度等参数。填充完 URB 后,还需要使用 "usb_submit_urb" 函数将 URB 提交给 USB 核心以便进行传输。该函数是 USB 驱动程序的重要组成部分。
阅读全文