仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 379|回复: 7
打印 上一主题 下一主题

[CentOS(社区)] 带来一篇嵌入式linux体系情况下USB装备的驱动完成

[复制链接]
飘灵儿 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-14 21:06:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们!引言
  嵌入式linux体系情况以其易于移植扩充、内核小、效力高、完全、原代码开放及机能优良等特色,在嵌入式范畴获得了异常普遍的运用。Linux的USB装备真个源代码中重要有USBdevice的海量存储装备、串口装备、收集装备等装备驱动法式及各类USBdevice掌握器芯片的驱动法式。市场上USB装备掌握器芯片品种单一,年夜多半用户须要针对特定运用来开辟相干的USB装备掌握器驱动法式,能力使装备正常任务在linux操作体系下。
  1USB装备端驱动体系
  LinuxGadget子体系重要分为三层:第一层为芯片驱动层,担任将各类USBdevice掌握器笼统为同一的函数接口,以供下层驱动法式挪用;第二层重要是对操作函数的简略封装;第三层为装备驱动层,可依据体系的需务实现所对应的功效。所示是LinuxGadget子体系的驱动条理。LinuxGadget子体系的装备驱动层重要依据各个种别的标准及协定完成各类装备的驱动,本设计须要使一个嵌入式装备具有挪动硬盘的功效,所以,可以依据海量存储类的标准及协定来完成该功效。



  1.1UDC驱动的根本构架
  所示是UDC驱动的根本构架图。在掌握器驱动法式中,起首应注册platform驱动,挪用其probe函数搜刮装备,并在probe函数内初始化usb_ep和usb_gadget等构造,然后注册装备,并请求中止,接着期待中止进入中止办事子法式,最初声明和完成usb_gadget_register_driver注册函数并输入给下层驱动。在该过程当中,接洽它们的纽带是一些全局构造体变量。
  1.2GadgetAPI
  GadgetAPI为Gadget体系界说了同一的数据构造和接口函数,它和主机真个USBCore位置相似,但功效仅限于供给编程接口,如用构造体usb_gadget_ops和usb_ep_ops对装备掌握器驱动操作函数和端点操作函数停止从新封装。比拟特别的是Gadget驱动法式注册函数usb_gadget_register_driver,它们是由装备掌握器(UDC)驱动直接供给的,用于将UDC绑定到gadgetdriver。这增长了GadgetDriver和UDC之间的依附性。
  在装备端,Gadget体系固然相似主机驱动体系分了三层构造,但GadgetAPI只界说了一些数据构造、宏和功效函数,并对UDC驱动法式停止了简略包装,而没有驱动治理等功效。
  1.3装备运用驱动法式
  装备端运用法式(GadgetDriver)用于掌握USB装备功效的完成,使装备表示出“收集衔接”、“打印机”或“年夜容量存储装备”等特征。本文以年夜容量挪动存储装备为例来完成挪动硬盘的功效。
  BULKONLY传输指的是主机和年夜容量存储装备之间的一种数据传输方法。
  2装备端驱动调剂
  在嵌入式Linux操作体系中,Gadgetdriver和GadgetAPI可完成部门USB协定处置、BULKONLY等传输协定和指令的解析处置,用户只须要在装备掌握器驱动法式中完成部门USB协定处置和GadgetAPI的连接任务。



  所示的流程图给出了USB装备端驱动法式的根本调剂思惟。该计划的重要思绪是主动的接收主机真个传输敕令(任何类型的通讯都由USB主机提议,USB装备间不克不及直接通讯),然后经由过程中止触发的方法完成主机真个数据传输。当发生装备端中止时,装备掌握器驱动法式起首断定中止类型。当其为批量传输端点IN中止时,驱动法式会将该EP下链接的REQ中的数据顺次写入USB2.0OTGIP的装备掌握器的内存区;当其为批量传输OUT中止时,驱动法式会将装备掌握器内存区的数据读入REQ中的buffer中;当其为端点0的掌握传输中止时,驱动法式将读取端点缓冲区的数据,并解析以后的装备要求。假如主机传输给装备的装备要求为USBREOSEDRESS(设置装备地址)、USB_REQ_GET_STATUS(获得装备状况)、USB_REQ_SET_FEATURE(设置装备特征),装备掌握器驱动法式会自行呼应要求。然则,假如是其它装备要求,如GET_DESCRIPTOR(获得装备描写符)时,装备掌握器驱动便会将该要求提交给GadgetDriver,然后由GadgetDriver列队将该装备要求提交给端点,以期待下次掌握端点中止。
  掌握传输比拟庞杂,它须要完成树立阶段、数据传输阶段和状况阶段。全部掌握端点中止的处置可经由过程四个状况完成,分离是:端点0余暇(EP0_IDLE)、数据IN传输(EP0INDATA_PHASE)、数据OUT传输(EP0OUTDATA_PHASE)和状况阶段(EPO_STATUS)。 EP0_IDLE状况重要处置树立阶段的setup令牌,并依据取得的装备要求处置可以或许处置的装备要求,同时把不克不及处置的装备要求(如获得装备描写符,设置装备摆设描写符等)提交给下层GadgetDriver;EP0_OUT_DATA_PHASE状况重要处置数据阶段的OUT传输;EP0_OUT_DATA_PHASE状况重要处置数据阶段的IN传输;EP0_STATUS状况则重要完成掌握传输过程当中的状况阶段。
  在所示的流程图中,EP0为掌握传输端点,EP1、EP2、EP3为批量传输端点,它们重要包含端点传输类型、端点缓冲区巨细等信息。REQ为GadgetDriver提交的端点要求,重要包括传输的数据长度和地址。
3UDC的设计与完成
  装备掌握器驱动重要分为GadgetDriver接口模块、GadgetAPI函数模块、中止处置模块、数据构造界说、初始化模块、硬件读写模块等,各模块可以零丁停止设计。
  3.1数据构造界说
  依据GadgetAPI供给的数据构造,可以界说本身的数据构造(如装备数据构造otg_udc,端点数据构造otg_udc_ep等)来描写该USB装备掌握器。
  界说完特定的装备掌握器驱动的数据构造后,再停止响应的映照(staticstructotg_ip_udcmemory),以便将详细的装备掌握器、装备端点和Gadget的笼统数据构造接洽起来。
  3.2GadgetDriver接口模块
  UDC驱动供给有usb_gadget_driver_register模块,该模块可实usb_gadget_register_driver等绑定函数的功效,以绑定UDC和GadgetDriver。
  3.3GadgetAPI函数模块
  LinuxUSBgadgetdriverAPI界说了一个通用的gadgetdriver的接口,应用gadgetdriver可经由过程API与底层USBcontrollerdriver停止通讯。该API屏障了底层硬件的分歧,故可以使gadgetdriver只重视功效的完成,而尽可能与硬件有关。其代码以下:



  该模块重要完成GadgetAPI界说的函数功效,如构造体usb_ep_ops和usb_gadget_ops中的函数,和usb_gadget_register_driver注册函数等。这些函数可供GadgetDriver挪用。
  3.4中止处置模块
  因为装备是主动的接收主机的掌握,装备的一切行动都是基于装备中止的触发,是以,函数重要处置Reset中止、Resume中止、Suspend中止、EP0中止和其他端口中止。
  3.5初始化模块
  初始化重要是翻开中止、翻开并设置端点、设置最年夜总线转向时光(此时问即包间最年夜期待时光),还要设置最年夜缓冲区长度等。
  3.6硬件读写模块
  和主机掌握器驱动法式相似,装备掌握器的读写方法分为PIO读写和DMA读写两种形式,读写内容也分为存放器读写和端点缓冲区读写。在读写过程当中,一切读写地址都必需是双字节对齐形式。
  4驱动测试成果
  本文研讨的HCD曾经运用于现实的工程中,驱动测试的硬件情况如所示。



  本体系的硬件平台是RealviewEB,这是一个高度集成的开辟板,其母板上的硬件资本包含:一个FPGA(XilinxVirtex-IIXC2V6000)、静态和静态内存、集成核心装备和两个用于CoreTiles衔接的tile衔接器。设计时可经由过程增长一个额定的CoreTile(ARM926EJSCORE)来创立一个微处置体系。LogicTile(XilinxXC2V6000)中包括有一块具有主机掌握器功效的芯片otg_ip,otg_ip可经由过程片内总线AHB挂载在母板EB上。在该开辟板上运转Linux体系时,可经由过程穿插编译调试情况将开辟报与一台PC机相连,如许,调试信息就能够经由过程串口打印在该主机的终端上。otg_ip可经由过程ULPI接口衔接PHY芯片,并与USB装备相连。
  装备掌握器驱动模块otg_ip_udc.ko和g_filestorage.ko胜利加载后,再将其作为挪动优盘拔出电脑主机的USB接口,驱动便可胜利辨认。所示是内核打印的信息成果。



  5停止语
  USB通用串行总线具有传输速度高、功耗低、可热插拔和成长疾速等长处,而Linus操作体系则具有易于移植和扩充、内核小、效力高、原代码开放等特色,本文经由过程将其联合而给出的Linux情况下的USB装备驱动办法,可以疾速地完成年夜容量的存储功效,试验注解:该体系的数据读写速度可以到达681kB/s,并且后果优越。


欢迎大家来到仓酷云论坛!
不帅 该用户已被删除
沙发
发表于 2015-1-16 23:50:49 | 只看该作者

带来一篇嵌入式linux体系情况下USB装备的驱动完成

为了更好的学习这门课程,我不仅课上认真听讲,课下也努力学习,为此还在自己的电脑上安装了Ubuntu系统。
因胸联盟 该用户已被删除
板凳
发表于 2015-1-25 12:10:22 | 只看该作者
用户下达的命令解释给系统去执行,并将系统传回的信息再次解释给用户,估shell也称为命令解释器,有关命令的学习可参考论坛相关文章,精通英文也是学习Linux的关键。
飘灵儿 该用户已被删除
地板
 楼主| 发表于 2015-2-2 22:12:50 | 只看该作者
熟读写基础知识,学得会不如学得牢。
精灵巫婆 该用户已被删除
5#
发表于 2015-2-25 20:20:02 | 只看该作者
查阅经典工具书和Howto,特别是Howto是全球数以万计的Linux、Unix的经验总结非常有参考价值通常40%的问题同样可以解决。
蒙在股里 该用户已被删除
6#
发表于 2015-3-8 05:45:16 | 只看该作者
说实话小时候没想过搞IT,也计算机了解也只是一些皮毛,至于什么UNIX,Linux,听过没见过,就更别说用过了。?
小妖女 该用户已被删除
7#
发表于 2015-3-16 01:05:04 | 只看该作者
得到到草率的回答或者根本得不到任何Linux答案。越表现出在寻求帮助前为解决问题付出的努力,你越能得到实质性的帮助。
柔情似水 该用户已被删除
8#
发表于 2015-3-22 19:08:19 | 只看该作者
Linux最大的特点就是其开源性,这一点是十分难得的,这也是它能够存在到现在的原因之一。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-16 07:40

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表