注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

小白的博客

嵌入式爱好者

 
 
 

日志

 
 

USB相关函数分析  

2012-09-19 19:00:57|  分类: 韦东山视频第二轮 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
1、interface_to_usbdev(intf);//根据接口结构体获得设备结构体
      to_usb_device(intf->dev.parent);
              #define to_usb_device(d) container_of(d, struct usb_device, dev)
接口结构体中的dev结构体中的parent指向usb设备结构体中的parent,所以可通过 接口结构体中的dev结构体中的parent 来获得usb设备结构体的指针!

2、usb_rcvintpipe(usb_dev ,endpoint->bEndpointAddress);
#define usb_rcvintpipe(dev, endpoint) \
((PIPE_INTERRUPT << 30) | __create_pipe(dev, endpoint) | USB_DIR_IN)
                     __create_pipe(dev, endpoint)
                              return (dev->devnum << 8) | (endpoint << 15);
根据中断号,设备号、端口号和usb进入的标识就构造出了数据的输入地址!

3、usb_alloc_coherent(usb_dev ,len , GFP_ATOMIC , &dma_usb_buff);
                   
功能:
分配一块连续的缓冲区,这是因为usb数据传输采用dma传输,而dma传输要求内存的物理地址是连续的!

参数:
usb_dev :使用这块内存的设备
len :要申请的内存的长度
dma_usb_buff:申请内存的物理地址

返回值:
申请内存的虚拟地址

4、usb_fill_int_urb(uk_urb , usb_dev , pipe, usb_buff , len , usb_mouse_as_key , NULL ,endpoint->bInterval);
功能:
初始化一个请求块
关于请求块的知识可以参考这篇博客:http://book.51cto.com/art/200803/66930.htm

参数:
uk_urb :要初始化的请求块
usb_dev :usb设备
pipe:管道,分为输入和输出,根据上下文知道这里是输入管道
usb_buff :数据传输的目的
len :usb_buff 的长度
usb_mouse_as_key :一次传输完成后执行的函数
endpoint->bInterval:间隔

5、usb_submit_urb(uk_urb , GFP_KERNEL);
功能:提交uk_urb,提交了之后,usb控制器就会根据uk_urb 来接收、发送数据,一旦完成就会调用uk_urb 中的完成函数 
           
  评论这张
 
阅读(639)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018