嵌入式Linux的USB驱动设计

发布者:eaff86最新更新时间:2013-08-06 来源: dzsc关键字:Linux  USB驱动  嵌入式 手机看文章 扫描二维码
随时随地手机看文章

  随着计算机外围硬件的扩展,各种外围设备使用不同的总线接口,导致计算机外部各种总线繁多,管理困难,USB总线可以解决这些问题,因此而诞生。USB总线提供统一的外设的接口方式,并且支持热插拔,方便了厂商开发设备和用户使用设备。USB(通用串行总线)是由Microsft,Compad,Inter和NEC等推出的外围总线接口,目前已发展到2.0标准最高支持480Mb/s的速率,最多可以支持127个外设。

  嵌入式Linux是一款源代码完全免费的新兴操作系统,用户可以用户可以通过网络等其他途径免费获得,并可以任意修改其源代码,这是其他的操作系统做不到的。正是由于这一点,Linux得到了广泛的应用。

  1 Linux中USB设备驱动程序框架及数据结构

  1.1 USB的体系结构

  USB接口标准支持外部设备和主机之间进行数据传送。在USB结构中主机顶设各种类型外设使用的总线宽度。当外设和主机在运行时,USB总线允许使用,设置,添加和拆除外设。

  在USB体系结构中一个USB系统可以分成USB设备、USB主机和USB互联3个部分。USB互联是USB设备和USB主机之间进行连接通信的操作,主要包括:

  1)总线拓扑结构:UsB主机和USB设备之间的连接方式;

  2)数据流模式:描述USB通信系统数据如何从产生方传递到使用方;

  3)USB调度:USB总线是一个共享连接,对可以使用的连按进行调度以支持同步数据传输,并避免优先级判断的开销。

  USB的物理连接是有层次的星型结构,如图1所示。

图1 USB体系拓扑结构图

  从图中可以看出USB集线器在一个节点上连接多个设备,每条线段都是点点连接,每个USB集线器在星形的中心。从主机到设备或者USB集线器,或USB集线器到设备都是点点连接。

  1.2 USB驱动程序的结构

  USN总线在技术层面上是非常简单的,它是一个单主方式实现的,主机轮询各种不同的外围设备,USB另外一个重要的特性是它只担当设备和主控制器之间通讯通道的角色,对所发送的数据没有任何特殊的内容和结构上的要求。

  Linux支持两种类型的USB驱动,宿主系统上的驱动程序和设备上的驱动程序。宿主USB驱动程序控制插入其中的USB设备,而USB设备的驱动程序控制设备如何作为一个USB设备和主机通讯。这里主要讨论设备驱动。

  USB的基本通信的形式基本通过端点的东西。USB端点只能往一个方向传输数据,从主机到设备或从设备到主机。USB端点分别具有不同的传输数据的方式,他们有4种类型,分别是:1)控制端点用来控制对USB设备不同部分的访问。他们用于配置设备,获取设备信息,获取设备的状态报告,发送命令到设备。它是一种非周期性的可靠的传输。2)中断端点就是设备传输数据时以一个固定的速率来传输少量的数据。这些端点是鼠标和USB键盘所使用的主要传输方式。它通常用于发送数据到USB设备以控制设备,一般不用来传输大量数据。USB协议保证这些传输有足够的保留带宽来传输数据。3)等时端点同样可以传输大批量的数据,但数据是否到达没有保障,这些端点用于可以应付数据丢失的情况,这类设备更注重于保持一定的恒定的数据流,实时的数据收集都使用这类端点。4)批量端点传输大量的数据。这些端点通常比中断端点大的多他们常用于需要确保没有数据丢失的传输设备。USB协议不保证这些传输始终可以在特定的时间内完成。如果总线上的空间不足以发送整个批量包。它将被分割为多个包进行传输。

  当一个USB设备连接到主机时,主机会给这个设备分配一个1~127之间的唯一的设备号同时读取该设备的描述符,该设备描述符是描述设备信息及其属性的数据结构,USB以一种层次化的结构定义设备的描述符,设备描述符给出了USB设备的一般信息,包括对设备及所有设备配置起全程作用的信息,一个USB设备只能有一个设备描述符,配置描述符中的信息与设备特定的配置相关,一个USB设备可以有一个或多个配置描述符,每一个配置描述符又由一个或多个接口描述符组成,接口描述符的信息是与设备驱动程序的开发密切相关,可以一个接口对应一个设备驱动程序也可以多个接口对应一个设备驱动程序,接口描述符由零个或多个端点描述符组成,端点描述符定义了在一个给定的设备里实现的实际寄存器,这些描述符定义了每个寄存器的功能和特定的信息如端点要求的传输类型、传输方向、带宽要求、查询间隔等。另外,还有一个可选的宇符串描述符,它以UNCOND码的格式给出了一些可读的信息,这些信息通常是有关设备生产厂商、设备名设备序列号等,通过这些不同层次的描述符,主机设备驱动程序就可以知道具体设备的相关信息,从而对设备进行相应控制。

图2 USB驱动程序层次图[page]

    1.3 USB驱动程序框架

  1.3.1 基本数据结构

  usb-skel设备使用自定义结构usb_skel记录设备驱动用到的所有描述符,该结构定义如下:

  

  1.3.2 驱动程序初始化和注销

  同其他所有的Linux设备驱动程序一样,usb-skel驱动使用module_init()宏初始化函数,使用module_exit()宏注销函数。usb-skel驱动的初始化函数usb_skel_init()函数,定义如下:

  

  sb_skel_init()函数调用内核提供的usb_register()函数注册了一个usb_driver类型的结构变量,该变量定义如下:

  

  其中usb_skel设备的USB ID映射表定义如下:

  

  在USB驱动中调用usb_deregister()函数注销usb-skel设备驱动,函数定义如下:

  

[page]

    1.3.3 初始化设备

  从skel_driver结构可以知道usb-skel设备的初始化函数是skel_probe()函数,设备初始化主要是探测设备类型,分配USB设备用到的urb资源,注册USB设备操作函数等。

  skel_class结构变量记录了usb-skel设备信息,定义如下:

  

  name变量使用%d通配符表示一个整型变量,当一个usb-skel类型的设备连接到USB总先后会2按照子设备编号自动设置设备名称。Fops设备操作函数结构变量,定义如下:

  

  1.3.4 设备注销

  skel_disconnect()函数在注销设备时被调用,定义如下:

  

[page]

    2 USB串口驱动

  2. 1 驱动初始化函数

  usb_serial_init()函数是一个典型的USB设备驱动初始化函数,定义如下:

  

  函数首先调用alloc_tty_driver()函数分配一个串口驱动描述符;然后设置串口驱动的属性,包括驱动的主从设备号、设备类型、串口初始化参数等;串口驱动描述符设置完毕后,调用usb_register()函数注册USB串口设备。

  2. 2 驱动释放函数

  

  2.3 串口操作函数

  USB串口设备驱动使用了一个tty_operations类型的结构,该结构包含了串口的所有操作,定义如下:

  

  按上述的步骤和方法通过lnsmod命令成功实现了USB驱动程序的加载,成功的通过USB串口进行了数据的读写。

  3 结论

  新出的Linux2.6内核加入了对USB2.0的支持,重新定义了usb_class_driver结构体。同时对探测函数probe和usb_submit_urb做了修改,包含了advanced linux sound Archiecture可以更安全的使用USB设备。

关键字:Linux  USB驱动  嵌入式 引用地址:嵌入式Linux的USB驱动设计

上一篇:如何在FPGA和ASIC设计中结合高速USB功能
下一篇:USB3.0中五分频电路设计

推荐阅读最新更新时间:2024-05-02 22:44

一种嵌入式可视倒车装置的设计
引言   目前,我国普遍采用的倒车装置是超声波倒车雷达,这种装置虽能准确测量车尾与车后障碍物的距离,但由于存在视觉盲区,司机无法判断障碍物的确切位置,更不能感知地坑或低矮障碍物。国内外研究趋势是在倒车雷达的基础上采用数字图像处理技术,利用强大的嵌入式处理器,开发用于检测车后物距和监视车后图像的优点相结合的车载可视倒车装置。这类新型装置的价格较高,目前仅在中高档轿车上使用。为此,提出了基于IntelPXA270硬件平台及嵌入式WindowsCE操作系统的车载可视倒车装置。 1 系统结构   本文提出的可视倒车装置硬件电路框图如图1所示,主要由Intel嵌入式处理器PXA270、视频采集、超声波测距等电路组成。两对超声
[汽车电子]
一种<font color='red'>嵌入式</font>可视倒车装置的设计
基于DSP的近距离无线通信的嵌入式数据记录设备设计
   黑匣子 是比较流行的电子记录设备之一,广泛应用于实时记录飞机、船舶、汽车等行进过程中的重要数据,包括速度、方向、高度、偏转角、发动机的转速和温度等。通过这些数据可以了解其运行过程中的情况,同时也是故障检测、分析事故原因的重要依据。在工业领域,常见的记录仪有压力记录仪、温度记录仪、湿度记录仪等,用于对生产环境进行实时监测,从而保证了有效生产和安全生产。   记录仪的数据下载方式通常有两种:通过传输线缆下载和通过插拔存储卡下载。前者需要连接线缆,后者需要插拔存储卡,两者均需要结构方面的拆卸。但在某些应用环境中,记录仪不便于拆卸,特别是在一些辐射性强的工业现场,更不适于长时间的近距离接触。另外,这两种方式在一定程度上均可能降低系
[嵌入式]
基于DSP的近距离无线通信的<font color='red'>嵌入式</font>数据记录设备设计
基于飞凌嵌入式i.MX8MP核心板的智能巡检机器人应用方案
今年1月,工业部、教育部和财政部等十七部门印发了《“机器人+”应用行动实施方案》,提出到2025年制造业机器人密度较2020年实现翻番,服务机器人、特种机器人行业应用深度和广度显著提升,机器人促进经济社会高质量发展的能力明显增强。   机器人大致可分为工业机器人、服务机器人和特种机器人,虽然相较于前两类机器人而言特种机器人的市场规模最小,但随着新一轮的科技和产业变革的加速演进,5G和人工智能与机器人技术深度融合,这让特种机器人的应用场景不断拓宽,在各行各业中发挥着的作用也愈加关键。今天小编就为大家介绍一种用于替代人工对设备进行检查和维护的特种机器人—— 智能巡检机器人 。     一、智能巡检机器人 在城市快速发展的过程中
[机器人]
戴尔拟推智能本将升级上网本版Linux
戴尔Linux客户端高级产品营销经理托德·芬奇(Todd Finch)周三在OpenSourceWorld会议上表示,该公司正在研究推出Linux智能本的可行性。未来数周内,戴尔还将把面向上网本的Ubuntu Linux升级为最新版本。    据国外媒体报道称,智能本与上网本相似,但配置ARM架构芯片。目前还没有得到主流PC厂商的青睐,高通和飞思卡尔等芯片厂商将提供智能本芯片。芬奇称,与x86芯片相比,ARM芯片在能耗和电池续航时间方面有优势。ARM芯片处理能力也越来越高了,智能手机软件越来越多就是一个佐证。    IDC分析师杰·周表示,在轻薄笔记本电脑中使用ARM芯片将使戴尔涉足智能本领域。戴尔曾多次表示将涉足智能
[手机便携]
浅析嵌入式存储系统设计方法
1 引言 嵌入式存储系统由嵌入式硬件和固化在硬件平台中的嵌入式存储系统软件组成。传统的小规模嵌入式存储系统,软件多采用前后台的方法,通常应用于实时性要求不高的简单场合;对于复杂的应用场合,较为普遍的做法是给系统配上嵌入式存储系统实时操作系统(RTOS),这样不仅能够使系统具有良好的实时性能,降低软件编制的工作量,还可以提高整个系统的稳定性。此外,为了简化用户程序,系统通常要提供一些必要的库函数供用户调用。同前后台系统相比,这种实时嵌入式系统增加了系统存储空间的开销。Intel 8051系列及各种兼容的单片机因其极高的性价比、丰富的库函数和长期的技术积累等背景而被广泛应用于各种嵌入式领域中。受传统单片机寻址空间的限制,嵌入式应用中经
[单片机]
浅析<font color='red'>嵌入式</font>存储系统设计方法
Linux学习方法分享
随着Linux应用的扩展许多朋友开始接触Linux,对于刚接触Linux的人而严,不知从何处开始学起。以下是一位Linux系统管理员,在看了许多有关Linux的文档和书籍并为学习Linux付出了许多艰苦的努力。当真正获得了一份正式的Linux系统管理工作后,他才更加深刻地理解了Linux的灵魂:服务与多用户。Linux系统知识是非常广博的,但是只要掌握了重点知识,管理它并没有想象中的那么可怕。在下面他将把作为系统管理员的一些工作心得和总结出来的经验系统地介绍给大家。 一、 学习的目的 通过Linux的学习掌握UNIX的目的想必不用多说了,在这个网络人才身价倍增的年代,想靠技术吃饭又不想掌握网络和编程技术是不明智的。当一人第一次
[单片机]
第三届国产嵌入式操作系统技术与产业发展论坛改线上会议
第三届国产嵌入式操作系统技术与产业发展论坛 最新议程发布(线上会议) 第三届国产嵌入式操作系统技术与产业发展论坛暨嵌入式系统联谊会主题讨论会(总第27次),主办方邀请到了国内从事嵌入式操作系统研究、产品开发和开源项目的专家和学者参与论坛的主题演讲和嘉宾讨论,研讨机器人操作系统、物联网操作系统以及RISC-V和新一代开源OS最新技术、产品和产业机遇,共同探讨国产操作系统生态建设,开源治理和标准指定等一系列促进共同发展的问题。 由于疫情发展的变化,原定在北航杭州研究院举办的论坛改为 线上会议 。上午是面向工业的操作系统技术主题论坛。下午是RISC-V与开源操作系统主题论坛和嘉宾回答网友问题环节。 论坛主办方:
[嵌入式]
第三届国产<font color='red'>嵌入式</font>操作系统技术与产业发展论坛改线上会议
儒卓力提供嵌入式蓝牙 5.0 模块 iVativ RENO
实现智能应用设计灵活性:儒卓力提供嵌入式蓝牙 5.0 模块 iVativ RENO iVativ RENO模块基于Nordic nRF52840 SoC而构建,支持蓝牙 5.0、Thread/ZigBee/ANT和NFC-A。 这款模块产品集成所有相关的模拟前端、天线和晶振,尺寸小(10 mm x 1.5 mm x 1.5 mm),並且功耗极低,因此可以降低系统成本並提供出色的设计灵活性。 它提供先进的安全功能、集成无线堆栈、网络堆栈和应用程序 API,因此可减轻主机处理器的负担,并缩减了开发成本和加快产品上市时间。iVativ RENO模块适用于智能家居应用、资产追踪和定位设备、智能健身设备、医疗保健系统、IIoT 传感器和
[网络通信]
儒卓力提供<font color='red'>嵌入式</font>蓝牙 5.0 模块 iVativ RENO
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved