`
javatome
  • 浏览: 824513 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Linux那些事儿之我是Hub(1)跟我走吧,现在就出发

 
阅读更多

最早知道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_hcduhci_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

    Linux那些事儿之我是Hub,是前面Linux那些事之我是U盘,usb等的姐妹篇

    Linux那些事儿之我是HUB.pdf

    非常不错的一本书,LinuxLinuxLinuxLinuxLinuxLinuxLinuxLinuxLinuxLinuxLinuxLinuxLinuxLinux

    Linux那些事儿

    Linux那些事儿之我是Hub Linux那些事儿之我是USB Core Linux那些事儿之我是UHCI Linux那些事儿之我是EHCI控制器 Linux那些事儿之我是PCI Linux那些事儿之我是SCSI硬盘 Linux那些事儿之我是Block层 Linux那些事儿之我...

    Linux那些事儿1-9合集

    读过《linux那些事儿之我是U盘》的人,都知道其风格,我就不多说了。 导读: linux那些事儿之我是U盘 linux那些事儿之我是HUB linux那些事儿之我是USB Core linux那些事儿之我是UHCI Linux那些事儿之我是EHCI主机控制...

    Linux那些事儿之我是USB(第2版)

    Linux那些事儿第二版我是Hub一章,比较第一版修正了一些错误,增加了电源管理部分的分析,推荐阅读

    Linux那些事儿之全集

    导读.doc Linux那些事儿之我是Block层.pdf Linux那些事儿之我是EHCI主机控制器.pdf Linux那些事儿之我是Hub.pdf Linux那些事儿之我是USB_core.pdf Linux那些事儿之我是U盘.pdf等等 Linux那些事儿系列全在这里了

    Linux那些事儿系列.rar

    》包括《Linux那些事儿之我是Hub》、《Linux那些事儿之我是Sysfs》《Linux那些事儿之我是UHCI》、《Linux那些事儿之我是USB core》、《Linux那些事儿之我是U盘》,令人叹为观止的一个linux系列书籍。只能说,江山代...

    linux那些事儿之我是USB(包括第一版和第二版完整文字)

    本文件包括第一第二完成...本次改版修改了第1版中出现的错误,增加了一个附录,主要内容是关于Linux内核的学习方法,是作者的经验总结,值得一读。 本书使用幽默诙谐的笔调对Linux内核中的USB子系统源代码进行了分析。

    Linux那些事儿之我是USB(第2版).pdf

    本次改版修改了第1版中出现的错误,增加了一个附录,主要内容是关于Linux内核的学习方法,是作者的经验总结,值得一读。 本书使用幽默诙谐的笔调对Linux内核中的USB子系统源代码进行了分析,形象且详尽地介绍了USB在...

    linux的那些事儿全集

    Linux那些事儿之我是Block层 ...Linux那些事儿之我是Hub Linux那些事儿之我是PCI Linux那些事儿之我是SCSI硬盘 Linux那些事儿之我是Sysfs Linux那些事儿之我是UHCI Linux那些事儿之我是USB core Linux那些事儿之我是U盘

    linux那些事儿(EHCI Block SCSI Sysfs PCI USB U 盘 UHCI Hub)

    Linux那些事儿之我是EHCI主机控制器.pdf Linux那些事儿之我是Block层.pdf Linux那些事儿之我是SCSI硬盘.pdf Linux那些事儿之我是Sysfs.pdf ...Linux那些事儿之我是Hub.pdf Linux那些事儿之我是UHCI.pdf

    linux那些事全集

    Linux那些事儿之我是U盘 Linux那些事儿之我是USB_core Linux那些事儿之我是UHCI Linux那些事儿之我是Sysfs ...Linux那些事儿之我是Hub Linux那些事儿之我是EHCI主机控制器 Linux那些事儿之我是Block层

    Linux那些事儿系列

    本人整理的fudan_abc的专栏中以完结的文章,在此向原作者表示感谢,给...内容包括:linux那些事儿之我是U盘,linux那些事儿之我是USB,linux那些事儿之我是HUB,linux那些事儿之我是UHCI,linux那些事儿之我是Sysfs。

    Linux那些事儿之我是XXX全集.rar

    Linux那些事儿之我是XXX全集 包含USB core U盘 UHCI PCI SCSI硬盘 Block Hub EHCI 。 想学驱动的童鞋,不妨看看。该书主要是进行源代码的分析

    Linux那些事儿 系列之2 Block+EHCI+PCI+SCSI

    Linux那些事儿之我是Block层.pdf Linux那些事儿之我是EHCI主机控制器.pdf Linux那些事儿之我是PCI.pdf Linux那些事儿之我是SCSI硬盘.pdf 注: 之前有人已经上传了《Linux那些事儿 系列》,其已经包含了:hub,sysfs...

    Linux那些事儿.rar

    包括:Linux那些Linux那些事儿之我是SCSI硬盘,Linux那些事儿之我是Block层,Linux那些事儿之我是EHCI主机控制器,Linux那些事儿之我是HUB,Linux那些事儿之我是PCI,Linux那些事儿之我是Sysfs,Linux那些事儿之我是...

    linux那些事儿之我是USB.zip

    里面包含Linux那些事的九个文档,Block层,ECHI主机控制,HUB,PCI,SCSI硬盘,Sysfs,UHCI,USB+core,U盘等九个文档,内容详细,而且全面都有书签,适合系统学习!

    Linux那些事系列

    Linux那些事儿之我是Hub Linux那些事儿之我是Sysfs Linux那些事儿之我是UHCI Linux那些事儿之我是USB core Linux那些事儿之我是U盘 Linux那些事之我是HUB1

Global site tag (gtag.js) - Google Analytics