基于Linux的USB设备驱动的实现
- 格式:pdf
- 大小:203.54 KB
- 文档页数:3
基于Linux的USB设备驱动的实现
孙永钢;张学勇;迟欢欢
【期刊名称】《信息技术》
【年(卷),期】2010(034)008
【摘要】USB 总线是一种快速、双向、同步、低成本、动态可连接的串行总线,其驱动程序是Linux内核的一个重要组成部分.随着在Linux操作系统中的广泛应用,特别是嵌入式设备的大量出现,USB驱动程序的编写越来越显得重要了.给出Linux 环境下USB驱动的层次结构,并通过一个实例分析了USB驱动程序的编写方法.【总页数】3页(P141-142,145)
【作者】孙永钢;张学勇;迟欢欢
【作者单位】黑龙江省烟草工业有限公司,哈尔滨,150001;哈尔滨理工大学计算机科学与技术学院,哈尔滨,150080;黑龙江省卫生学校,哈尔滨,150086
【正文语种】中文
【中图分类】TP316.8
【相关文献】
B设备驱动在Linux下的设计与实现 [J], 覃树建;杨红雨;王祺;林木华
2.基于Linux的USB设备驱动程序实现 [J], 刘永祥;贺金平;吕杨
3.基于S3C4510B+uClinux的USB设备驱动的开发与实现 [J], 腾海昕
4.Linux下有中断端点的USB设备驱动的实现 [J], 金鑫;孙松林;景晓军
5.基于Linux操作系统的USB设备驱动程序开发及传输实现 [J], 万玛宁;侯志化
因版权原因,仅展示原文概要,查看原文内容请购买。
嵌入式Linux下的USB设备驱动技术Linux以其稳定、高效、易定制、硬件支持广泛、源代码开放等特点,已在嵌入式领域迅速崛起,被国际上许多大型的跨国企业用作嵌入式产品的系统平台。
USB是Universal Serial Bus (通用串行总线)的缩写,是1995年由Microsoft、Compaq、IBM等公司联合制定的一种新的PC串行通信协议。
它是一种快速、灵活的总线接口。
与其它通信接口相比较,USB接口的最大特点是易于使用,这也是USB的主要设计目标。
USB的成功得益于在USB标准中除定义了通信的物理层和电器层标准外。
还定义了一套相对完整的软件协议堆栈。
这使得多数USB设备都很容易在各种平台上工作。
作为一种高速总线接口,USB适用于多种设备(如数码相机、MP3播放器、高速数据采集设备等)。
另外,USB接口还支持热插拔,而且所有的配置过程都由系统自动完成,无须用户干预。
1 Linux下的USB设备驱动在Linux内核的不断升级过程中,驱动程序的结构相对稳定。
由于USB设备也是外围设备的一种,因此,它的驱动程序结构与普通设备的驱动程序相同。
Linux系统的设备分为字符设备(CharDevice)和块设备(BlockDevice)。
字符设备支持面向块字符的I/O操作,它不通过系统的快速缓存,而只支持顺序存取。
块设备则支持面向块的I/O操作,所有块设备的I/O操作都通过在内核地址空间的I/O缓冲区进行,可以支持几乎任意长度和任意位置上的I/O请求。
块设备与字符设备还有一点不同,就是块设备必须能够随机存取(RandomAccess),字符设备则没有这个要求。
典型的字符设备包括鼠标、键盘、串行口等,而块设备主要包括硬盘软盘设备、CD-Rom等。
由于USB设备主要都是通过快速串行通讯来读写数据,因此一般都可作为字符设备来进行处理。
2 Linux下的USB core2.1 Linux中USB core与USB的结构关系Linux操作系统中有一个叫做“USB core”的子系统,可提供支持USB设备驱动程序的API和USB主机控制器的驱动程序。
图1 USB分层结构2 Linux下的USB框架Linux下的USB框架分为三层,如图2所示。
USB的驱动可以分为三类:USB控制器的驱动、主机端USB设备的驱动、设备上的USB Gadget驱动。
USB core管理上层驱动查荣明(1980-),男,江苏苏州人,硕士研究生,工程师。
研究方向:嵌入式系统接口技术、底层驱动。
孔康(1989-),男,山东济宁人,硕士研究生,工程师。
研究方向:嵌入式系统接口技术。
石璐(1988-),男,河南商丘人,本科,工程师。
研究方向:嵌入式系统总体技术方案。
图2 Linux下的USB框架图本文研究的是主机端USB设备的驱动。
由于驱动本质上是基于Linux的USB core层提供的结构进行的,因此,有必要介绍相关数据结构。
USB相关的数据结构USB相关的数据结构前,需要及的几个逻辑概念:Device、ConfigurationEndpoint。
其中,Endpoint在前文中已介绍。
它们之间的关系可以用如图3[3]表示。
图3 逻辑关系图从图3可以看出,一个USB设备(device)通常包含一个或者多个配置(config),一个配置(config)通常包含一个或者多个接口(interface),一个接口(interface)通常包含零个或者多个端点(Endpoint)。
在Linux内核中,分别usb_device、usb_host_config、usb_interface、usb_host_ endpoint四个结构体。
USB四个结构体除了驱动所需要的其他成员变量外,其他要素基本对应四个相应描述符(descriptor),这几个结构图4 USB各结构体间的关系4 USB骨架程序介绍在Linux内核源码目录的drivers/usb/下,有一个usb-skeleton.c,提供了基于USB的骨架驱动程序,该程序针对的设备类型是海量存储设备。
本文针对的骨架程序是Linux V3.0.35版本下的程序。
目录摘要 ----------------------------------------------------------------------------------------------------------------------- IABSTRACT --------------------------------------------------------------------------------------------------------------- II 第一章绪论 ------------------------------------------------------------------------------------------------------------ 11.1课题研究的背景和意义 ---------------------------------------------------------------------------------------------- 11.1.1 课题研究的背景 ------------------------------------------------------------------------------------------------- 11.1.2 课题研究的意义 ------------------------------------------------------------------------------------------------- 1 1.3课题研究的内容 ------------------------------------------------------------------------------------------------------- 1第二章USB简介 ---------------------------------------------------------------------------------------------------- 22.1USB的沿革 ------------------------------------------------------------------------------------------------------------- 2 2.2USB的优点 ------------------------------------------------------------------------------------------------------------- 2 2.3USB的应用及发展趋势 ---------------------------------------------------------------------------------------------- 32.3.1 USB的扩展应用------------------------------------------------------------------------------------------------- 32.3.2 USB的发展趋势------------------------------------------------------------------------------------------------- 4 2.4USB接口类型 ---------------------------------------------------------------------------------------------------------- 4 2.5USB2.0规范------------------------------------------------------------------------------------------------------------- 5 2.6USB3.0简介------------------------------------------------------------------------------------------------------------ 5第三章USB系统架构与协议 ------------------------------------------------------------------------------------- 73.1USB系统拓扑结构 ---------------------------------------------------------------------------------------------------- 7 3.2USB设备逻辑结构 ---------------------------------------------------------------------------------------------------- 8 3.3USB描述符 ------------------------------------------------------------------------------------------------------------- 9 3.3USB数据传输方式 ---------------------------------------------------------------------------------------------------- 9 3.3USB数据流模型 ----------------------------------------------------------------------------------------------------- 103.3.1 控制传输 ------------------------------------------------------------------------------------------------------- 103.3.2 中断传输 ------------------------------------------------------------------------------------------------------- 113.3.3 批量传输 ------------------------------------------------------------------------------------------------------- 113.3.4 同步传输 ------------------------------------------------------------------------------------------------------- 12第四章LINUX系统内核及内核模块 ------------------------------------------------------------------------- 134.1L INUX体系结构------------------------------------------------------------------------------------------------------- 13 4.2L INUX内核架构------------------------------------------------------------------------------------------------------- 13 4.3L INUX内核目录结构 ------------------------------------------------------------------------------------------------ 14 4.4L INUX内核模块开发 ------------------------------------------------------------------------------------------------ 154.4.1 makefile -------------------------------------------------------------------------------------------------------- 154.4.2 安装和卸载内核模块---------------------------------------------------------------------------------------- 17 4.5L INUX内核配置与安装 --------------------------------------------------------------------------------------------- 18第五章LINUX USB系统与功能测试------------------------------------------------------------------------- 2325.1USB协议软件层次 -------------------------------------------------------------------------------------------------- 23 5.2L INUX USB架构------------------------------------------------------------------------------------------------------ 24 5.3M ASS S TORSGE --------------------------------------------------------------------------------------------------------- 24 5.4USB-HID --------------------------------------------------------------------------------------------------------------- 28第六章LINUX USB鼠标驱动程序设计---------------------------------------------------------------------- 316.1USB鼠标驱动程序分析 -------------------------------------------------------------------------------------------- 31 6.2URB --------------------------------------------------------------------------------------------------------------------- 33 6.3搭建开发平台 -------------------------------------------------------------------------------------------------------- 336.3.1 安装编辑工具 ------------------------------------------------------------------------------------------------- 336.3.2 安装和配置编译器------------------------------------------------------------------------------------------- 336.3.3 安装其他工具 ------------------------------------------------------------------------------------------------- 346.3.4 平台硬件构成 ------------------------------------------------------------------------------------------------- 346.3.5 平台软件构成 ------------------------------------------------------------------------------------------------- 36 6.4USB鼠标驱动程序详细设计-------------------------------------------------------------------------------------- 36总结 --------------------------------------------------------------------------------------------------------------------- 41致谢 --------------------------------------------------------------------------------------------------------------------- 42参考文献 ------------------------------------------------------------------------------------------------------------------ 43摘要随着计算机硬件飞速发展,外围设备日益增多,键盘、鼠标、调制解调器、打印机、扫描仪早已为人所共知,数码相机、MP3随身听接踵而至,这么多的设备,如何接入个人计算机?USB就是基于这个目的产生的。
Linux下的硬件驱动——USB设备什么是USB设备?USB即Universal Serial Bus,翻译过来就是通用串行总线。
它是一种规范化的、快速的、热插拔的串行输入/输出接口。
USB接口常被用于连接鼠标、键盘、打印机、扫描仪、音频设备、存储设备等外围设备。
Linux下的USB驱动在Linux系统中,每个USB设备都需要一个相应的驱动程序来驱动。
从Linux 2.4开始,内核提供了完整的USB设备支持。
对于每个USB设备,内核都会自动加载对应的驱动程序。
Linux下的USB设备驱动程序主要分为以下几个部分:USB核心驱动程序USB核心驱动程序是操作系统内核中处理USB设备的核心模块,负责与各种类型的USB设备进行通信,包括主机控制器、USB总线、USB设备等。
它与驱动程序和应用程序之间起到了桥梁的作用,为驱动程序提供了USB设备的基础支持。
USB设备驱动程序USB设备驱动程序是与特定USB设备相对应的驱动程序,为USB设备提供具体的读写功能和其他控制功能。
USB核心驱动程序和USB设备驱动程序之间的接口USB核心驱动程序和USB设备驱动程序之间的接口是指USB层和应用程序层之间的接口,负责传递各种USB操作的命令和数据。
如何编译一个USB设备驱动编译一个USB设备驱动程序需要按照以下步骤进行:步骤一:安装必要的软件包首先需要安装编译和调试USB设备驱动所需的软件包,包括编译工具链、内核源代码、内核头文件等。
sudo apt-get install build-essential linux-source linux-headers-`una me -r`步骤二:编写代码现在可以编写USB设备驱动程序的代码,此处不做详细介绍。
步骤三:编译代码在终端窗口中进入USB设备驱动程序所在的目录下,输入以下命令进行编译:make此命令将会编译USB设备驱动程序,并生成一个将驱动程序与内核进行连接的模块文件。
linux设备驱动(28)usb驱动开发过程总结设备驱动程序是操作系统内核和机器硬件之间的接⼝,由⼀组函数和⼀些私有数据组成,是应⽤程序和硬件设备之间的桥梁。
在应⽤程序看来,硬件设备只是⼀个设备⽂件,应⽤程序可以像操作普通⽂件⼀样对硬件设备进⾏操作。
设备驱动程序是内核的⼀部分,主要完成以下功能:对设备的初始化和释放;把数据从内核传送到硬件设备和从硬件设备读取数据;读取应⽤程序数据传送给设备⽂件和回送应⽤程序请求的数据;检测和处理硬件设备出现的错误。
1 Linux USB⼦系统分析在Linux系统中,USB主机驱动程序由3部分组成:USB主机控制器驱动(HCD)、USB核⼼驱动(USBD)和不同种类的USB设备类驱动,如下所⽰。
其中HCD和USBD被称为协议软件或者协议栈,这两部分共同处理与协议相关的操作。
USB设备类驱动可以包含多个,不同的功能接⼝对应不同的驱动程序,它们不直接与USB设备硬件打交道,⽽是通过协议软件的抽象处理来完成与设备的不同功能接⼝之间的通信。
在Linux USB⼦系统中,HCD是直接和硬件进⾏交互的软件模块,是USB协议栈的最底层部分,是USB主机控制器硬件和数据传输的⼀种抽象。
HCD向上仅对USB总线驱动程序服务,HCD提供了⼀个软件接⼝,即HCDI,使得各种USB主机控制器的硬件特性都被软件化,并受USB总线驱动程序的调⽤和管理。
HCD向下则直接管理和检测主控制器硬件的各种⾏为。
HCD提供的功能主要有:主机控制器硬件初始化;为USBD层提供相应的接⼝函数;提供根HUB(ROOT HUB)设备配置、控制功能;完成4种类型的数据传输等。
USBD部分是整个USB主机驱动的核⼼,主要实现的功能有:USB总线管理;USB总线设备管理、USB总线带宽管理、USB的4种类型数据传输、USB HUB驱动、为USB设备驱动提供相关接⼝、提供应⽤程序访问USB系统的⽂件接⼝等。
其中USB HUB作为⼀类特殊的USB设备,其驱动程序被包含在USBD层。
linux usb设备驱动和通信原理Linux USB设备驱动和通信原理一、介绍USB(Universal Serial Bus,通用串行总线)是一种常见的外部设备连接标准,可以连接各种设备,如打印机、键盘、鼠标、摄像头等。
在Linux系统中,USB设备驱动是用于管理和控制USB设备的软件模块。
本文将介绍Linux USB设备驱动的基本原理和USB设备与主机之间的通信过程。
二、USB设备驱动1. 驱动模型在Linux系统中,USB设备驱动使用一种称为USB核心(USB Core)的模型来管理和控制USB设备。
USB核心提供了一组功能强大的API,供驱动程序使用。
驱动程序通过注册到USB核心,并提供一组回调函数来处理USB设备的各种事件和请求。
2. 驱动加载当插入一个USB设备时,Linux内核会自动加载与之对应的驱动程序。
内核根据设备的厂商ID(Vendor ID)和产品ID(Product ID)来匹配设备和驱动程序。
如果找到匹配的驱动程序,内核会加载该驱动程序,并调用其初始化函数。
3. 驱动程序结构一个USB设备驱动程序通常由以下几个部分组成:- 初始化函数:用于初始化驱动程序的数据结构和资源。
- 描述符匹配函数:用于匹配设备的描述符和驱动程序。
- 事件处理函数:用于处理设备的插入、拔出等事件。
- 控制请求处理函数:用于处理来自主机的控制请求。
- 数据传输函数:用于处理设备和主机之间的数据传输。
三、USB设备与主机通信原理1. 设备描述符USB设备在与主机通信之前,需要提供一个设备描述符,用于描述设备的基本信息,如设备类别、厂商ID、产品ID等。
主机通过设备描述符来识别和配置设备。
2. 端点和传输类型USB设备与主机之间的通信是通过端点(Endpoint)来实现的。
一个USB设备通常包含多个端点,每个端点都有一个唯一的端点地址和传输类型。
主机通过端点地址来选择要与之通信的端点,通过传输类型来确定数据传输的方式,如控制传输、批量传输、中断传输和等时传输。