Linux下有中断端点的USB设备驱动的实现

合集下载

Linux系统下USB设备驱动的实现

Linux系统下USB设备驱动的实现

I plm e fUS d v c ie n Li x m e nto B e iedrv r i nu
Z n h ii g Xu Fe g e gS u pn n
( ol e fE g neig, rhC ia U ies yo eh oo y , Oig1 O 4 ) C l g n iern Not hn nvri f T cn lg Be n O O 1 e o t
定义设备的描述符, 图 1 如 所示 。
图 2 Ln x的 US iu B子 系统结 构
di rU B ” r e/ S / 目录下 , v 根据功能可分成 以下 4 个部
分: 文件系统、 B 主机控制器 驱动程序 和客户 US D、
述 I l 符 l 述 f述 I述 l 符 符 述 l 符 符 符 I I I 述
dv . 为用户空间提供设备的函数调用接 口。 ei e o i d. 主要完成为设备创建节点, n eC o 维护计算机 上的 U B系统等操作 。 S
2 2 U B驱 动程序 ( S D) . S UB L n x下 US D 主要 由文 件 US . iu B B C和 US . Bh
s a i t u t US d ie k ld ie t tc s r c B rv rs e rv r一 {
_ —
n m e a : p o e rb :
” k lt n” s e eo , s e p o e k l rb ,

ds o n c : ic n e t
s e d so n c , k l ic n e t
L n x系统 下 U B设 备 驱 动 的 实现 iu S
曾水 平 徐 峰

Linux下的硬件驱动——USB设备

Linux下的硬件驱动——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驱动之USB鼠标驱动编写

Linux驱动之USB鼠标驱动编写

Linux驱动之USB⿏标驱动编写本篇博客分以下⼏部分讲解1、介绍USB四⼤描述符USB设备驱动程序⾥定义了许多与驱动程序密切相关的描述符。

这⾥介绍⼀下四种⽐较关键的描述符:设备描述符、配置描述符、接⼝描述符、端点描述符。

这⼏个描述符都位于include\linux\usb\ch9.h中,先看⼀下每个描述直接的关系,从图中可以看出每⼀个查到USB主机上的USB设备都有⼀个设备描述符,设备描述符下⾯可以接多个配置描述符,配置描述符下⾯⼜可以接多个当USB设备接到USB控制器上后,USB控制器第⼀次读取到的数据包,总共8字节/*当USB设备接到USB控制器上后,USB控制器第⼀次读取到的数据包,总共8字节*/struct usb_ctrlrequest {__u8 bRequestType;__u8 bRequest;__le16 wValue;__le16 wIndex;__le16 wLength;} __attribute__ ((packed));设备描述符是在设备连接时,主机第⼀个读取的描述符,包含了主机需要从设备读取的基本信息。

设备描述符有14个字段,如下所⽰。

依照功能来分,设备描述符的字段包含了描述符本⾝、设备、配置以及类别4⼤类。

/* USB_DT_DEVICE: Device descriptor */struct usb_device_descriptor {__u8 bLength; //描述符长度__u8 bDescriptorType; //描述符类型__le16 bcdUSB; //USB规范版本号码,BCD码表⽰__u8 bDeviceClass; //USB设备类别__u8 bDeviceSubClass; //USB设备⼦类别__u8 bDeviceProtocol; //USB设备协议码__u8 bMaxPacketSize0; //端点0的最⼤信息包⼤⼩(端点0⽤于控制传输,既能输出也能输⼊)__le16 idVendor; //⼚商ID__le16 idProduct; //产品ID__le16 bcdDevice; //设备版本编号,BCD码表⽰__u8 iManufacturer; //制造者的字符串描述符的索引值__u8 iProduct; //产品的字符串描述符的索引值__u8 iSerialNumber; //序号的字符串描述符的索引值__u8 bNumConfigurations;//可能配置的数⽬} __attribute__ ((packed));在读取设备描述符后,主机可以读取该设备的配置、接⼝以及端点描述符。

Linux下有中断端点的USB设备驱动的实现

Linux下有中断端点的USB设备驱动的实现
An ed i e i u r B e i ewi tru t n p i t i d s n d Boh a p iai n p o r m n o a a l x e i n sd — d t rv ri L n xf h n o US d v c t i er p d p n s s e i e . hn e g t p l t r g a a dc mp b ee p r c o r me t e m o s ae ef a i i t ft ed i e. Co a e t h o n t t d t e s l y o r r r h b i h v mp d wi t e c mmo eh d f n u u s se wi g r i g t t r p n p i t, r h n m t o so p t b y tm t r a d n i er te d on s i s h e o n u
17 2 1, 7 56 00 1( 3 )
计 算机 工程 与 设 计 C m u r ni en d ei o p t g e i a s n eE n rg n D g
・开 发 与 应 用 ・
Lnx i 下有中断端点的 US u B设备驱动的实现
金 鑫 , 孙 松 林 , 景 晓 军
1 r d 函数 l 、e 等 a


硬 件

图 3 应 用程 序 与硬 件设 备 的通 信 过程
3 L n x下 的 U B设 备 驱 动 机 制 的研 究 iu S
在 Ln x环 境 下 设 计 驱 动 程 序 , 想 简 洁 、 作 简 单 、 iu 思 操 功
能 强 大 , 是 它 只 能 调 用 Ln x内核 提 供 的 函数 , 且 要 和 硬 但 i u 而

基于Linux的USB设备驱动程序实现

基于Linux的USB设备驱动程序实现

!+ 123 设备驱动程序设计
123 设备开发包括硬件电路设计和 软件设计两部分 内容, 其中软件设计部分又包括 123 芯片驱动 程序设计 和应 用程 序设 计; 123 设 备在 硬件 上 通过 123 芯 片实 现。 123 芯片负责管理和实现 123 物理层 差分信 号, 通 过配置和管理寄存器来初始化设 备, 提供连接的端点, 管 理电源和通过寄存器管理端点。 123 芯片提供多个 标准的端 点, 每个端 点都 支持单 一的总线传输方式。 端点 " 支 持控制 传输, 其它 端点支 持同步传输、 批量传输 或者中断 传输中 的一种。 管理和 使用这些端点, 实际上是通过操作相应的控制寄存器、 状 态寄存器、 中断寄存器和数据寄存器来实现的。其中, 控 制寄存器用 于设 置端 点的 工作 模式 和启 用端 点的 功能 等; 状态寄存器用于查询端点的当前状态; 中 断寄存器用 于设置 端点的中 断触发和响 应功能; 数据寄 存器则是设 备与主机交换 用的缓冲区。
收稿日期: !""#$"%$&# 作者简介: 刘 永祥 (&’() * + ) , 男, 湖北钟祥人, 昆明理工大学信自学院 硕士研究生。
!4
Байду номын сангаас
第 \ 卷$
! " # $ 电路设计原理
无 锡 职 业 技 术 学 院 学 报 引脚连接 +,-//20> 外部中断引脚 %>?3@0 , 对应的中断 向量为 0 。初始化 1+2 中 断的步 骤如 下: 初 始化 中断控 制器的 ?3@-93 及 中 断 方式 寄 存器 ?3@79:, 使 %?3@0 中断使能; 安装 1+2 中断程 序入 口到 中断 向量 中; 初始 化 ? A 9 端口 Q 组控制器 <-93Q, <1<Q 指 明 %>?@0 是作 为中断输入引脚 使用; 设置外 部中断 寄存器 %>@?3@, 指 明触发中断方式。 初始化 1+2 需要 使用 1+2 读 A 写 函 数对 1+2 控制 器内部的控制寄存器进行设置, 步骤如下: 设置主控制寄 存器 7-3@RS 的软 件复 位位 ( +R+@) , 以复 位 1+2 控制 器; 设置主控制器 7-3@RS 的 ; 电 压调 整位 ( .Q% ) 及中 断输出 ( ?3@9- ) 位, 以 禁 止 中 断 输 出; 写时钟寄存器 --93T , 设置 1+2 控制 器的 工作 频率; 初 始化 功能 地址 寄存器 ( T;R) , 及 %<-0 寄存器。端点号 0 为双向 端点, 用作控制使用; 设置中断屏蔽寄存器, 包括 主屏蔽寄存器 7;7+=、 无应答事件 寄存器 3;=7+=、 发送时 间寄 存器 @>7+=、 接收事 件寄 存器 R>7+= 和 ;O*(FIM*( 事 件寄存 器 ;S@7+=; 允许 1+2 控制 器中 信 号输 出, 使 控制 器附 加到 1+2 总线上。 1+2 中断服务例程: 中断服务例程 处理 1+2 控制器 产生的中断, 它将数据从 1+2 内部 T?T9 读出, 并建立正 确的事件标志, 以通知主循环程序进行处理, 其基本步骤 如下: 从 主事件 寄存 器 7;%. 中 读出 产生中 断的 事件; 根据 主事件寄存 器某位的状 态判别事 件, 接 着读取相应 的事件寄存器, 接收事件寄存器 R>%., 或发 送事件寄存 器 @>%., 或无 应答 事件 寄存 器 3;=%., 或 ;O*(FIM*( 事 件寄存器 ;S@%.; 进一 步判 别事 件寄 存器 某位 的状 态, 根据具体事件分别作出相应的 操作。 中断初始化, 安装 1+2 中断服务函数: NBCD ?)FG?IC* ( NBCD) { $ F?3@-93 U P 0V# ; $ A A 中断控制寄存器设置 $ F?3@79:W P X 0V# ; A A ?RY 模式 $ ( " ( NBOM*CO( $ ( " ( NBOM*CO( HI)CJI(D HI)CJI(D KLMF KLMF ") ") 引脚 $ F<1<Q P F<1<QW0V[(; $ A A Q<Q9 上拉电阻有 效 $ F%>@?3@ P 0V00 ; $ A A 低电平触发 $ F?3@7+= P F?3@7+= U 2?@G%?3@0 ;A A 关外部中断 } 通道 0 用 于控 制传 输, 在驱 动程 序中 调 用 FV(N(I*0 () 和 *V(N(I*0 () 处理端点 0 的事件, 通道 # 中 由 *V(N(I*# () 处理端点 # ( 单向 发送) 的 事件, 由 FV(N(I*# () 处理端 点! ( 单向接收) 的事件, 通道 ! 中由 *V(N(I*! () 处理端点 $ F(*HFI ( "( NBOM*CO( HI)CJI(D KLMF " ) ( 单向发送) , 的事 件, 由 FV(N(I*! () 处理 端点 / ( 单 向接 收) 的事件。通道 , 中由 *V(N(I*, () 处理 端点 \ 的 事件, 由 FV(N(I*, () 处理端点 5 的事件。 $ Z?+RG%?3@0 P ( CI* ) GG%CI*0?)F; $ F<-93Q P F<-93Q U 0V000, ; $ A A Q<Q0 设 为 中断

libusb_interrupt_transfer函数用法

libusb_interrupt_transfer函数用法

libusb_interrupt_transfer函数用法libusb_interrupt_transfer函数是libusb库提供的一个函数,用于进行中断传输。

在讨论libusb_interrupt_transfer函数的用法之前,先来了解一下什么是中断传输。

中断传输是一种数据传输方式,用于在设备和主机之间进行实时通信。

它允许设备以一定的时间间隔周期性地发送或接收数据。

中断传输通常用于需要低延迟和实时性能较强的应用,例如音频和视频设备。

libusb_interrupt_transfer函数的用法如下:```cint libusb_interrupt_transfer(libusb_device_handle *dev_handle, unsigned char endpoint, unsigned char *data, int length, int*transferred, unsigned int timeout);```该函数的第一个参数是libusb_device_handle类型的设备句柄,用于标识要进行传输的设备。

该参数可以通过libusb_open_device_with_vid_pid函数来获取。

第二个参数是要进行中断传输的端点地址。

在USB设备中,每个接口都包含多个端点,这些端点用于不同的数据传输方式。

中断传输通常使用的是中断端点。

第三个参数是用于读取或写入数据的缓冲区。

对于读取操作,将从设备中读取数据并存储到该缓冲区;对于写入操作,将该缓冲区中的数据写入设备。

第四个参数是要传输的数据的长度。

标识了要传输多少字节的数据。

第五个参数是一个指向整数的指针,用于存储实际传输的字节数。

在函数执行完毕之后,可以通过该指针获取实际传输的字节数。

第六个参数是传输的超时时间,以毫秒为单位。

如果在指定的时间内未完成传输,函数将返回超时错误。

该函数返回一个整数值,表示函数执行的状态。

如果返回0,表示传输成功;如果返回负值,表示传输失败。

嵌入式linux下基于libusb的USB驱动开发

嵌入式linux下基于libusb的USB驱动开发

种通 信 协 议 , 支 持 主 系 统 (ot和 U B 的 外 围 设 备 ( e 他 hs ) S d.
v e之 间 的数 据 传 输 . 前 流 行 的 U BH s规 范 有 : H IU i) c 当 S ot O C 、H— c 和 E C。嵌 入式 系统 主要 是 使 用 O C 规 范 。 I HI HI U B驱 动程 序 分 为 U B主 机 端 驱 动 程序 和 U B设 备 端 驱 S S S 动 程 序 , 文 重 点 分 析 U B主 机 端 驱 动 程 序 的 开 发 过程 。U B 本 S S
U B U i r l ea B s是 用 于 将 适 用 U B的 外 围设 备 连 S ( n e aSr l u) v 线 结 构 。 目 前 U B接 口 规 范 主 要 有 : S
U B .( 速 15 b s全 速 1M / ) U B .( 速 40 b S 11低 .M / , 2 b s 和 S2 0 高 8M / s , 够 满 足 大 部 分 外 围 设 备 的 传 输 速 度 要 求 。 U B 同时 又 是 )能 S
Lnx 台下 使 用 lub 基 于 ub文件 系统 的驱 动 开 发 , i 平 u i s库 b s 并将 其 应 用 到 嵌 入 式 系统 中 , 显 著 降低 开 发 难 度 , 高 工 可 提
作效 率 。
关 键 词 : 用 串行 总 线 通
l ub库 is b
嵌 入 式 lu U B文件 系统 ix S n
A N D M A R K E T
嵌入式 lu i x下基 于 l ub的 U B驱 动开 发 n is b S
彭定军 陈 安 高 健
华 南理 工大 学 自动化 科 学与 工程 学院 广 州 504 16 0

linux libusb热拔插代码-概述说明以及解释

linux libusb热拔插代码-概述说明以及解释

linux libusb热拔插代码-概述说明以及解释1.引言1.1 概述概述部分旨在介绍本篇文章的主题和背景,为读者提供一个全面而简洁的理解。

本文将重点讨论Linux下libusb热拔插的代码实现,为读者提供有关如何在Linux系统中使用libusb库进行热插拔设备的操作的指导。

在这篇文章中,我们将深入探讨libusb的基本概念、原理和使用方法,以及如何使用libusb实现在Linux环境下热插拔设备的连接和断开。

热插拔技术是现代计算机技术中一个非常重要的概念,它允许用户在系统运行时插入和拔出硬件设备,而无需重新启动计算机。

这种灵活性和方便性使得热插拔回应了不断增长的计算需求和多设备管理的需求,使得我们不再受限于固定硬件的配置。

因此,了解和学习如何在Linux系统中使用libusb库实现热插拔设备的连接和断开对于应用开发人员和系统管理员来说是非常重要的。

在本文的后续部分,我们将首先对libusb进行简要介绍,包括其定义、核心功能和主要用途。

然后,我们将重点介绍热插拔技术的背景和原理,解释为什么热插拔设备的连接和断开是一个重要的技术问题,并探讨其对现代计算机系统的影响。

此外,我们将深入研究如何使用libusb库在Linux系统中实现热插拔设备的连接和断开。

我们将详细讨论libusb的主要API和函数,介绍如何编写代码来检测新设备的插入和拔出事件,并动态地与这些设备进行通信。

我们还将解释如何处理设备插入和拔出事件的错误情况,并提供一些实用的编程技巧和建议。

最后,在本文的结论部分,我们将简要总结我们讨论的主要观点和结果,并探讨libusb热插拔代码在未来的发展和应用前景。

我们将强调热插拔技术在计算机系统中的重要性,并指出可能的改进和扩展领域,鼓励读者进一步探索和研究。

通过对libusb热拔插代码的深入讨论和实践,本文旨在帮助读者更好地理解和应用Linux系统中的热插拔技术,为他们在开发和管理计算机系统时提供有价值的指导和建议。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1576 2010,31(7)
计算机工程与设计ComputerEngineeringandDesign
·开发与应用·
Linux下有中断端点的USB设备驱动的实现
金鑫, 孙松林, 景晓军 (北京邮电大学,北京100876)
摘要:手写板是有中断端点的USB设备,为了在Linux下实现此类设备的驱动,分析了USB设备的基本概念和Linux设备 驱动原理,对Linux下设备驱动程序的内部机制和框架构成进行了研究。在此基础上,提出了引入信号量机制控制内核线 程同步的方法来实现read函数,进而设计出Linux下有中断端点的USB设备的驱动程序。通过编写应用程序和设计对比实 验,证明了此驱动可以准确、高效地读写设备.与针对中断端点普遍采用的输入子系统方式相比,简化了程序设计,提高了 系统效率。 关键词:USB;设备驱动程序;中断端点;Linux;信号量 中图法分类号:TP311.11 文献标识码:A 文章编号:1000.7024(2010)07-1576-04
程序中,读函数一次即可完成数据传输,而中断端点的传输方 式是中断的,要多次读取数据,所以需要解决线程同步问题, 相对比较复杂。本文将以手写板设备为例,参考Linux内核源 码中批量端点的USB设备驱动的示例脚,对Linux下如何设计 和实现有中断端点的USB设备驱动进行研究。实验结果显 示,设计出的驱动可以成功读写设备。
1 USB系统简介
USB意为通用串行总线,以单一类型的总线连接各种不 同类型的设备,是一种被动的总线类型,不能主动向主机发送 任何消息。
USB驱动程序在内核中的位置如图1所示。USB核心通 过定义一系列的数据结构、函数和宏来抽象设备的硬件细节, 提供专门的接口来支持USB设备驱动和主控制器。
Linux操作系统将设备分成4种类型:字符设备,块设备, 网络设备和其它设备01。鼠标、键盘、串口属于字符设备,它们 可以很好地用“流”来描述。本文主要讨论字符设备。
次读完的方法;而对于中断类型的端点,则需要多次的读, 该例程无法正常工作。本文在此例程的基础上加以研究、进
行改进,针对有中断端点的USB手写板设备,设计并实现了
其驱动。
4.1设计与实现有中断端点的USB设备驱动 设计有中断端点的USB设备驱动步骤如下:
(1)Linux设备驱动程序作为内核的一部分,运行于内核
态,需包含相应的头文件和编译预定义。 (2)定义usb skel结构体变量dev,用来保存硬件设备基本
信息,包括设备、接口、引用主键、读写缓冲区、读写端点能处 理的字节数、读写端点的地址、读写端点轮询的时间间隔。
(3)根据设备制造商和设备号定义变量skel_table来创建
匹配硬件列表。定义usb_driver结构体变量skel_driver来描述 驱动程序,初始化name、id tabe、probe、disconnect等成员。在 usb skel init和usb skel exit函数中,分别调用usb
图2 USB设备结构
USB通信最基本的形式是通过端点(USB端点分中断、批 量、等时、控制4种)进行的例,usB端点可看作是单向的管道, 只能往一个方向传送数据,从主机到设备或者从设备到主机。 2 Linux设备驱动原理
Linux驱动硬件的步骤如下: (1)首先加载驱动程序,向系统注册,得到一个主设备号。 (2)当安装上相应硬件后,驱动程序会根据主设备号在/dev 目录下创建一个设备文件,并给该设备文件分配一个次设备 号,就是说该硬件设备文件有主、次设备号“1。 (3)当打开此设备文件时,Linux操作系统就知道该设备对 应的驱动程序,对其加以控制。 在应用程序与硬件设备通信过程中,涉及一个很重要的 数据结构:file_operations。这个结构主要包括open、read、write、 release等成员,每个成员是一个系统调用,分别对应驱动程序 中定义的open、read、write、release等函数啪。当应用程序对某 个设备文件执行op蜘、read等函数时,首先设备文件会根据已 分配的主、次设备号找到设备驱动程序,再根据设备驱动程序 对file_operation结构体定义的系统调用,找到对应的open、read 等函数,并把控制权交给相应函数,完成与硬件设备的通信。 如图3所示。
Abstract:To realize the communication between computer and handwriting board which is a kind ofdevice with interrupt endpoints,a method to develop USB driver in Linux is studied.Based on the principle ofdriver for USB device。the intemal mechanism and structure ofdriver in Linux for USB device are analyzed.The semaphore mechanism iS introduced to realize the synchronization ofkernel threads. And the driver in Linux for USB device with interrupt endpoints is designed.Both application program and comparable experiments de— monstrated the feasibility of the driver.Compared with the common methods of input subsystem with regarding to interrupt endpoints, the whole efficient process is simplified. Key words:USB;device driver;interrupt endploints;Linux;semaphore
Implementation of USB device driver with interrupt endpoints in Linux
JIN Xin. SUN Song.1in。JING Xiao-jun (Beijing University of Posts and Telecommunications,Beijing 1 00876,China)
读取输入参数一interface接口数据指针 分配结构体变量dev
通过接口获取设备来初始化dev->udev
4在Linux下的手写板设备驱动的实现
上面是针对Linux2.6.22.14的内核源码里的skeleton.C
程序所做的分析,其设计框架和开发流程是很典型的“…。该 示例程序是针对批量端点进行数据传输的,在读设备时用一
3.2注册和注销USB驱动程序
一个USB驱动程序必须有结构体usb driver,以向USB核 心描述USB驱动程序,一般包括name、id table、probe、discon- neet这几个成员,分别告诉内核驱动程序名称、硬件匹配信息
列表和当一个匹配的硬件连接或移除时,应调用哪些函数。在
USB驱动程序被初始化时,调用usb
开函数里,接口数据被置空,通过调用usb___deregis ter dev 函数 硬件设备被注销。
3.4传输数据
当驱动程序有数据要发送到USB设备时或者要从USB
设备接收数据时,即实现read、write函数,一般要分配并提交
一个urb(USB请求块)来实现与设备问的数据传输。在初始化
万方数据
1578
O引 言
Linux以其内核高效稳定、源码开放、文件管理机制完善 等优点,得到了广泛的应用。而USB接121以其低成本、速度 高、通用性强、支持即插即用等优点,越来越多的被采用。由 于Linux在硬件配置上尚不能全部支持USB设备,因此Linux 下如何驱动有USB接口的设备一直是该领域工程实现的热 点和难点。USB设备传输数据时所用端点主要有批量端点和 中断端点两大类,如打印机、大容苣存储设备属于批量端点, 其特点是传输批量的没有周期和传输速率要求的数据;而手 写板等设备属于中断端点,其特点是主机通过对设备的查询 来确定设备是否有数据需要传输Ⅲ。批量端点的设备驱动程 序设计比较简单,内核源码中的skeleton示例即为批量端点 的;而针对中断端点,内核源码主要提供鼠标和键盘设备的驱 动程序示例,它们都是采用输入子系统方式实现的,不够灵 活。如果结合批量端点的示例程序和中断端点的传输特点, 实现有中断端点的USB设备驱动,可以简化程序,提高效率, 并且有很强的实用价值和创新价值。但是在批量端点的驱动
usb driver
函数把.rgister
注册到USB核心。在USB驱动程序将要被卸载时,调用usb
deregister函数把usb_driver从内核中注销,然后,与该驱动程 序绑定的所有USB接U被断开,并调用断开函数。
3.3探测和断开
当一个设备连上总线时,usb_get._device_descriptor函数自 动执行,取出设备的描述符树结构,用结构体usb device保存
孙松林,男,副教授,研究方向为无线多媒体;
万方数据
金鑫,孙松林,景晓军:Linux下有中断端点的USB设备驱动的实现
2010,31(7)
1577
用户
字符设备 块设备层 网络设备 TTY设备 其它 内核
USB设备驱动程序 USB核心
USB主控制器
硬件
图1 USB驱动程序在内核中的位置
接口描述符和端点描述符。通过获取描述符,设备驱动程序 就可以知道具体设备的相关信息,从而对设备进行相应控制。 驱动程序会对USB设备的每一个接口进行一次探测,当探测 成功后,驱动程序就被绑定到这个接口上Ⅲ。如图2所示。
2010,3 1(7)
计算机工程与设计Computer Engineering and Design
相关文档
最新文档