`
javatome
  • 浏览: 845240 次
  • 性别: 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.pdf

    ### Linux那些事儿之我是HUB:深入理解USB HUB与Linux内核 #### 引言 在《Linux那些事儿之我是HUB》这本书中,作者通过个人经历与技术探索相结合的方式,介绍了USB HUB(集线器)的概念、工作原理以及在Linux内核中...

    Linux那些事儿之我是Hub

    ### Linux那些事儿之我是Hub —— 深入解析Linux下的USB Hub驱动 #### 引言 《Linux那些事儿之我是Hub》这篇文章以其独特的视角,深入浅出地讲解了Linux系统下USB Hub的工作原理及其与操作系统之间的交互机制。...

    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那些事儿之我是USB(第2版)关键知识点概览 #### 一、书籍概述 - **核心主题**:本书主要围绕Linux内核中的USB子系统展开,深入剖析其工作原理和技术细节。 - **目标读者**:面向Linux初学者、驱动开发者...

    linux那些事儿之我是USB.zip

    本压缩包文件"linux那些事儿之我是USB.zip"包含了深入理解Linux USB驱动及内核相关知识的九个文档,包括Block层、EHCI主机控制器、HUB、PCI、SCSI硬盘、Sysfs、UHCI、USB core以及U盘。这些文档旨在提供一个系统性的...

    LINUX\Linux那些事儿系列

    1. **Linux那些事儿之我是UHCI.pdf**: UHCI(Universal Host Controller Interface)是USB(Universal Serial Bus)1.1规范中定义的一种主机控制器接口。此部分主要讲解Linux系统如何管理和驱动UHCI兼容的USB控制...

    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的那些事儿全集

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

    linux 那些事儿全集

    “Linux那些事儿之我是HUB.pdf”会介绍USB集线器的工作原理。在Linux系统中,HUB驱动程序管理USB集线器,允许连接多个USB设备,并且会讨论如何处理拓扑变化和设备分配。 “Linux那些事儿之我是U盘.pdf”将关注通用...

    Linux那些事儿之我是EHCI主机控制器.pdf

    ### Linux那些事儿之我是EHCI主机控制器 #### 引言 在深入了解EHCI(Enhanced Host Controller Interface,增强型主机控制器接口)之前,让我们先简要回顾一下EHCI的背景及其在Linux系统中的作用。EHCI是USB 2.0...

    Linux那些事儿系列

    《Linux那些事儿之我是Hub.pdf》将深入解析Hub在Linux中的实现,包括Hub设备的识别、设备连接和断开的处理、端口状态监控以及电源管理等方面。理解Hub的工作机制对于多设备环境下的系统集成至关重要。 USB core是...

    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那些事儿之我是XXX全集.rar

    "Linux那些事儿之我是XXX全集"这个资源集合,旨在深入剖析Linux内核中的关键组件,特别是与USB(通用串行总线)相关的部分,包括USB core、U盘、UHCI、PCI、SCSI硬盘、Block层和Hub等核心概念。这些文件将通过源代码...

Global site tag (gtag.js) - Google Analytics