E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
UHCI
Linux那些事儿之我是
UHCI
(22)Root Hub的中断传输
来看中断传输,中断传输和下面要讲的等时传输无疑要比之前的那两种传输复杂些,至少它们讲究一个周期性.当年歌坛大姐大那英在看到usb子系统中对这两种传输的实现的复杂性之后,颇为感慨的对写代码的哥们儿唱出了那句”就这样被你征服”,而其多年来的老对手田震看了之后心情抑郁,一气之下,嗓子永久性的嘶哑了,但仍然呼吁后人看这些代码的时候要”执著”.所以我们看代码的时候看不懂也不用灰心,歌手林志炫的成名曲>也就是
fudan_abc
·
2007-11-14 21:00
timer
linux
struct
report
System
buffer
Linux那些事儿之我是
UHCI
(22)Root Hub的中断传输
来看中断传输,中断传输和下面要讲的等时传输无疑要比之前的那两种传输复杂些,至少它们讲究一个周期性.当年歌坛大姐大那英在看到usb子系统中对这两种传输的实现的复杂性之后,颇为感慨的对写代码的哥们儿唱出了那句”就这样被你征服”,而其多年来的老对手田震看了之后心情抑郁,一气之下,嗓子永久性的嘶哑了,但仍然呼吁后人看这些代码的时候要”执著”.所以我们看代码的时候看不懂也不用灰心,歌手林志炫的成名曲<
javatome
·
2007-11-14 21:00
linux
Linux那些事儿之我是
UHCI
(21)传说中的中断服务程序(ISR)
想当年咱们在usb_add_hcd中使用request_irq注册了中断函数,写代码的人做每件事情都是费尽心机的,为了达到目的不择手段,他们绝不是雷锋,他们每做一件事情都是有着极强的功利心态的,每注册一个函数都是为了日后能够利用该函数,当初注册了usb_hcd_irq,这会儿就该调用这个函数了.这个函数来自drivers/usb/core/hcd.c: 1422/** 1423 *usb_hc
fudan_abc
·
2007-11-12 16:00
linux
struct
list
token
each
debugging
Linux那些事儿之我是
UHCI
(21)传说中的中断服务程序(ISR)
想当年咱们在usb_add_hcd中使用request_irq注册了中断函数,写代码的人做每件事情都是费尽心机的,为了达到目的不择手段,他们绝不是雷锋,他们每做一件事情都是有着极强的功利心态的,每注册一个函数都是为了日后能够利用该函数,当初注册了usb_hcd_irq,这会儿就该调用这个函数了.这个函数来自drivers/usb/core/hcd.c:1422/**1423*usb_hcd_irq
javatome
·
2007-11-12 16:00
linux
Linux那些事儿之我是
UHCI
(20)非Root Hub的Bulk传输
看完了控制传输,咱们来看Bulk传输,Roothub没有Bulk传输,所以咱们只需要关注非RootHub.当然还是从usb_submit_urb()开始.和控制传输一样,可以直接跳到usb_hcd_submit_urb().由于我们在start_rh()中设置了hcd->state为HC_STATE_RUNNING,所以这里list_add_tail会被执行,本urb会被加入到ep的urb_lis
fudan_abc
·
2007-11-12 16:00
数据结构
linux
struct
list
IOC
buffer
Linux那些事儿之我是
UHCI
(20)非Root Hub的Bulk传输
看完了控制传输,咱们来看Bulk传输,Root hub没有Bulk传输,所以咱们只需要关注非Root Hub. 当然还是从usb_submit_urb()开始.和控制传输一样,可以直接跳到usb_hcd_submit_urb().由于我们在start_rh()中设置了hcd->state为HC_STATE_RUNNING,所以这里list_add_tail会被执行,本urb会被加入
javatome
·
2007-11-12 16:00
linux
Linux那些事儿之我是
UHCI
(19)非Root Hub的控制传输
下面来看非RootHub的控制传输.还是从usb_submit_urb()开始,转而进入usb_hcd_submit_urb(),然后就进入到了
uhci
_urb_enqueue.我们来看
uhci
_urb_enqueue
javatome
·
2007-11-05 22:00
linux
Linux那些事儿之我是
UHCI
(19)非Root Hub的控制传输
下面来看非RootHub的控制传输.还是从usb_submit_urb()开始,转而进入usb_hcd_submit_urb(),然后就进入到了
uhci
_urb_enqueue.我们来看
uhci
_urb_enqueue
fudan_abc
·
2007-11-05 22:00
linux
struct
list
cache
asynchronous
traversal
Linux那些事儿之我是
UHCI
(18)Root Hub的控制传输(二)
医生,请把孩子取出来之后,顺便给我吸吸脂. ——广州一妇女在剖腹产手术前对医生说. 对于控制传输,rh_call_control会被调用.我也特别希望能有人给这个函数吸吸脂,我们的上下文是为了获取设备描述符,即当初那个usb_get_device_descriptor领着我们来到了这个函数,为了完成这件事情,实际上只需要很少的代码,但是rh_call_control这个函数涉及
javatome
·
2007-11-05 15:00
linux
Linux那些事儿之我是
UHCI
(18)Root Hub的控制传输(二)
医生,请把孩子取出来之后,顺便给我吸吸脂.——广州一妇女在剖腹产手术前对医生说.对于控制传输,rh_call_control会被调用.我也特别希望能有人给这个函数吸吸脂,我们的上下文是为了获取设备描述符,即当初那个usb_get_device_descriptor领着我们来到了这个函数,为了完成这件事情,实际上只需要很少的代码,但是rh_call_control这个函数涉及了所有的RootHub相
fudan_abc
·
2007-11-05 15:00
linux
struct
buffer
interface
Descriptor
protocols
Linux那些事儿之我是
UHCI
(17)Root Hub的控制传输(一)
虽然最伟大的probe函数就这样结束了.但是,我们的道路还很长,困难还很多,最终的结局是未知数,我们的故事和社会主义的航班一样,还不知要驶向何处. 在剩下的篇幅中,除了最后的电源管理部分以外,我们将围绕一个函数进行展开,这个函数就是usb_submit_urb().子曾经曰过:不吃饭的女人这世上也许还有好几个,不吃醋的女人却连一个也没有.我也曾经曰过:不遵循usb spec的USB设备这
javatome
·
2007-11-05 15:00
linux
Linux那些事儿之我是
UHCI
(17)Root Hub的控制传输(一)
虽然最伟大的probe函数就这样结束了.但是,我们的道路还很长,困难还很多,最终的结局是未知数,我们的故事和社会主义的航班一样,还不知要驶向何处.在剩下的篇幅中,除了最后的电源管理部分以外,我们将围绕一个函数进行展开,这个函数就是usb_submit_urb().子曾经曰过:不吃饭的女人这世上也许还有好几个,不吃醋的女人却连一个也没有.我也曾经曰过:不遵循usbspec的USB设备这世上也许还有好
fudan_abc
·
2007-11-05 15:00
linux
struct
list
buffer
asynchronous
Descriptor
Linux那些事儿之我是
UHCI
(16)寂寞在唱歌
接下来就该是usb_hcd_poll_rh_status了.这个函数在咱们整个故事将出现多次,甚至可以说在任何一个HCD的故事中都将出现多次.为了继续走下去,我们必须做一个伟大的假设.假设现在RootHub上还没有连接任何设备,也就是说此时此刻,usb设备树上只有RootHub形单影只.没有人来陪伴他,他只能静静的看青春难依难舍,只能听寂寞在唱歌,轻轻的,狠狠的,歌声是这么残忍让人忍不住泪流成河.
fudan_abc
·
2007-11-04 20:00
Linux那些事儿之我是
UHCI
(16)寂寞在唱歌
接下来就该是usb_hcd_poll_rh_status了.这个函数在咱们整个故事将出现多次,甚至可以说在任何一个HCD的故事中都将出现多次.为了继续走下去,我们必须做一个伟大的假设.假设现在Root Hub上还没有连接任何设备,也就是说此时此刻,usb设备树上只有Root Hub形单影只.没有人来陪伴他,他只能静静的看青春难依难舍,只能听寂寞在唱歌,轻轻的,狠狠的,歌声是这么残忍让人忍不住泪
javatome
·
2007-11-04 20:00
linux
Linux那些事儿之我是
UHCI
(15)Root Hub的注册
回到usb_add_hcd之后,1638行,得出rhdev的bus_mA,这个咱们在Hub驱动中已经讲过.有些主机控制器是需要设置power_budget,咱们没有设置过,就是默认值0,所以这里得到的是bus_mA就是0,0表示没有限制,hub驱动中我们看到了对于没有限制的情况我们是给每个端口设置为最多500mA,因为通常来讲计算机的usb端口能提供的最多就是500mA.1639行,registe
fudan_abc
·
2007-11-04 16:00
linux
struct
list
report
Descriptor
events
Linux那些事儿之我是
UHCI
(15)Root Hub的注册
回到usb_add_hcd之后,1638行,得出rhdev的bus_mA,这个咱们在Hub驱动中已经讲过.有些主机控制器是需要设置power_budget,咱们没有设置过,就是默认值0,所以这里得到的是bus_mA就是0,0表示没有限制,hub驱动中我们看到了对于没有限制的情况我们是给每个端口设置为最多500mA,因为通常来讲计算机的usb端口能提供的最多就是500mA. 1639行,r
javatome
·
2007-11-04 16:00
linux
Linux那些事儿之我是
UHCI
(14)一个函数引发的故事(五)
接着走,661行,configure_hc,来自drivers/usb/host/
uhci
-hcd.c, 175/* 176 *Storethebasicregistersettingsneededbythecontroller
fudan_abc
·
2007-11-01 21:00
linux
struct
list
command
IOC
basic
Linux那些事儿之我是
UHCI
(14)一个函数引发的故事(五)
接着走,661行,configure_hc,来自drivers/usb/host/
uhci
-hcd.c, 175 /* 176 * Store the basic register
javatome
·
2007-11-01 21:00
linux
Linux那些事儿之我是
UHCI
(13)一个函数引发的故事(四)
uhci
_frame_skel_link来自drivers/usb/host/
uhci
-hcd.c: 94 /* 95 * Calculate the link pointer DMA
javatome
·
2007-10-30 21:00
linux
Linux那些事儿之我是
UHCI
(13)一个函数引发的故事(四)
uhci
_frame_skel_link来自drivers/usb/host/
uhci
-hcd.c: 94/* 95 *CalculatethelinkpointerDMAvalueforthefirstSkeletonQHinaframe
fudan_abc
·
2007-10-30 21:00
框架
linux
汇编
struct
语言
each
Linux那些事儿之我是
UHCI
(12)一个函数引发的故事(三)
从调度图我们可以看出,等时传输不需要什么QH,只要把几个TD连接起来,让Frame List Pointer指向第一个TD就可以了.换言之,我们需要为等时传输准备一个队列,然后每一个Frame都让Frame List Pointer指向队列的头部. 那么对于中断传输应该如何操作呢?实际上我们把为中断传输建立了8个队列.不同的队列代表了不同的周期,这8个队列分别代表的是1ms,2ms,4m
javatome
·
2007-10-30 21:00
linux
Linux那些事儿之我是
UHCI
(12)一个函数引发的故事(三)
从调度图我们可以看出,等时传输不需要什么QH,只要把几个TD连接起来,让FrameListPointer指向第一个TD就可以了.换言之,我们需要为等时传输准备一个队列,然后每一个Frame都让FrameListPointer指向队列的头部.那么对于中断传输应该如何操作呢?实际上我们把为中断传输建立了8个队列.不同的队列代表了不同的周期,这8个队列分别代表的是1ms,2ms,4ms,8ms,16ms
fudan_abc
·
2007-10-30 21:00
数据结构
linux
struct
list
token
asynchronous
Linux那些事儿之我是
UHCI
(11)一个函数引发的故事(二)
571行之前全是些初始化的代码,先飘过,用到了再回来看.571行到582行,上次我们看到DEBUG_CONFIGURED是在
uhci
的初始化代码中,即
uhci
_hcd_init函数中,这是一个编译开关,
fudan_abc
·
2007-10-28 21:00
数据结构
linux
struct
list
null
Descriptor
Linux那些事儿之我是
UHCI
(11)一个函数引发的故事(二)
571行之前全是些初始化的代码,先飘过,用到了再回来看.571行到582行,上次我们看到DEBUG_CONFIGURED是在
uhci
的初始化代码中,即
uhci
_hcd_init函数中,这是一个编译开关,
javatome
·
2007-10-28 21:00
linux
Linux那些事儿之我是
UHCI
(10)一个函数引发的故事(一)
接下来,1632行,下一个函数,driver->start被调用.对于咱们的
uhci
_driver,其start指针指向的是
uhci
_start函数,经过了人间大炮一级准备,二级准备之后,这个函数基本上就算介于三级准备和发射之间了
fudan_abc
·
2007-10-28 21:00
数据结构
timer
linux
struct
list
protocols
Linux那些事儿之我是
UHCI
(10)一个函数引发的故事(一)
接下来,1632行,下一个函数,driver->start被调用.对于咱们的
uhci
_driver,其start指针指向的是
uhci
_start函数,经过了人间大炮一级准备,二级准备之后,这个函数基本上就算介于三级准备和发射之间了
javatome
·
2007-10-28 21:00
linux
Linux那些事儿之我是
UHCI
(9)有一种资源,叫中断
结束了
uhci
_init回到亲爱的usb_add_hcd之后,1604行到1606行是调试语句,飘过.
javatome
·
2007-10-25 21:00
linux
Linux那些事儿之我是
UHCI
(9)有一种资源,叫中断
结束了
uhci
_init回到亲爱的usb_add_hcd之后,1604行到1606行是调试语句,飘过.有一种液体叫眼泪,曾经以为,闭上眼睛,眼泪就不会流出来了.的确,眼泪流回了心里.有一种资源叫中断,曾经以为
fudan_abc
·
2007-10-25 21:00
timer
工作
linux
ide
Linux那些事儿之我是
UHCI
(8)主机控制器的初始化(二)
485行,hcd_to_
uhci
,来自drivers/usb/host/
uhci
-hcd.h, 429 /* Convert between a usb_hcd pointer and the
javatome
·
2007-10-22 21:00
linux
Linux那些事儿之我是
UHCI
(8)主机控制器的初始化(二)
485行,hcd_to_
uhci
,来自drivers/usb/host/
uhci
-hcd.h, 429/*Convertbetweenausb_hcdpointerandthecorrespondinguhci_hcd
fudan_abc
·
2007-10-22 21:00
Linux那些事儿之我是
UHCI
(7)主机控制器的初始化(一)
structusb_device结构体,并且初始化,将返回值赋给指针rhdev.回顾这个函数我们可以知道,RootHub的parent指针指向了Controller本身.1585行,确定rhdev的speed,
UHCI
fudan_abc
·
2007-10-16 14:00
数据结构
linux
timer
struct
list
structure
Linux那些事儿之我是
UHCI
(7)主机控制器的初始化(一)
usb_device结构体,并且初始化,将返回值赋给指针rhdev.回顾这个函数我们可以知道,Root Hub的parent指针指向了Controller本身. 1585行,确定rhdev的speed,
UHCI
javatome
·
2007-10-16 14:00
linux
Linux那些事儿之我是
UHCI
(6)来来,我是一条总线,线线线线线线
下一个函数,1577行,usb_register_bus.我们说过,一个USB主机控制器就意味着一条USB总线,因为主机控制器控制的正是一条总线.古人说,猫走不走直线,完全取决于耗子,而数据走不走总线,完全取决于主机控制器. 所以这里作为主机控制器的驱动,我们必须从软件的角度来说,注册一条总线.来自drivers/usb/core/hcd.c: 712 /** 713 * usb
javatome
·
2007-10-13 16:00
linux
Linux那些事儿之我是
UHCI
(6)来来,我是一条总线,线线线线线线
下一个函数,1577行,usb_register_bus.我们说过,一个USB主机控制器就意味着一条USB总线,因为主机控制器控制的正是一条总线.古人说,猫走不走直线,完全取决于耗子,而数据走不走总线,完全取决于主机控制器.所以这里作为主机控制器的驱动,我们必须从软件的角度来说,注册一条总线.来自drivers/usb/core/hcd.c: 712/** 713 *usb_regist
fudan_abc
·
2007-10-13 16:00
linux
struct
list
面试
Class
Numbers
Linux那些事儿之我是
UHCI
(5)传说中的DMA
下一个函数,usb_add_hcd,drivers/usb/core/hcd.c中: 1548 /** 1549 * usb_add_hcd - finish generic HCD structure initialization and register 1550 * @hcd: the usb_hcd structure to initialize
javatome
·
2007-10-10 14:00
linux
Linux那些事儿之我是
UHCI
(5)传说中的DMA
下一个函数,usb_add_hcd,drivers/usb/core/hcd.c中: 1548/** 1549 *usb_add_hcd-finishgenericHCDstructureinitializationandregister 1550 *@hcd:theusb_hcdstructuretoinitialize 1551 *@irqnum:Interruptlinetoallo
fudan_abc
·
2007-10-10 14:00
linux
struct
buffer
initialization
Allocation
structure
Linux那些事儿之我是
UHCI
(4)IO内存和IO端口
usb_bus_init来自drivers/usb/core/hcd.c,很显然,它就是初始化struct usb_bus结构体指针.而这个结构体变量hcd->self的内存已经在刚才为hcd申请内存的时候一并申请了. 688 /** 689 * usb_bus_init - shared initialization code 690 * @bus: t
javatome
·
2007-10-04 21:00
linux
Linux那些事儿之我是
UHCI
(4)IO内存和IO端口
usb_bus_init来自drivers/usb/core/hcd.c,很显然,它就是初始化structusb_bus结构体指针.而这个结构体变量hcd->self的内存已经在刚才为hcd申请内存的时候一并申请了. 688/** 689 *usb_bus_init-sharedinitializationcode 690 *@bus:thebusstructurebeinginiti
fudan_abc
·
2007-10-04 21:00
linux
struct
IO
System
initialization
structure
Linux那些事儿之我是
UHCI
(3)-物以类聚
这年头情侣一多,黄瓜就不好卖了. –- 北大门口卖水果的小贩回忆2005 开源社区的家伙大概都是光棍,因为他们展现给我们的不是情侣多,而是变态的数据结构多.尤其我们这一节里要经历的变态数据结构更是多,基本上这些变态的数据结构都聚集到了这一节,所谓物以类聚吧.这么一堆变态的数据结构,要是写博客的是谭浩强,估计你看了就崩溃了,也亏了是我在写.平心而论,经历了毕业这两年来的种种挫折之后,尤其是
javatome
·
2007-10-03 02:00
linux
Linux那些事儿之我是
UHCI
(3)-物以类聚
这年头情侣一多,黄瓜就不好卖了.–-北大门口卖水果的小贩回忆2005开源社区的家伙大概都是光棍,因为他们展现给我们的不是情侣多,而是变态的数据结构多.尤其我们这一节里要经历的变态数据结构更是多,基本上这些变态的数据结构都聚集到了这一节,所谓物以类聚吧.这么一堆变态的数据结构,要是写博客的是谭浩强,估计你看了就崩溃了,也亏了是我在写.平心而论,经历了毕业这两年来的种种挫折之后,尤其是两次求职的那冷暖
fudan_abc
·
2007-10-03 02:00
数据结构
linux
struct
list
reference
Allocation
[置顶] ===博客导读===
我是U盘说的是2.6.10的内核我是Sysfs说的是2.6.10的内核戏说USB说的是2.6.22的内核我是Hub/
UHCI
/EHCI说的是2.6.22.1的内核===================
fudan_abc
·
2007-10-02 22:00
disk
磁盘
===博客导读===
我是U盘 说的是2.6.10的内核 我是Sysfs 说的是2.6.10的内核 戏说USB 说的是2.6.22的内核 我是Hub/
UHCI
/EHCI 说的是2.6.22.1的内核 ========
javatome
·
2007-10-02 22:00
===
===博客导读===
我是U盘 说的是2.6.10的内核 我是Sysfs 说的是2.6.10的内核 戏说USB 说的是2.6.22的内核 我是Hub/
UHCI
/EHCI 说的是2.6.22.1的内核 ========
javatome
·
2007-10-02 22:00
===
Linux那些事儿之我是
UHCI
(2)PCI,我们来了!
usb_hcd_pci_probe带领我们开启了新的篇章.它就是神圣的PCI设备驱动程序.从此我们开始了PCI世界之旅,也将开始一段全新的体验.细心的你或许注意到了,关于hcd的代码,被分布于两个目录,它们是drivers/usb/core/以及drivers/usb/host/,其中前者包含三个相关的文件,hcd-pci.c,hcd.c,hcd.h,这是一些公共的代码,因为我们知道,USB主机控
fudan_abc
·
2007-10-01 23:00
linux
timer
struct
Class
resources
structure
Linux那些事儿之我是
UHCI
(2)PCI,我们来了!
usb_hcd_pci_probe带领我们开启了新的篇章.它就是神圣的PCI设备驱动程序.从此我们开始了PCI世界之旅,也将开始一段全新的体验.细心的你或许注意到了,关于hcd的代码,被分布于两个目录,它们是drivers/usb/core/以及drivers/usb/host/,其中前者包含三个相关的文件,hcd-pci.c,hcd.c,hcd.h,这是一些公共的代码,因为我们知道,USB主机控
javatome
·
2007-10-01 23:00
linux
Linux那些事儿之我是
UHCI
(2)PCI,我们来了!
usb_hcd_pci_probe带领我们开启了新的篇章.它就是神圣的PCI设备驱动程序.从此我们开始了PCI世界之旅,也将开始一段全新的体验.细心的你或许注意到了,关于hcd的代码,被分布于两个目录,它们是drivers/usb/core/以及drivers/usb/host/,其中前者包含三个相关的文件,hcd-pci.c,hcd.c,hcd.h,这是一些公共的代码,因为我们知道,USB主机控
javatome
·
2007-10-01 23:00
linux
Linux那些事儿之我是
UHCI
(1)开户和销户
之所以说
uhci
_hcd_init有技术含量,并不是说它包含多么精巧的算法,包含多么复杂的数据结构.而是因为这其中涉及了很多东西.首先924行,usb_disable涉及了Linux中的内核参数的概念.928
javatome
·
2007-10-01 22:00
linux
Linux那些事儿之我是
UHCI
(1)开户和销户
之所以说
uhci
_hcd_init有技术含量,并不是说它包含多么精巧的算法,包含多么复杂的数据结构.而是因为这其中涉及了很多东西.首先924行,usb_disable涉及了Linux中的内核参数的概念.928
fudan_abc
·
2007-10-01 22:00
数据结构
linux
struct
cache
Class
debugging
Linux那些事儿之我是
UHCI
(1)开户和销户
之所以说
uhci
_hcd_init有技术含量,并不是说它包含多么精巧的算法,包含多么复杂的数据结构.而是因为这其中涉及了很多东西.首先924行,usb_disable涉及了Linux中的内核参数的概念.928
javatome
·
2007-10-01 22:00
linux
Linux那些事儿之我是
UHCI
-引子
写一下
UHCI
吧,也顺便怀念一下Intel,以及Intel的那几个女同事们,好久没联系了,你们可好?
fudan_abc
·
2007-09-29 23:00
linux
Module
null
UP
interface
makefile
上一页
1
2
3
4
5
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他