自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(20)
  • 收藏
  • 关注

转载 Makefile

http://scc.qibebt.cas.cn/docs/linux/base/%B8%FA%CE%D2%D2%BB%C6%F0%D0%B4Makefile-%B3%C2%F0%A9.pdf

2013-09-23 11:48:08 388

转载 7.最熟悉的陌生人--probe

7.最熟悉的陌生人--probe话说因为Hub驱动无所事事,所以hub_thread()进入了睡眠,直到某一天,hub_probe被调用。所以我们来看hub_probe(),这个函数来自drivers/usb/hub.c,其作用就如同当初我们在usb-storage中遇到的那个storage_probe()函数一样。887 static int hub_probe(struct u

2013-09-16 09:17:40 867

转载 6.等待,只因曾经承诺

6.等待,只因曾经承诺hub_thread()中还有一个函数没有讲,它就是try_to_freeze(),这是与电源管理相关的函数。对大多数人来说,关于这个函数,了解就可以了。随着Linux开始支持suspended之后,有人提倡,每一个内核进程都应该在适当的时候,调用try_to_freeze()。什么意思呢?有这样一个flag,PF_NOFREEZE,如果你这个进程或者内核线程

2013-09-16 09:16:18 537

转载 5.那些队列,那些队列操作函数(2)

5.那些队列,那些队列操作函数(2)从队列里删除一个元素,并且将该元素做初始化,首先看__list_del():155 static inline void __list_del(struct list_head * prev, struct list_head * next)  156 {  157     next->prevprev = prev;  158     prev->

2013-09-16 09:15:52 794

转载 5.那些队列,那些队列操作函数(1)

5.那些队列,那些队列操作函数(1)这一节我们讲队列。随着子进程进入了我们的视野,我们来看其入口函数hub_thread(),这是一个令你大跌隐形眼镜的函数。2817 static int hub_thread(void *__unused)  2818 {  2819    do {  2820        hub_events();  2821        wait_e

2013-09-16 09:14:41 1075

转载 4.一样的精灵,不一样的API(2)

4.一样的精灵,不一样的API(2)关于内核空间,我只想说,所有的驱动程序都是运行在内核空间的,内核空间虽然很大,但总是有限的。而在这有限的空间中,其最后一个page是专门保留的,也就是说,一般人不可能用到内核空间最后一个page的指针。换句话说,你在写设备驱动程序的过程中,涉及的任何一个指针,必然有三种情况:一种是有效指针,一种是NULL(空指针),还有一种是错误指针,或者说无效

2013-09-16 09:14:04 498

转载 4.一样的精灵,不一样的API(1)

4.一样的精灵,不一样的API(1)usb_register()这个函数是用来向USB核心层,即USB Core,注册一个USB设备驱动的,而这里我们注册的是Hub的驱动程序所对应的struct usb_driver结构体变量。定义于drivers/usb/ core/hub.c中:2841 static struct usb_driver hub_driver = {  2842  

2013-09-16 09:12:32 577

转载 3.特别的爱给特别的Root Hub

3.特别的爱给特别的Root Hub不懂Hub是怎么工作的就等于不知道USB设备驱动是怎么工作的。这句话一点没错,因为USB设备的初始化都是Hub这边发起的,通常我们写USB设备驱动程序都是在已经得到了一个struct usb_interface指针的情况下开始probe工作。可是我要问你,你的struct usb_interface从哪来的?老实说,要想知道从USB设备插入USB口的那一

2013-09-16 09:11:24 772

转载 2.跟我走吧,现在就出发

2.跟我走吧,现在就出发这里说的是USB中的Hub。在USB的世界里,Hub永远都只是绿叶,它不可能是红花,它的存在只是为了支持更多设备连接到USB总线上来,谁也不会为了使用Hub而购买Hub,买Hub的原因是为了要使用别的设备。也许设计代码的人和我一样,希望大家能够更多地关注Hub,所以,关于Hub的代码在Core的目录下面。在Linux内核代码目录中, 所有设备驱动程序

2013-09-16 09:10:43 1413

转载 1.引子

1.引子天有不测风云,人有旦夕祸福。在2007年的夏天,我那可爱的电脑声卡坏了。朋友给我推荐了一款飞利浦的外置声卡PSC805,老实说,声卡还能用外置的,的确让我觉得新鲜,它直接用USB连接,价钱也还可以。所以我去了一趟中关村买了一块外置声卡。然而,在店家那里好好的声卡买回来之后居然连指示灯都不亮,根本没法用。不是完全不亮,一开始会亮,然后就不亮了。凭直觉,我判定这是软件的

2013-09-16 09:09:34 564

转载 USB入门系列之七 —— USB的描述符及各种描述符之间的依赖关系

USB是个通用的总线,端口都是统一的。但是USB设备却各种各样,例如USB鼠标,USB键盘,U盘等等,那么USB主机是如何识别出不同的设备的呢?这就要依赖于描述符了。    USB的描述符主要有设备描述符,配置描述符,接口描述符,端点描述符,字符串描述符,HID描述符,报告描述符等等。关于报告描述符,请看我以前写的:《USB HID报告及报告描述符简介 》 http://g

2013-09-10 09:08:49 737

转载 USB HID报告及报告描述符简介

在USB中,USB HOST是通过各种描述符来识别设备的,有设备描述符,配置描述符,接口描述符,端点描述符,字符串描述符,报告描述符等等。USB报告描述符(Report Descriptor)是HID设备中的一个描述符,它是比较复杂的一个描述符。 USB HID设备是通过报告来给传送数据的,报告有输入报告和输出报告。输入报告是USB设备发送给主机的,例如USB鼠标将鼠标移动和鼠标点击等信息返回给电

2013-09-10 09:08:38 837

转载 USB入门系列之六 —— USB设备的枚举过程

USB主机在检测到USB设备插入后,就要对设备进行枚举了。为什么要枚举呢?枚举就是从设备读取一些信息,知道设备是什么样的设备,如何进行通信,这样主机就可以根据这些信息来加载合适的驱动程序。调试USB设备,很重要的一点就是USB的枚举过程,只要枚举成功了,那么就已经成功大半了。    在说枚举之前,先大概说一下USB的一种传输模式——控制传输。这种传输在USB中是非常重要的,它要保证数据的正确性

2013-09-10 09:07:56 1120

转载 USB入门系列之五 —— USB设备的插入检测机制[图]

USB主机是如何检测到设备的插入的呢?首先,在USB集线器的每个下游端口的D+和D-上,分别接了一个15K欧姆的下拉电阻到地。这样,在集线器的端口悬空时,就被这两个下拉电阻拉到了低电平。而在USB设备端,在D+或者D-上接了1.5K欧姆上拉电阻。对于全速和高速设备,上拉电阻是接在D+上;而低速设备则是上拉电阻接在D-上。这样,当设备插入到集线器时,由1.5K的上拉电阻和15K的下拉电阻分压,结果就

2013-09-10 09:06:00 6978

转载 USB入门系列之四 —— USB的线缆以及插头、插座[图]

USB是一个标准的协议,因此对线缆、插头、插座等有严格的规范要求。    在最初的标准里,USB接头有4条线:电源,D-,D+,地线。我们暂且把这样的叫做标准的USB接头吧。后来OTG出现了,又增加了miniUSB接头。而miniUSB接头则有5条线,多了一条ID线,用来标识身份用的。标准USB口只有A型和B型。其中每一型又分为插头和插座,例如A型插头,A型插座等。我们平常电脑上用

2013-09-10 09:05:19 3103

转载 USB入门系列之三 —— USB的电气特性

标准的USB使用4根线:5V电源线(Vbus),差分数据线负(D-),差分数据线正(D+),地(Gnd)。在USB OTG中,又增加了一种mini接口,使用的是5根线,比标准的USB多了一根身份识别(ID)线。USB使用的是差分传输模式,有两根数据线,分别是D+和D-。在USB的低速和全速模式中,采用的是电压传输模式。而在高速模式下,则是电流传输模式。关于具体的高低电平门限值,请参看USB协议。为

2013-09-10 09:01:10 2711

转载 USB入门系列之二 —— USB的连接模型[图]

USB是一种主从结构。主机叫做Host,从机叫做Device(也叫做设备),集线器也被当作一种特殊的设备处理。USB的数据交换只能发生在主机和设备之间,主机和主机,设备和设备之间不能互连。为了在物理上区分主机和设备,使用了不同的插头和插座,这个在USB的连接器一节中会讲到。所有的数据传输都由主机主动发起,而设备只是被动的负责应答。例如,在读数据时,USB先发出读命令,设备收到该命令后,才返回数据。

2013-09-10 09:00:29 1320

转载 USB入门系列之一 —— USB概述

USB是什么呢?一说USB是You SB的意思,即“你傻B”的意思。另一种说法是USB其实是美国的弟弟,因为美国叫USA,USB当然是他的弟弟了。    那么USB到底是什么呢?其实USB是通用串行总线(Universal Serial Bus)的简写,它已经有了10多年的历史了。USB协议出现过的版本有USB1.0,USB1.1,USB2.0。由于USB是主从模式,设备与设备之间、主机与主机

2013-09-10 08:59:06 827

转载 USB枚举

在说枚举过程之前,先把一些必须了解的说明白一.USB包结构和分类     包的共同特点是,都是以同步域开始,接着是PID,最后以EOP结束,而设备端则靠SEI(串行接口引擎,硬件上实现)来进行这些底层的处理,包括CRC的校验之类的东东。    8位的PID,PID0~PID3,用于表示包,高四位进行取反,进行校验    各种包的如下:    令牌类:OUT,IN ,SOF,

2013-09-09 09:25:00 712

转载 USB协议基本知识

USB协议基本知识USB 基本知识 USB的重要关键概念: 1、 端点:位于USB设备或主机上的一个数据缓冲区,用来存放和发送USB的各种数据,每一个端点都有惟一的确定地址,有不同的传输特性(如输入端点、输出端点、配置端点、批量传输端点) 2、 帧:时间概念,在USB中,一帧就是1MS,它是一个独立的单元,包含了一系列总线动作,USB将1帧分为好几份,每一份中是一个

2013-09-09 09:21:35 734

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除