<meta name="keywords" content="庄家克星时时彩,iTOP-4412开发板-驱动-usb文档04-主控制器和驱动框架简介" />
检查: 563|回复: 2
打印 上一主题 下一主题

[提问] iTOP-4412开发板-驱动-usb文档04-主控制器和驱动框架简介 [复制链接]

就是塔塔 (离线)
积分
1080
帖子
38
跳转到指定楼层
楼主
揭晓于 2019-5-13 14:09:22 |只看该作者 |倒序浏览
iTOP-4412- 驱动-usb  文档 04- 主控制器和驱动框架简介
在学习 USB 驱动的历程当中,虽然 USB 的外部驱动不须要我们去写,然则照样须要对其有
个年夜概的明确。
1 USB 驱动架构简介
USB 是一种主从结构的系统。主机叫做 Host,从机叫做 Device;开发板作为 USB host
端,USB 鼠标、USB 键盘、USB-WIFI 等等称为装备端;通常,作为 USB device 的装备被称
为 Gadget。
以下图所示,是 USB 驱动架构质朴图。在主机端(这里须要重视的是,外部驱动和外部
驱动都是属于主机端)。

装备端,Gadget API 界说了一个通用的 Gadget Driver 的接口,Gadget Driver 经由历程
Gadget API 与底层 USB Device Controller Driver 通讯。其中 Gadget API 层樊篱了底层硬
件的不合,使 Gadget Driver 看重功效的完成,尽能够与硬件有关。装备真个驱动浅易是以固
件形式在装备端中,由装备真个临盆厂商固化在装备端中。
在主机端,有 USB HCD 和 USBD 两个接口层。
USB HCD 的全称为主机控制器驱动(Host Controller Driver),它是对主机控制器硬件的
一个笼统,供应与 USB 系统软件之间的软件接口。
从客户软件的角度看,USBD 控制一切的 USB 装备,是以客户软件对装备的控制和所要
发送的数据只需交给 USBD 便可以了。USBD 为客户软件供应敕令机制和管道机制。客户软
件经由历程敕令机制可以会见一切装备的 0 号端点且与默许管道通讯,从而完成对装备的装备和其
他一些基本的控制使命。管道机制允许客户和装备完成特定的通讯功效。该默许管道形貌了一
条 USBD 和 USB 装备间通讯的逻辑通道。
主机端各层有以下功效:
1) 检测毗连和移去的 USB 装备;
2) 治理主机和 USB 装备间的数据流;
3) 毗连 USB 状态和运动统计;
4) 控制主控制器和 USB 装备间的电气接口,网罗能量供应。
以下图所示,是主机端驱动架构,在前面的教程中,我们会详细剖析其中的 URB(USB
请求块)和 USB 装备形貌符。在 USB 装备通讯的一切流程中,USB 形貌符用于主机端识别设
备审察细是哪个装备,这个历程是由主控制器来完成;USB 请求块用于主机端和装备真个数
据传输,供应详细的数据名堂界说和通道。一切驱动架构中的其它部门浅易不须要关注。

2 USB 主控制器
本节质朴明确一下 4412 的主控制驱动。
2.1 USB 主控制器的功效
USB 主控制器是集成到片上系统的,例如,4412 开发板,主控制器是在 4412 芯片上,
代码也是集成在三星原厂供应的内核中的。主控制看主要有一下功效:
1. 剖析和掩护 URB
2. 担负不合 USB 传输类型的调剂使命
3. 担负 USB 数据的现实传输使命
4. 完成虚拟 USB HUB(集线器)的功效
2.2 明确 USB 主控制器驱动
USB 的 USB CORE 在内核源码“drivers/usb/core/”中,以下图所示,可以看到和种种
功效对应的内核源码。其中有,USBCORE 焦点代码,hub、urb 等等。这些都是详细平台无
关的代码,在随便任性平台中都是通用的焦点层代码,给外部驱动供应对应的 API。

此内在内核目录“drivers/usb/serial/”下可以看到前面文档中简介的 USB 转串口驱
动,这个目录外面是 usb 转串口的驱动源码。
USB 主控制在内核源码“drivers/usb/host/”中,以下图所示,可以看到其中只需一个
编译天生的“.o”文件。

我们在第一篇文档中有简介到 4412 的主控制器是 USB2.0,应用的是 EHCI 控制器。我
们在 menuconfig 中,进入“ Device Drivers”-> “USB support (USB_SUPPORT
[=y])”,以下图所示,可以看到“EHCI HCD (USB 2.0) support”默许被装备了。

如上图所示,可以看到“ S5P EHCI support”,这是针对详细平台的装备,以下图所示
这个装备界说了宏“CONFIG_USB_EHCI_S5P”。

接着应用 source insight 看一下“drivers/usb/host/ehci-hcd.c”的驱动源码,做一下
质朴明确。
module_init(ehci_hcd_init);出口函数
出口函数 ehci_hcd_init 中,以下代码是注册主控制器驱动的代码。
#ifdef PLATFORM_DRIVER
retval = platform_driver_register(&PLATFORM_DRIVER);
if (retval < 0)
goto clean0;
#endif
以下图所示,在 menuconfig 中我们可以看到 CONFIG_USB_EHCI_S5P 宏是被界说的,
以是 PLATFORM_DRIVER 被界说为 s5p_ehci_driver。
#ifdef CONFIG_USB_EHCI_S5P
#include "ehci-s5p.c"
#define PLATFORM_DRIVER s5p_ehci_driver
#endif
接着找一下 s5p_ehci_driver 的界说,在“drivers/usb/host/ehci-s5p.c”文件下。以下
图所示,可以看到驱动称谓为"s5p-ehci",USB 的主控制驱动在驱动注册的时间也是应用平台
驱动结构体 platform_driver,结构体中也是和字符驱动类似的 move、probe 等等函数。
有驱动注册,那么一定有装备注册,而且装备称谓也是要和驱动称谓一样为"s5p-ehci"。
接着我们在平台文件中找一下装备注册。在“arch/arm/mach-exynos/mach-
itop4412.c”文件中,搜索宏界说“USB_EHCI_S5P”,以下图所示,可以看到主控制器函数
的装备注册代码。

如上图所示,smdk4x12_ehci_pdata 结构体变量应当是在挪用函数
s5p_ehci_set_platdata(pdata)中初始化的。接着在 source insight 中搜索一下
s5p_ehci_set_platdata 函数,找到了该函数是在“arch/arm/plat-s5p/dev-ehci.c”中定
义。以下图所示,该函数中挪用了 s5p_device_ehci 结构体来阻拦初始化,接着搜索一下
s5p_device_ehci 结构体。

以下图所示,可以看到装备称谓注册也是应用的“s5p-ehci”。

至此,我们完身剖析了主控制的装备注册和驱动注册。详细实现代码加倍严重年夜,然则这部
分不须要我们去做,有原厂会供应做好的驱动。
本文档只是让年夜家对主控制驱动有个理性的熟悉,在前面文档中的装备形貌符、URB(请
求块)才是驱动学习的重点。
另外尚有详细的 USB 驱动的移植,也比主机驱动和 USB 焦点层驱动更主要,欲望年夜家不
要破费过量的时间去研究主控制驱动和 USB 焦点层代码。而是要在主机驱动和焦点层驱动的
基础上,移植我们在项目和工程中须要的焦点模块。到前面,年夜家会发现,在移植和应用
USB 焦点装备驱动的时间,完全不须要用到 USB 主控制器、USB 驱动框架等等知识

mitumitu (离线)
积分
143
帖子
11
沙发
揭晓于 2019-5-27 11:37:48 |只看该作者
学习内容
就是塔塔 (离线)
积分
1080
帖子
38
板凳
揭晓于 6 天前 |只看该作者
151626bs06066zsrc2qxcc.jpg.thumb.jpg
您须要登录后才可以揭晓议论 登录 | 急速注册

关于我们  -  服务条目  -  应用指南  -  站点舆图  -  友谊链接  -  联系我们
庄家克星时时彩-时时彩qq群-时时彩平台推荐 © 版权一切   | 京公网安备110108881021702
回顶部