看一下Linux下USB驱动的架构(二)

接口/总线/驱动

1136人已加入

描述

前言

前面简单聊了一下USB驱动的整体框架(一),下面看一下驱动主机的《USB驱动框架》。

主机游戏框架

网络接口
 

USB核心(USBD)是整个USB驱动的核心部分,USBD来自从USB主机接收到USB驱动端的非端设备进行处理,然后传送给上层的驱动端;同时也接收上层格式的数据流,相应的数据处理后承接交给USB主机驱动。所以它是一个上启下的作用。

重要结构体

usb_hcd -- 主机驱动器

网络接口网络接口网络接口


hc_driver -- 控制器操作函数

网络接口网络接口网络接口网络接口网络接口

调用usb_submit_urb ()提交一个USB请求之后,该函数调用usb_hcd_submit_urb(),并最终调用usb_hcd的驱动成员(hc_driver类型)的urb_enqueue()函数。

ehci_hcd -- ECHI主机

网络接口网络接口网络接口网络接口

ECHI HCD驱动属于HCD驱动的实例,用ehci_hcd结构体来表示,它通常会作为usb_hcd结构体的私有数据(hcd_priv)。

API函数

网络接口网络接口

该drivers/usb/ehci-hcd.c中实现了EHCI主机驱动的工作,具体的驱动只要简单调用ehci_init_driver()就可以/看一下主机的具体实现:

网络接口网络接口

这个函数就是初始化hc实例_驱动程序,这个函数带的通用hc_driver ,而第二个参数可以是hc_driver实例的reset()、port_power(另外一个驱动程序)一些额外的专利数据。

网络接口网络接口

上面是Linux已经很好操作的ehci接口函数,基本都是通用的,所以不需要自己再实现。

xhci主机的驱动方式和ehci基本一样,在/drivers/usb/host/xhci.c中实现XHCI主机驱动的工作。具体的驱动只要简单调用xhci_init_driver()即可。



审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分