最早知道hub是在大学里,复旦的4人间宿舍,条件真好,每个人一张书桌,书桌下面一个网口,但是有时候网口坏了,那可急死人了,要知道当初我们买电脑初衷虽说是为了学习C语言,可是买了之后,C倒是没学,先学了CS.printf还没学会呢,倒是先学会了怎么在CS里喊go go go, fire in the hole!网口坏了就意味着CS不能玩了,当时对人生真的很绝望,后来有人介绍,说6楼几个哥们也有这种情况,然后人家买了hub.所以网口坏了也没事.当时我这个兴奋啊!比过了六级还要high…
事情过了几年,今天我再次回过头来看hub,不过这里看的是usb中的hub.但是很显然,和我们在以太网用的hub不是一回事,但是角色是一样的,都说红花需要绿叶配,在usb的世界里,hub永远都只是绿叶,她不可能是红花,她的存在只是为了支持更多的设备连接到usb总线上来,谁也不会为了使用hub而购买hub,买hub的原因是为了要使用别的设备,而hub就像嫁妆,仅此而已.就像当年我们买hub是为了使用网卡,而不是hub本身.
也许设计代码的人和我一样,希望大家能够更多的给hub一点关注,所以,关于hub的代码在usb core的目录下面.
这个故事中使用的是2.6.22.1的内核代码,这是此刻我能从kernel.org上面获得的最新的内核版本.Linux内核代码目录中,所有去设备驱动程序有关的代码都在drivers/目录下面,在这个目录中的usb子目录包含了所有usb设备的驱动,而usb目录下面又有它自己的子目录,进去看一下,
localhost:/usr/src/linux-2.6.22.1/drivers # cd usb/
localhost:/usr/src/linux-2.6.22.1/drivers/usb # ls
Kconfig Makefile README atm class core gadget host image misc mon serial storage usb-skeleton.c
注意到每一个目录下面都有一个Kconfig文件和一个Makefile,这很重要.古训有云,再牛B的肖邦也弹不出老子的忧伤,我想说的是,再牛B的黑客如果不看Makefile不看Kconfig,也别想搞清楚这里的结构.很多年轻人喜欢研究usb-skeleton.c,据说这个文件对他们很有启发,所以这里偶也友情推荐一下这个文件.有时间有兴趣的可以看一看,其实就是一个简单的usb设备驱动程序的框架.
关于Makefile,在当年我们讲usb storage的时候已经讲了一些,这里就不重复了,反反复复讲Makefile是不是太没品了点?要是我室友知道了,肯定会问,是不是男人?不过一个很显然的事实摆在这里,在这众多的目录中,我们一眼就能看到有一个叫做core的目录,虽然四六级都是刚刚擦边过,可是core这个词咱们可没少用.当年,和这个词一起走红的另外两个英语单词是simple,naïve.
好,我们来看core目录.关于usb,有一个很重要的模块,她的名字耐人追寻,usbcore.如果你的电脑是装了Linux,那么你用lsmod命令看一下,有一个模块叫做usbcore.当然,你要是玩嵌入式系统的高手,那么也许你的电脑里没有usb模块,不过我听说如今玩嵌入式的人也喜欢玩usb的,因为usb设备很合嵌入式的口味.看看我的lsmod的输出吧,
localhost:/usr/src/linux-2.6.22.1/drivers/usb/core # lsmod
Module Size Used by
af_packet 55820 2
raw 89504 0
nfs 230840 2
lockd 87536 2 nfs
nfs_acl 20352 1 nfs
sunrpc 172360 4 nfs,lockd,nfs_acl
ipv6 329728 36
button 24224 0
battery 27272 0
ac 22152 0
apparmor 73760 0
aamatch_pcre 30720 1 apparmor
loop 32784 0
usbhid 60832 0
dm_mod 77232 0
ide_cd 57120 0
hw_random 22440 0
ehci_hcd 47624 0
cdrom 52392 1 ide_cd
uhci_hcd 48544 0
shpchp 61984 0
bnx2 157296 0
usbcore 149288 4 usbhid,ehci_hcd,uhci_hcd
e1000 130872 0
pci_hotplug 44800 1 shpchp
reiserfs 239616 2
edd 26760 0
fan 21896 0
thermal 32272 0
processor 50280 1 thermal
qla2xxx 149484 0
firmware_class 27904 1 qla2xxx
scsi_transport_fc 51460 1 qla2xxx
sg 52136 0
megaraid_sas 47928 3
piix 27652 0 [permanent]
sd_mod 34176 4
scsi_mod 163760 5 qla2xxx,scsi_transport_fc,sg,megaraid_sas,sd_mod
ide_disk 32768 0
ide_core 164996 3 ide_cd,piix,ide_disk
找到了usbcore那一行吗?core就是核心,基本上你要在你的电脑里用usb设备,那么两个模块是必须的,一个是usbcore,这就是核心模块,另一个是主机控制器的驱动程序,比如这里usbcore那一行我们看到的ehci_hcd和uhci_hcd,这里偶的是Dell2950的服务器,里边有两个usb host controller.一个是echi的,三个是uhci的.你问我什么是ehci?什么是ohci?就是host controller的接口.从硬件上来说,usb设备要想工作,除了外设本身,必须还有一个咚咚叫做usb host controller.一般来说,一个电脑里有一个usb host controller就可以了,她就可以控制很多个设备了,比如u盘,比如usb键盘,比如usb鼠标.所有的外设都把自己的请求提交给usb host controller.然后让usb host controller统一来调度.而设备怎么连到host controller上?哎,这就是我们故事的主角,hub,乳名叫做集线器.
关于hub的代码,在drivers/usb/core/目录下面,有一个叫做hub.c的文件.这个文件可不简单.
localhost:/usr/src/linux-2.6.22.1/drivers/usb/core # wc -l hub.c
3122 hub.c
傻眼了,就hub这么一个玩艺儿竟然有三千多行代码,真要是按行计费,写代码的那些家伙还不发财发死?还好不是那样,真要是那样,还不个个都跟赵丽华似的,一个个都成了诗人,开源社区该改成开源诗社了.
三千多行就三千多行吧,总不能见困难就退吧.小的时候我们可都是听着雷锋叔叔的故事长大的,雷锋叔叔的螺丝钉的精神虽然我们学不到,但是雷锋叔叔说的好,对待女同志,要像春天般的温暖!同样,我们对待代码,也要像春天般的温暖.嗯,跟我走吧,现在就出发.
相关推荐
### Linux那些事儿之我是HUB:深入理解USB HUB与Linux内核 #### 引言 在《Linux那些事儿之我是HUB》这本书中,作者通过个人经历与技术探索相结合的方式,介绍了USB HUB(集线器)的概念、工作原理以及在Linux内核中...
### Linux那些事儿之我是Hub —— 深入解析Linux下的USB Hub驱动 #### 引言 《Linux那些事儿之我是Hub》这篇文章以其独特的视角,深入浅出地讲解了Linux系统下USB Hub的工作原理及其与操作系统之间的交互机制。...
Linux那些事儿之我是Hub Linux那些事儿之我是USB Core Linux那些事儿之我是UHCI Linux那些事儿之我是EHCI控制器 Linux那些事儿之我是PCI Linux那些事儿之我是SCSI硬盘 Linux那些事儿之我是Block层 Linux那些事儿之我...
读过《linux那些事儿之我是U盘》的人,都知道其风格,我就不多说了。 导读: linux那些事儿之我是U盘 linux那些事儿之我是HUB linux那些事儿之我是USB Core linux那些事儿之我是UHCI Linux那些事儿之我是EHCI主机控制...
### Linux那些事儿之我是USB(第2版)关键知识点概览 #### 一、书籍概述 - **核心主题**:本书主要围绕Linux内核中的USB子系统展开,深入剖析其工作原理和技术细节。 - **目标读者**:面向Linux初学者、驱动开发者...
本压缩包文件"linux那些事儿之我是USB.zip"包含了深入理解Linux USB驱动及内核相关知识的九个文档,包括Block层、EHCI主机控制器、HUB、PCI、SCSI硬盘、Sysfs、UHCI、USB core以及U盘。这些文档旨在提供一个系统性的...
1. **Linux那些事儿之我是UHCI.pdf**: UHCI(Universal Host Controller Interface)是USB(Universal Serial Bus)1.1规范中定义的一种主机控制器接口。此部分主要讲解Linux系统如何管理和驱动UHCI兼容的USB控制...
导读.doc Linux那些事儿之我是Block层.pdf Linux那些事儿之我是EHCI主机控制器.pdf Linux那些事儿之我是Hub.pdf Linux那些事儿之我是USB_core.pdf Linux那些事儿之我是U盘.pdf等等 Linux那些事儿系列全在这里了
》包括《Linux那些事儿之我是Hub》、《Linux那些事儿之我是Sysfs》《Linux那些事儿之我是UHCI》、《Linux那些事儿之我是USB core》、《Linux那些事儿之我是U盘》,令人叹为观止的一个linux系列书籍。只能说,江山代...
本文件包括第一第二完成...本次改版修改了第1版中出现的错误,增加了一个附录,主要内容是关于Linux内核的学习方法,是作者的经验总结,值得一读。 本书使用幽默诙谐的笔调对Linux内核中的USB子系统源代码进行了分析。
Linux那些事儿之我是Block层 ...Linux那些事儿之我是Hub Linux那些事儿之我是PCI Linux那些事儿之我是SCSI硬盘 Linux那些事儿之我是Sysfs Linux那些事儿之我是UHCI Linux那些事儿之我是USB core Linux那些事儿之我是U盘
“Linux那些事儿之我是HUB.pdf”会介绍USB集线器的工作原理。在Linux系统中,HUB驱动程序管理USB集线器,允许连接多个USB设备,并且会讨论如何处理拓扑变化和设备分配。 “Linux那些事儿之我是U盘.pdf”将关注通用...
### Linux那些事儿之我是EHCI主机控制器 #### 引言 在深入了解EHCI(Enhanced Host Controller Interface,增强型主机控制器接口)之前,让我们先简要回顾一下EHCI的背景及其在Linux系统中的作用。EHCI是USB 2.0...
《Linux那些事儿之我是Hub.pdf》将深入解析Hub在Linux中的实现,包括Hub设备的识别、设备连接和断开的处理、端口状态监控以及电源管理等方面。理解Hub的工作机制对于多设备环境下的系统集成至关重要。 USB core是...
Linux那些事儿之我是EHCI主机控制器.pdf Linux那些事儿之我是Block层.pdf Linux那些事儿之我是SCSI硬盘.pdf Linux那些事儿之我是Sysfs.pdf ...Linux那些事儿之我是Hub.pdf Linux那些事儿之我是UHCI.pdf
Linux那些事儿之我是U盘 Linux那些事儿之我是USB_core Linux那些事儿之我是UHCI Linux那些事儿之我是Sysfs ...Linux那些事儿之我是Hub Linux那些事儿之我是EHCI主机控制器 Linux那些事儿之我是Block层
"Linux那些事儿之我是XXX全集"这个资源集合,旨在深入剖析Linux内核中的关键组件,特别是与USB(通用串行总线)相关的部分,包括USB core、U盘、UHCI、PCI、SCSI硬盘、Block层和Hub等核心概念。这些文件将通过源代码...