分享

LINUX驱动学习——内核USB驱动编写之一USB驱动的简介

 guitarhua 2012-11-22

LINUX驱动学习——内核USB驱动编写之一USB驱动的简介  

2012-08-28 21:51:17|  分类: USB系列 |  标签:内核usb   |字号 订阅

LINUX驱动学习——内核USB驱动编写一USB驱动的简介

开发USB的驱动,无外乎有以下几种类型:
1、USB的HOST驱动(或者说主机驱动)。
2、USB的设备驱动(或者说从端驱动)。
3、OTG。
另外,还有主机端的设备驱动开发,这块儿基本上都已经由操作系统抽象出来,提供了接口,而主机驱动,基本上操作系统也提供了,嵌入式设备一般是作为slave设备来工作的,当然,如果你需要作为

HOST来工作,那只好自己来实现了。
具体说,主机控制器驱动程序实现的功能包括以下几点:
1)  解析,维护urb,根据不同的端点分类缓存urb。
2)  实现不同USB传输类型的调度工作。
3) USB数据的实际传输工作。
4)  实现虚拟根HUB的功能。
而从实际情况来看,更多的是作为设备驱动(SLAVE)进行驱动开发。也就是USB GADGET驱动,Linux Gadget子系统主要分为三层:第一层为芯片驱动层,负责将各种USB device控制器抽象为统一的函数

接口,以供上层驱动程序调用;第二层主要是对操作函数的简单封装;第三层为设备驱动层,可根据系统的需求实现所对应的功能。图1所示是Linux Gadget子系统的驱动层次。(基本不以WIN的USB情况

来讲,整个流程是一样的,但是WIN封装的更高)
而OTG是为了满足现在的USB设备特别是一些便携设备的互通互连,这些USB设备既有HOST也有SLAVE端,他们会自动的判断是转到哪一方。

所以说,基本学习的最多的还是USB的设备驱动。这也是最多,用得最广的。从键盘、鼠标到U盘,移动硬盘,音乐设备等等。其中HID设备(人机工程学设备,前面的键盘啥的)是最最常见的。
USB的驱动又向后延迟了一下,不要紧,目标盯紧了就行。慢慢预热,慢慢来。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多