USB子系统学习之基础篇二(驱动组织和结构)

很快就要学习usb的驱动,心中很是激动,但是还会想起早上一兄弟,竟然人肉walfred的姓名/住址/邮箱,nnd什么世道,我招谁惹谁了?

带着忐忑不安的心,还是现阅读下usbreadme文档吧。

这个readme文档算是一个引导性的玩意,只有usb才有资格拥有,其他的,至少我上次看的mmc子系统就没有,那时看的walfred晕头转向的。现在好了,我们就跟着readme的步伐,走进新时代吧。

位置usb/README,英语不是很好,勉强翻译下,以帮助那些和我一样一看到英语就想吐的强烈爱国只看母语的银。

1.readme告诉你,需要带着几样东西来阅读usb sourcecode。诸如Documentation/usb USB 2.0 specification还有Chip specifications for USB controllers(主控制器),还有一些外围设备的协议等。内核帮助文档Documentation/usb还真的有一坨东西呢,暂且不管。对了上篇usb子系统基础学习一请留意学习。

2.usb 驱动组织的各子目录

USB 设备根据其用于,可以分为若干类。 Linux 内核中,按照这些分类来组织驱动。

core/ : USB 子系统的核心代码,包括 usbfs 文件以及 hub  (class) 的驱动。

host/ : USB host controller 驱动,包括 UHCI, OHCI, EHCI 等以及一些嵌入式系统使用的主控制器。

gadget/ : USB 外部控制器驱动, 以及与外部控制器交互的若干部件的驱动。

image/ : 图像相关驱动,如扫描仪、数码相机等。

../input/ : 输入相关驱动,如键盘、鼠标,触摸屏等。

../media/ : 多媒体驱动,如摄像头等。

../net/ : 网卡驱动。

serial/ : USB/串口转接器的驱动。

storage/: 存储相关,如 U 盘。

 

看看什么才叫组织

这个framework真似忽如一夜春风吹过来,甚是清朗了许多,但是我们又该从哪个地方下手开始呢?犯愁ing。。。

正如上面的框架介绍,我们已经基本明白了我这个usb(确切的说是大牛的)基本上就分成这3层。

最底层:host controller driver

中间层:core目录下可知有hubusbfs相关;

上层:外围设备。

 

有组织,可别忘了组织结构

上面我们已经知道了基本上usb就是主控制器/hub/设备这个三样。看看它的拓扑结构总比我在这边空口说白话强多了。

USB 总线有且仅有一个总控制器 (root controller),其他的设备通过 hub 连接到总线上, 形成了一个树形结构,最多可连接 127 个设备。 该结构如下图所示:

 

USB 结构

刚才提到,终端设备必要时需要通过 Hub 连接到 root controller 上, 为了让 USB 设备的驱动对这个结构有一个统一的描述,内核将总控制器模拟成了一个虚拟 hub , 这样在驱动开发中可以不用区分总控制器和普通 hub, 简化了驱动开发过程。

此外,尽管 USB 子系统的各个设备在物理上是一个树形结构,但对于 USB 设备的驱动来讲, 驱动并不需要关心这种树形结构:无论一个设备是直接连到总控制器上或是通过 hub 连接, 该设备都会由内核分配一个唯一的标识符(设备 ID),驱动和内核通过这个 ID 来指代这个设备, 从而从逻辑上看,可以认为这些设备都是直接连到了总控制器上,如下图所示:

 

那么组织的任务是什么呢?

组织不是吃白饭的,组织也不是是靠一个人来维持,收到一个人影响的,你只要记住了组织具有组织性的,算了我也说不明白,你只要记住这个组织绝不是中国红十字会于郭美美就行。

USB 子系统主要任务包括:

1.注册和管理设备驱动。

2. USB 设备寻找驱动,并初始化和配置设备。

3.在内核中表现设备的树形结构。

4.与设备交互。

 Linux 内核中, 该完成这些任务的子系统由两层构成。

Host Controller 驱动--即主控制器驱动。 控制器向 USB 链提供连接选项,并向终端设备提供电路上的通讯。 控制器本身则必需连接到其他系统总线上。 当前, USB 控制器主要可分为 OHCI, EHCI  UHCI 几类。

终端设备驱动--设备驱动负责与各个 USB 设备打交道,并将该设备的功能提供给内核的其他部分。 设备驱动通过标准化的接口来与 host controller通讯,从而分离了控制器类型和设备驱动。 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值