linux开发usb驱动程序,嵌入式Linux系统下的USB驱动程序开发

1引言通用串行总线(UniversalSerialBus,USB)是一个连接外部设备的串行总线标准[1],其最大的特点是支持热插拔(HotPlug)和即插即用(Plug&Play)。随着现在嵌入式微处理器的工艺和接口技术发展,价格低、功能强大、结构小巧的CPU和外设为嵌入式设备提供了稳定可靠的硬件架构,从而快速地促

进了嵌入式系统的发展,同时,USB快速发展已经取代了串并口等传统的外部接口成为外部设备与PC之间数据传输的主要通道。2USB基础USB是一种电缆总线,支持在主机和各种即插即用的外设之间进行数据传输[2]。由主机预订的标准协议使各种设备分享USB带宽,当其他设备和主机在运行时,总线允许添加、设置、使用及拆除外设。一个USB系统包含三种硬件设备:USB主机(USBHOST)、USB设备(USBDEVICE)、USB集线器(USBHUB)。在USB系统中,USB总线通信基于轮询机制(PolledBus),主机在整个系统中处于主导地位,任何一次数据通信都是由主机发起的。USB具有四种传输方式:控制传输、批量传输、中断传输、同步传输,其数据通信是双向的,数据从主机传向USB设备称为下行通信,数据从USB设备传向主机称为上行通信,控制权是在主机方,不支持设备间的直接通信。3USB驱动程序结构在Linux系统中,USB整个驱动由USB主机控制器驱动部分和USB设备驱动部分组成。USB主机控制器驱动部分,主要是用来驱动芯片上的主机控制器硬件。USB设备驱动部分是指具体的设备,例如USB鼠标、USB摄像头等设备驱动[3],如图1是USB驱动的总体架构。USB主机控制器驱动程序负责与USB接口之间的通信和USB的数据传输。USB核心负责USB总线管理、USB的hub驱动程序、USB设备驱动程序接口以及应用程序访问USB系统的文件接口。USB设备类驱动程序是与应用程序交互的对应模块,它主要实现特定USB设备的访问,为应用程序提供访问接口。USB设备使用USB核心提供的函数与设备通信,所以它应是与平台无关的。4USB设备驱动程序实现的关键内容USB驱动程序最基本是要完成四部分内容:驱动程序所支持的设备列表、注册USB驱动程序、探测和断开、提交和控制urb(USB请求块)[4]。4.1驱动程序支持的设备列表结构体structusb_device_id提供了一系列不同类型的该驱动程序支持的USB设备,对于一个id只控制一个特定的USB设备的驱动程序来说,structusb_device_id表被定义为:#defineUSB_SKEL_VENDOR_ID0xfff0#defineUSB_SKEL_PRODUCT_ID0xfff0Staticstructusb_device_idskel_table[]={{USB_DEVICE(USB_SKEL_VENDOR_ID,USB_SKEL_PRODUCT_ID)},shou{}};MODULE_DEVICE_TABLE(usb,skel_table);MODULE_DEVICE_TABLE的第一个参数是设备类型,如果是USB设备,那就是usb。第二个参数是设备表的名称,这个设备表达最后一个参数是空的,用于标识结束。代码定义了USB_SKEL_VEN-DOR_ID是0xfff0,USB_SKEL_PRODUCT_ID是0xfff0,图1USB驱动总体架构

也就是说,当有一个设备接到集线器上时,usb子系统会检查到这个设备的vendorID和productID。4.2注册USB驱动程序所有的USB设备驱动程序在注册和注销时都

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值