使用命令lsmod,看看它的输出,然后找这么个模块usbcore,不要说你找不到,我不会相信的。它是什么?它就是咱们这里要说的usb系统的核心,如果要在linux里使用usb,这个模块是必不可少的,另外,你应该在usbcore那一行的后面看到ehci_hcd或uhci_hcd这样的东东,它们就是前面说的usb host controller的驱动模块,你的usb设备要工作,合适的usb host controller模块也是必不可少的。不过,咱们这里的主角还是usbcore。
usb core负责实现一些核心的功能,为别的设备驱动程序提供服务,提供一个用于访问和控制USB硬件的接口,而不用去考虑系统当前存在哪种host controller。至于core、host controller和driver三者之间的关系,还是用ldd3的图来说明吧。

driver和host controller像不像core的两个保镖?没办法,这可是core啊。协议里也说了,host controller的驱动(HCD)必须位于USB软件的最下一层。HCD提供host controller硬件的抽象,隐藏硬件的细节,在host controller之下是物理的USB及所有与之连接的USB设备。而HCD只有一个客户,对一个人负责,就是咱们的USB core,USB core将用户的请求映射到相关的HCD,用户不能直接访问HCD。

咱们写USB驱动的时候,只能调用core的接口,core会将咱们的请求发送给相应的HCD,用得着咱们操心的只有这么一亩三分地,core为咱们完成了大部分的工作,linux的哲学是不是和咱们生活中不太一样那?

走到drivers/usb/core里去,使用ls瞧一瞧看一看,

buffer.c  devices.c  driver.c    file.c     hcd.c      hub.c  Kconfig   message.c  otg_whitelist.h  quirks.c  urb.c       usb.c
config.c  devio.c    endpoint.c  generic.c  hcd-pci.c  hub.h  Makefile  notify.c   port.c           sysfs.c   usb-acpi.c  usb.h

使用wc –l命令统计一下,将近两万行的代码,core不愧是core,为大家默默的做这么多事,人民的好公仆鞠躬尽瘁,我会用一颗感恩的心去深刻理解你的内心回报你的付出的。Linux背后的哲学是不是又和我们生活中不一样?

看看Makefile。

#
# Makefile for USB Core files and filesystem
#usbcore-y := usb.o hub.o hcd.o urb.o message.o driver.o
usbcore-y += config.o file.o buffer.o sysfs.o endpoint.o
usbcore-y += devio.o notify.o generic.o quirks.o devices.o
usbcore-y += port.ousbcore-$(CONFIG_PCI)      += hcd-pci.o
usbcore-$(CONFIG_ACPI)      += usb-acpi.oobj-$(CONFIG_USB)        += usbcore.o

Makefile可比Kconfig简略多了,所以看起来也更亲切点,咱们总是拿的money越多越好,看的代码越少越好。这里之所以会出现CONFIG_PCI,是因为通常USB的root hub包含在一个PCI设备中,前面也已经聊过了。hcd-pci 和 hcd 顾名而思义就知道是说host controller的,它们实现了host controller公共部分,按协议里的说法它们就是HCDI(HCD的公共接口),host目录下则实现了各种不同的host controller,咱们这里不怎么会聊到具体host controller的实现。

这么看来,好像大都需要关注的样子,没有减轻多少压力,不过这里本身就是usb core部分,是要做很多的事为咱们分忧的,所以多点也是可以理解的。

Linux那些事儿 之 戏说USB(7)不一样的core相关推荐

  1. Linux那些事儿 之 戏说USB(11)不一样的core

    转载地址:http://blog.csdn.net/fudan_abc/article/details/1792367 "生活中肯定还有比睡觉更好玩的事情!"大小卡梅拉们一直都抱有 ...

  2. Linux那些事儿 之 戏说USB(19)设备

    转载地址:http://blog.csdn.net/fudan_abc/article/details/1807800 第一眼看到struct usb_device这个结构,我仿佛置身于衡山路的酒吧里 ...

  3. 【转】Linux那些事儿 之 戏说USB(19)设备

    第一眼看到struct usb_device这个结构,我仿佛置身于衡山路的酒吧里,盯着舞池里扭动的符号,眼神迷离. 交大里苟了几年,毕业了又是住在学校附近的徐虹北路上,沿着虹桥路走过去,到徐家汇不过1 ...

  4. Linux那些事儿 之 戏说USB(33)字符串描述符

    关于字符串描述符,前面的前面已经简单描述过了,地位仅次于设备/配置/接口/端点四大描述符,那四大设备必须得支持,而字符串描述符对设备来说则是可选的. 这并不是就说字符串描述符不重要,对咱们来说,字符串 ...

  5. Linux那些事儿 之 戏说USB(28)设备的生命线(十一)

    现在已经使用GET_DESCRIPTOR请求取到了包含一个配置里所有相关描述符内容的一堆数据,这些数据是raw的,即原始的,所有数据不管是配置描述符.接口描述符还是端点描述符都彼此的挤在一起,所以得想 ...

  6. Linux那些事儿 之 戏说USB(27)设备的生命线(十)

    跟着设备的生命线走到现在,我算是明白了,什么东西的发展都是越往后越高级越复杂.再给张小表,看看现在和上次那张表出现的时候有什么变化. state        USB_STATE_ADDRESS sp ...

  7. Linux那些事儿 之 戏说USB(25)设备的生命线(八)

    回到struct usb_hcd,继续努力的往下看. 7行,又见kref,usb主机控制器的引用计数.struct usb_hcd也有自己专用的引用计数函数,看drivers/usb/core/hcd ...

  8. Linux那些事儿 之 戏说USB(22)设备的生命线(五)

    下面接着看那三个基本点. 第一个基本点,usb_alloc_urb函数,创建urb的专用函数,为一个urb申请内存并做初始化,在drviers/usb/core/urb.c里定义. struct ur ...

  9. Linux那些事儿 之 戏说USB(15)设备

    struct usb_device结构冗长而又杂乱 include/linux/usb.h struct usb_device {int devnum;char devpath[16];u32 rou ...

最新文章

  1. android l是哪个版本,从Android L及更高版本开始,setMobileDataEnabled方法不再可调用...
  2. 做一个”合格“的程序员(二)——学习管理
  3. 复数混频发射机原理与仿真
  4. Oracle:容器数据库简介
  5. Important table for Fiori launchpad Designer and configuration
  6. android linux kernel VS standard linux kernel
  7. Java装饰器模式详解
  8. 数据库中的DbUtils
  9. Linux下的两个经典宏定义【转】
  10. 斐讯K2刷华硕固件教程(最新)
  11. 基于Spring的MVC框架设计与实现
  12. win10系统重装步骤详解
  13. 根据GFF3文件统计外显子大小和数量以及内含子大小
  14. 懂我的人不需要我解释,不懂我的人我不需要解释。。
  15. oracle内部原理结构图,Oracle恢复内部原理(基础数据结构)
  16. 百度Ai studio上运行pytorch和tensorflow(转载)
  17. canvas制作在线画板
  18. AutoLisp学习笔记
  19. 变量——整型变量 浮点型变量 字符型变量
  20. 腾讯各事业群裁员比例没有网传30%那么高;郭明錤称苹果汽车团队已解散;Go 1.18 发布,正式支持泛型|极客头条

热门文章

  1. python 遍历字符串
  2. Java 打印数组的方法
  3. 微信小程序点击图片切换图片
  4. No service of type Factory available in ProjectScopeServices
  5. android studio 图片的命名规则
  6. CoordinatorLayout 的jar包位置
  7. 206. Reverse Linked List
  8. 基于zookeeper的solrCloud集群搭建
  9. block_dump观察Linux IO写入的具体文件(mysqld)
  10. python-day05正则表达式