Linux下USB驱动框架分析【转】
转自:http://blog.csdn.net/brucexu1978/article/details/17583407
版权声明:本文为博主原创文章,未经博主允许不得转载。
http://www.cnblogs.com/general001/articles/2319552.html
http://blog.csdn.net/uruita/article/details/7263290:MODULE_DEVICE_TABLE
http://blog.chinaunix.net/uid-25909619-id-3281432.html: usb 流程
http://blog.chinaunix.net/uid-25909619-id-3273345.html:uhci
http://blog.chinaunix.net/uid-25909619-id-3381683.html: usb热插拔实现机制(hub probe或者中断)
http://www.cnblogs.com/sdphome/archive/2011/09/29/2195789.html
http://blog.csdn.net/jiang_dlut/article/details/5832237: 这个讲了usb_device_driver和usb_driver。usbhub发现新设备的插入时, 先用device来进行dvice_add(见usb_alloc_dev, 其中dev->dev.type = &usb_device_type; 这个表示是整个usb device), 然后usb_register_device_driver注册的driver的generic_probe会被usb_probe_device调用, 这个函数会调用usb_set_configuration。如此接口类型的device_add会被调用(intf->dev.type = &usb_if_device_type; 这个表示是usb interface设备(当时理解了半天, 这么着都找不到interface probe中的dev是怎么能转变成interface的。多亏了这篇文档))。这样设备接口的probe函数就在usb_probe_interface中被调用,usb_probe_interface是在usb_register_driver(usb_register)中注册的。这样usb设备的枚举过程就容易读了。
http://blog.csdn.net/brucexu1978/article/details/9043523:这个文章介绍了linux device和driver匹配的过程。
http://download.farsight.com.cn/download/pdf/Farsight-USB08-HubRequest.pdf: hub request
http://wenku.baidu.com/link?url=ZH7Oe5k8B1yH-04YKAiFh948-fqsxn7sqpAd9b3iemJ5J_gmn4ojsyP1UbCkRL0-pD3NmYP5l519f4SM5NOVQnBT0qCI4bN91J-2hbU2RMe: ohci寄存器描述:ed, td
http://blog.csdn.net/qiurihuanghua/article/details/6411640: ehci:软件简化
http://wenku.baidu.com/link?url=T8JhyspWwUrlRimCCBySy0XUwxULwYcVx1jkIM78z7sKqD80ivjiet5LwMvtQbB0gVQBU-I5DvnpP0ZelAix2S3zGuoYNULSqcXrwA77dDq:usb3.0:多了4根超速线, 分离的2个hub(超速, 2.0), 设备可以发ready的异步请求, 不同于2.0的由主机发起的轮询请求。流式管道用于3.0的流控(bulk扩展)。支持突发模式传输. 网上基本没有linux usb3.0驱动的讲解文章, 也没有特别公开的usb3.0芯片的资料和讲解(20140122)。
http://www.epc.com.cn/subject/200803/10591.html: 无线usb带宽分析
http://blog.csdn.net/leo_wonty/article/details/7418261:usb masstorage
http://blog.chinaunix.net/uid-10386087-id-2958758.html
http://blog.csdn.net/xushiyan/article/details/6877460: 描述linux scsi驱动的架构, 包括跟linux块层的接口,跟底层host的接口, 以及一些sequence。至此明白usb mass storage设备是如何挂接scsi, 再挂接到块设备, 由此挂接到文件系统的(不好意思, 这个花了偶近5年的时间, 因为是靠平常的时间, 悲催啊)。
http://blog.csdn.net/xushiyan/article/details/6941640:scsi io回调
usb gadget:
http://blog.csdn.net/successcw/article/details/17137361
http://blog.csdn.net/arnoldlu/article/details/9291883
http://lwn.net/Articles/395712/:讲述不用composite framework的逆势.
usb device侧的gadget驱动框架总体上比较薄。协议层(masstorage/cdc等)调用gadget api, gadget api调用gadget的端点ep的ops, 这个ops来自具体硬件平台的注册的ep的操作函数。udc_core主要负责udc 添加usb_add_gadget_udc, 设备层的usb_gadget_probe_driver等。
file_storage与mass_storage的区别是前者未使用composite抽象, 后者使用composite抽象。composite抽象层同时供其他协议(串口/网络等)使用(config/function管理)。
mass storage都是经过vfs访问具体的存储设备, 其路径是模块加载时的file参数确定的(在内核态可通过vfs api访问文件)。scsi命令在sorage层被解析。
Android.c中的mass_storage也是走的composite. 这个文件整合了很多的usb device功能, 包含adb等。通过sysfs的store函数enable不同的功能。
具体udc驱动负责queue/传输管理(dma? fifo?)/设备管理/中断等。可参考omap等, platform_driver_probe注册这个driver。dma调用platform层提供的dma功能操作。 不同的platform的dma函数不同。
http://blog.csdn.net/embededswordman/article/details/6689593: usb gadget串口
http://blog.chinaunix.net/uid-24227137-id-3437527.html:linux tty驱动
http://blog.chinaunix.net/uid-27717694-id-3495612.html: linux console
usb串口主要是将usb转换成tty设备, device侧和host侧都是这样。cdc acm模拟modem
audio device使用linux sound core接口
video:v4l2接口
ether: cdc eem/ecm/subset,实现net_device_ops接口:
http://wenku.baidu.com/view/d06c4318ff00bed5b9f31dbc.html
android mtp:文件传送 ptp:still image类:http://baike.baidu.com/link?url=qceecPkdLhQrvy9zoAIpmIPImYHiFOUGGw4NrTP1TAzVlq7wF1_CTA73JhmHwC-t
rndis:微软协议, 代替cdc ether协议
Linux下USB驱动框架分析【转】的更多相关文章
- Linux USB驱动框架分析 【转】
转自:http://blog.chinaunix.net/uid-11848011-id-96188.html 初次接触与OS相关的设备驱动编写,感觉还挺有意思的,为了不至于忘掉看过的东西,笔记跟总结 ...
- Linux USB驱动框架分析【转】
转自:http://blog.csdn.net/jeffade/article/details/7701431 Linux USB驱动框架分析(一) 初次接触和OS相关的设备驱动编写,感觉还挺有意思的 ...
- Linux USB驱动框架分析(2)【转】
转自:http://blog.chinaunix.net/uid-23046336-id-3243543.html 看了http://blog.chinaunix.net/uid-11848011 ...
- 转: 嵌入式linux下usb驱动开发方法--看完少走弯路【转】
转自:http://blog.csdn.net/jimmy_1986/article/details/5838297 嵌入式linux下的usb属于所有驱动中相当复杂的一个子系统,要想将她彻底征服,至 ...
- linux下usb驱动接口中端点介绍
端点 USB 通讯的最基本形式是通过一个称为端点的东西.一个USB端点只能向一个方向传输数据(从主机到设备(称为输出端点)或者从设备到主机(称为输入端点)).端点可被看作一个单向的管道. 一个 USB ...
- linux驱动基础系列--linux spi驱动框架分析
前言 主要是想对Linux 下spi驱动框架有一个整体的把控,因此会忽略某些细节,同时里面涉及到的一些驱动基础,比如平台驱动.设备模型等也不进行详细说明原理.如果有任何错误地方,请指出,谢谢! spi ...
- Linux下 USB设备驱动分析(原创)
之前做过STM32的usb HID复合设备,闲来看看linux下USB设备驱动是怎么一回事, 参考资料基于韦东山JZ2440开发板,以下,有错误欢迎指出. 1.准备知识 1.1USB相关概念: USB ...
- 【驱动】linux下I2C驱动架构全面分析
I2C 概述 I2C是philips提出的外设总线. I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL ,使用SCL,SDA这两根信号线就实现了设备之间的数据交互,它方便了工程师的布线. ...
- linux下I2C驱动架构全面分析【转】
本文转载自:http://blog.csdn.net/wangpengqi/article/details/17711165 I2C 概述 I2C是philips提出的外设总线. I2C只有两条线,一 ...
随机推荐
- talent-aio源码阅读小记(一)
近来在oschina上看到一个很火的java 即时通讯项目talent-aio,恰巧想了解一下这方面的东西,就阅读了一下项目的源码,这里对自己阅读源码后的一些心得体会做一下备忘,也希望能够对其他项目中 ...
- Oozie 安装及 examples app 的使用
参考文档 一.Building OOzie 特别注意的是修改Pom.xml文件中的版本与本机中安装的版本相同 二. install Oozie 1.为 hadoop 添加 Oozie 的代理用户,添加 ...
- Web性能测试问题,mysql分析之一
在做性能测试执行中,发现性能很慢,顺藤摸瓜找一下是什么问题? 并发40个用XXX场景 1.运行过程中监控mysql数据库的CPU过高,达到65%: %CPU %Mem %Disk %Net ...
- 15.3,redis持久化RDB与AOF
redis持久化 Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失. RDB持久化 ...
- [转]Android进程间通信--消息机制及IPC机制实现
Android为了屏蔽进程的概念,利用不同的组件[Activity.Service]来表示进程之间的通信! 组件间通信的核心机制是Intent,通过Intent可以开启一个Activity或Servi ...
- PJMEID学习之视频的捕捉与播放
pjmedia是pjsip的视频部分,官网明确提示,要想使用pjmedia离不开directshow/sdl/ffmpeg这三个库. 软件版本的限制: ffmpeg不能高于1.25.(建议下载1.01 ...
- 《Cracking the Coding Interview》——第8章:面向对象设计——题目8
2014-04-23 23:49 题目:有个棋牌游戏叫Othello,也叫Reversi.请看游戏规则.中文应该叫黑白棋吧,不常玩儿就是了. 解法:既然这题的规则很清楚,也很清楚,我就写了一个命令行的 ...
- 【Count Complete Tree Nodes】cpp
题目: Given a complete binary tree, count the number of nodes. Definition of a complete binary tree fr ...
- shell之基本语法
转: read 命令从 stdin 获取输入并赋值给 PERSON 变量,最后在 stdout 上输出: #!/bin/bash # Script follows here: echo " ...
- android ViewGroup getChildDrawingOrder与 isChildrenDrawingOrderEnabled()
getChildDrawingOrder与 isChildrenDrawingOrderEnabled()是属于ViewGroup的方法. getChildDrawingOrder 用于 返回当前 ...