《Linux那些事儿之我是USB》我是U盘(5)外面的世界很精彩--总结

带着问题去学习,成长
(1)
认真的思考一个问题:
我需要关注的仅仅是drivers/usb/storage/目录下面那相关的3000多行代码吗?就是这样几个文件就能让一个个不同的U盘在Linux下面工作起来吗?

问题远不是这样简单.外面的世界很精彩,作为U盘,她需要与usb core打交道,需要与scsi core打交道,需要与内存管理单元打交道,还有内核中许许多多其它模块打交道.外面的世界很大,远比我们想象的大.

(2)
usb core
实现一些核心的功能,为别的设备驱动程序提供服务(接口),比如申请内存,比如实现一些所有的设备都会需要的公共的函数.
drivers/usb/core  这个目录,就专门放一些核心的代码,比如初始化整个usb系统,初始化root hub,初始化host controller的代码

普通的设备要正常的工作,除了要有设备本身以外,还需要有一个控制器host controller,和这个控制器相连接在一起的叫root hub

现实中经常是让一个usb控制器和一个hub绑定在一起,专业一点说叫集成,而这个hub也被称作root hub,换言之,和usb控制器绑定在一起的hub就是系统中最根本的hub,其它的hub可以连接到她这里,然后可以延伸出去,外接别的设备,当然也可以不用别的hub,让usb设备直接接到root hub上.

(3)
usb host controller
控制所有的usb设备的通信.通常计算机的cpu并不是直接和usb设备打交道,而是和控制器打交道,他要对设备做什么,他会告诉控制器,而不是直接把指令发给设备,然后控制器再去负责处理这件事情,他会去指挥设备执行命令,而cpu就不用管剩下的事情,他还是该干嘛干嘛去,控制器替他去完成剩下的事情,事情办完了再通知cpu.否则让cpu去盯着每一个设备做每一件事情,那是不现实的

host controller单独的代码则移到host目录下面让负责各种host controller的人去维护
常见的host controller有三种,分别叫做EHCI,UHCI,OHCI

所以出来了三个概念:usb core,usb host,usb device

usb通信的灵魂就是usb协议. usb协议将是所有usb设备和usb主机所必须遵循的游戏规则.这种规则也很自然的体现在了代码中.于是,我们需要了解的不仅仅是drivers/usb/storage/目录下面的代码,还得去了解那外面的世界,虽然,只需要了解一点点.

猜你喜欢

转载自blog.csdn.net/sinat_37817094/article/details/80345953