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://wenku.baidu.com/link?url=eIwUG6V4v4dUPub-z_6EZS3LTHKDtgzU4nyArhlqnVU40qNk3sRRdbE7TeMYIkiSHQWN9wiwXYXfG2isxVvONAiqOYzg9xpg8ViSjpbfeyi: usb协议

 http://wenku.baidu.com/link?url=Hzjv0uKuJ0zUIhOHEUErEKjWY93cB0FGvVG9jaF8TWzxQCJjLSdSKOAWDbsb-fTkI5eUwYueGqyaS89iEjP5Ynt5qAqnUJevcXgtC26UDpG: usb hub协议

 

 

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://wenku.baidu.com/link?url=m73s8Hq5wxD-DZR5X02-Ltp9kEGiNSlKSUfJhf0mvrityUP5CwE1JnpyndnqlFcrW2hrMhL8_4LH0utF1p2DDAL00u44Y40Znosh51V2yxK

 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

 http://wenku.baidu.com/link?url=BUfLIzBG-ER22uiONf0nN78xXL_Inv4rciMtSl5IcDyRJ1D0_JF4i20EqvC2qZleBa2cT7IViEK4VzzV8Cl0d37ajf0KfEbgsKK-uSSCHta: linux伪终端

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协议

http://wenku.baidu.com/link?url=VK6wEQIWlmL7VgIpuHBhCZPk-CivVSHdCthSzy-_AdVK_7zdrwP4VLOjZpmSXNMwitK76Rgeld0STAwVKv8ZTT__9SPkVKT3lWCi7OGFNti

时间: 2024-09-15 17:45:28

Linux下USB驱动框架分析【转】的相关文章

Linux USB驱动框架分析【转】

转自:http://blog.csdn.net/jeffade/article/details/7701431 Linux USB驱动框架分析(一) 初次接触和OS相关的设备驱动编写,感觉还挺有意思的,为了不至于忘掉看过的东西,笔记跟总结当然不可缺,更何况我决定为嵌入式卖命了.好,言归正传,我说一说这段时间的收获,跟大家分享一下Linux的驱动研发.但这次只先针对Linux的USB子系统作分析,因为周五研讨老板催货.当然,还会顺带提一下其他的驱动程式写法. 事实上,Linux的设备驱动都遵循一个

Linux USB驱动框架分析(2)【转】

转自:http://blog.chinaunix.net/uid-23046336-id-3243543.html   看了http://blog.chinaunix.net/uid-11848011-id-96188.html的驱动框架分析,感觉受益匪浅.对于一些内容,我自己查漏补缺. 首先我们按照顺序,看内核模块的注册以及释放函数如下: 点击(此处)折叠或打开 static int __init usb_skel_init(void) {     int result;     /* reg

转: 嵌入式linux下usb驱动开发方法--看完少走弯路【转】

转自:http://blog.csdn.net/jimmy_1986/article/details/5838297 嵌入式linux下的usb属于所有驱动中相当复杂的一个子系统,要想将她彻底征服,至少需要个把月的时间,不信?那是你没做过. 本人做过2年的嵌入式驱动开发,usb占了一大半的时间.期间走了不少弯路,下面将我的血的经验教训总结下,为要从事和正在从事的战友们做一点点贡献吧:) 首先,扫盲: 要做的是阅读usb Spec(英文的哦,其实很多文章.书籍和资料真有水平的还是原创的好,就像食品

Linux下USB suspend/resume源码分析【转】

转自:http://blog.csdn.net/aaronychen/article/details/3928479 Linux下USB suspend/resume源码分析 Author:aaron   本文主要从自己开发的一个USB驱动的例子来深入讲解linux内核是如何支持USB设备的休眠和唤醒的, 最近我在为我们公司的一个模块写linux下的驱动, 其中之一就是要支持USB的休眠唤醒问题, 实际上linux内核对USB的这个功能的支持还是比较新的, 也就是最近几年的事.   一  打开/

Linux下DDOS攻击木马分析报告

本文讲的是Linux下DDOS攻击木马分析报告,在最近的一次给用户做服务器系统安全检测的过程中发现一台服务器,频繁向外发包,网页打开缓慢,上服务器提取了样本的情况分析如下: 1. 样本基本信息 2. 样本概述 样本解密数据用以配置,安装各种不同的启动项,远程连接ip:www.linux#cc:6001(由于文件路径不同所连接的端口不一样,但是ip不变).生成不同路径下的副本来执行守护,过滤等,释放ss.netstat等执行过滤病毒,木马端口信息.根据返回信息实施各种不同的类型的DDOS攻击. 3

WinXP下USB驱动开发(四)

第3节       设计说明 3.1.       概要设计 该任务主要包括上位机USB驱动开发.LPC2440 下位机程序开发.调试三部分.其中LPC2440 下位机程序开发部分已经完成,不需要再行设计和开发.因此接下来的任务主要由上位机USB 驱动开发和调试两部分构成.严格来说调试又分检测软件的编写和整体调试两部分.因此我们的设计工作主要如下几部分(图3-1-1). 概要设计如下: 上位机USB驱动设计:采用WDM驱动设计模式开发,遵循严格的USB2.0规范,实现即插即用.数据传输等驱动功能

Linux下USB烧写uImage kernel

Linux下USB烧写uImage kernel   1.启动开发板,进入u-boot:(如果开发板中没有系统,可以通过用SD卡方式启动开发板进入)   U-Boot 2011.06 (Mar 19 2012 - 08:45:34) for MINI6410   CPU: S3C6400@667MHz Fclk = 667MHz, Hclk = 133MHz, Pclk = 66MHz (ASYNC Mode) Board: MINI6410 DRAM: 256 MiB NAND: 512 Mi

Linux 字符设备驱动框架详细介绍_Linux

Linux 字符设备驱动框架 字符设备是Linux三大设备之一(另外两种是块设备,网络设备),字符设备就是字节流形式通讯的I/O设备,绝大部分设备都是字符设备,常见的字符设备包括鼠标.键盘.显示器.串口等等,当我们执行ls -l /dev的时候,就能看到大量的设备文件,c就是字符设备,b就是块设备,网络设备没有对应的设备文件.编写一个外部模块的字符设备驱动,除了要实现编写一个模块所需要的代码之外,还需要编写作为一个字符设备的代码. 驱动模型 Linux一切皆文件,那么作为一个设备文件,它的操作方

VxWorks下USB驱动总结2

3:USBD驱动详解 这一部分将要描述USBD(USB Host Driver)的典型应用.例如初始化,client注册,动态连接注册,设备配置,数据传输,同时还探讨了USBD内部设计的关键特性.这部分是VxWorks下USB驱动的核心.   1 初始化USBD:分为两步 (1)必须至少调用一次函数usbdInitialize().在一个给定的系统中,usbdlnifialize()初始化内部USBD数据结构,并依次调用其它USB驱动栈模块的入口.usbdinitialize()可以在启动时调用