Linux USB驱动相关细节知识

 1. 在usb_fill_bulk_urb,usb_fill_int_urb,usb_fill_control_urb都需要指定回调函数,当此URB请求完成时,usb core回调用此函数。

注意:urb 回调函数是在中断上下文运行, 因此它不应做任何内存分配, 持有任何信号量, 或任何可导致进程休眠的事情. 如果从回调中提交 urb 并需要分配新内存块, 需使用 GFP_ATOMIC 标志来告知 USB 核心不要休眠.

2. urb封装函数:

1) int usb_bulk_msg(struct usb_device *usb_dev,unsigned int pipe,void*data, int len, int*actual_length,int timeout)


功能:创建批量 urb 并发送到指定的设备, 接着在返回之前等待完成.

参数:
  struct usb_device *usb_dev :目标 USB 设备指针
  unsigned int pipe :目标 USB 设备的特定端点. 必须使用特定的宏创建.
  void *data :如果是 OUT 端点, 指向要发送到设备的数据的指针. 如果是 IN 端点, 这是从设备读取的数据的缓冲区指针.
  int len : data 参数指向的缓冲的长度
  int *actual_length :指向函数放置真实字节数的指针,根据端点方向,这些字节要么是被发送到设备的,要么是从设备中读取的.
  int timeout :时钟嘀哒数, 应等待的时间. 如果为 0, 函数永远等待操作完成.


返回值:成功返回0,actual_length 参数包含被传送或从设备中读取的字节数.否则返回负的错误值.


2)int usb_control_msg(struct usb_device*dev, unsigned int pipe, __u8 request,__u8 requesttype, __u16 value, __u16 index,void *data, __u16 size,int timeout)


功能:创建控制 urb 并发送到指定的设备, 接着在返回之前等待完成.

参数:
  struct usb_device *usb_dev :目标 USB 设备指针
  unsigned int pipe :目标 USB 设备的特定端点. 必须使用特定的宏创建.
  __u8 request :控制消息的 USB 请求值.
  __u8 requesttype :控制消息的 USB 请求类型.
  __u16 value :控制消息的 USB 消息值.
  __u16 index :控制消息的 USB 消息索引值.
  void *data :如果是 OUT 端点, 指向要发送到设备的数据的指针. 如果是 IN 端点, 这是从设备读取的数据的缓冲区指针.
  __u16 size : data 参数指向的缓冲的长度
  int timeout :时钟嘀哒数, 应等待的时间. 如果为 0, 函数永远等待操作完成.


返回值:成功返回被传送到或从设备读取的字节数.否则返回负的错误值.


3)int usb_interrupt_msg(struct usb_device*usb_dev, unsigned int pipe,void *data,int len, int *actual_length,int timeout)
功能:创建中断 urb 并发送到指定的设备, 接着在返回之前等待完成.其实就是usb_bulk_msg的包装,所有参数和usb_bulk_msg一样使用

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值